精品主页 | 软件下载 | 系统下载 | 精品导航| 精彩图片 | 转帖工具 | 版主申请 | 影视下载

查看完整版本: VC制作类似于IE4的酷工具条

mxh1998 2008-3-26 22:37

VC制作类似于IE4的酷工具条

  


                  用VC制作工具条的方法很多,本文提供一种制作类似于IE4.0的工具条。能实现鼠标移上图标时,图标变为彩色,在工具条的位置,能停摆几种工具条。具体原理解释见步骤过程。

步骤如下:

1.运行AppWizard,选择Single Document,其余选缺省设置。

2.点击Insert Resource ,加入两条Bitmap,定义为:IDB_COLDTOOLBAR和IDB_HOTTOOLBAR

3.在CMainFrame中加入成员变量:

CReBar   m_wndReBar;

CComboBoxEx m_wndAddress;

4.修改CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStrUCt)函数如下:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStrUCt)

{

CImageList img;

CString str;



if (CFrameWnd::OnCreate(lpCreateStrUCt) == -1)

return -1;



if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD &brVBar WS_VISIBLE &brVBar CBRS_TOP

&amp;brVBar CBRS_GRIPPER &amp;brVBar CBRS_TOOLTIPS &amp;brVBar CBRS_FLYBY &amp;brVBar CBRS_SIZE_DYNAMIC) )<BR < TD>{

TRACE0("Failed to create toolbar");

return -1;   // fail to create

}



if (!m_wndStatusBar.Create(this) &amp;brVBar&amp;brVBar

!m_wndStatusBar.SetIndicators(indicators,

sizeof(indicators)/sizeof(UINT)))

{

TRACE0("Failed to create status bar");

return -1;   // fail to create

}



m_wndToolBar.GetToolBarCtrl().SetButtonWidth(50, 150);  //设置工具条按钮大小

m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);



//创建鼠标移上时的图标列表

img.Create(IDB_HOTTOOLBAR, 22, 0, RGB(255, 0, 255));m_wndToolBar.GetToolBarCtrl().SetHotImageList(&amp;img);

img.Detach();

//创建无焦点的图标列表

img.Create(IDB_COLDTOOLBAR, 22, 0, RGB(255, 0, 255));

m_wndToolBar.GetToolBarCtrl().SetImageList(&amp;img);

img.Detach();

m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT &amp;brVBar TBSTYLE_TRANSPARENT);

//设置要显示的图标数,可根据实际情况修改

m_wndToolBar.SetButtons(NULL, 9);



//逐个设置图标按钮的属性

/*SetButtonInfo(( int nIndex, UINT nID, UINT nStyle, int iImage ); 参数如下:

nIndex :图标按钮的索引值nID:图标按钮关联的资源号

nStyle:  图标按钮的风格

常用的几种如下:

TBBS_BUTTON标准按钮

TBBS_SEPARATOR分隔符

TBSTYLE_DROPDOWN带有下箭头的按钮

iImage:  关联建立的ImageList中图形的索引值


  


                  




*/



m_wndToolBar.SetButtonInfo(0, ID_FILE_NEW, TBSTYLE_BUTTON, 0);

m_wndToolBar.SetButtonText(0, "回退");

m_wndToolBar.SetButtonInfo(1, ID_FILE_OPEN, TBSTYLE_BUTTON , 1);

m_wndToolBar.SetButtonText(1, "前进");

m_wndToolBar.SetButtonInfo(2, ID_FILE_SAVE, TBSTYLE_BUTTON&amp;brVBarTBBS_SEPARATOR, 2);

m_wndToolBar.SetButtonText(2, "停止");

m_wndToolBar.SetButtonInfo(3, ID_FILE_PRINT_SETUP, TBSTYLE_BUTTON &amp;brVBar TBSTYLE_DROPDOWN, 3);

m_wndToolBar.SetButtonText(3, "打印设置");



CRect rectToolBar;



// 设置工具条大小

m_wndToolBar.GetItemRect(0, &amp;rectToolBar);

m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(30,20));



// 创建

if (!m_wndAddress.Create(CBS_DROPDOWN &amp;brVBar WS_CHILD, CRect(0, 0, 200, 120), this, AFX_IDW_TOOLBAR   1))

{

TRACE0("Failed to create combobox");


return -1;   // fail to create

}



COMBOBOXEXITEM item;



item.mask = CBEIF_TEXT;

item.iItem = -1;

item.pszText = "健松思想";

m_wndAddress.InsertItem(&amp;item);



if (!m_wndReBar.Create(this))

{

TRACE0("Failed to create rebar");

return -1;   // fail to create

}



// 将工具条和生成的输入框加入CReBar对象,集中显示在工具条区域

m_wndReBar.AddBar(&amp;m_wndToolBar);

m_wndReBar.AddBar(&amp;m_wndAddress, "地址", NULL, RBBS_FIXEDBMP &amp;brVBar RBBS_BREAK);



return 0;

}


  


                  






到此,运行程序,已经可以看到一个类似IE4.0的程序出来了。但是下拉式图标按钮并没有显示出下拉菜单,也没有对输入框进行消息响应。继续修改程序如下:



5.制作菜单IDR_PRINT_POPUP

6.在MainFrame.h加入

afx_msg void OnDropDown(NMHDR* pNotifyStrUCt, LRESULT* pResult);

在MainFrame.cpp中的MESSAGE_MAP加入消息映射

ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnDropDown)

和处理函数体:

void CMainFrame::OnDropDown(NMHDR* pNotifyStrUCt, LRESULT* pResult)

{

// this function handles the dropdown menus from the toolbar

NMTOOLBAR* pNMToolBar = (NMTOOLBAR*)pNotifyStrUCt;<BR < TD>CRect rect;



// translate the current toolbar item rectangle into screen coordinates

// so that we'll know where to pop up the menu

m_wndToolBar.GetToolBarCtrl().GetRect(pNMToolBar-&gt;iItem, &amp;rect);

rect.top = rect.bottom;

::ClientToScreen(pNMToolBar-&gt;hdr.hwndFrom, &amp;rect.TopLeft());

if(pNMToolBar-&gt;iItem == ID_FILE_PRINT_SETUP)

{

CMenu menu;

CMenu* pPopup;



// the font popup is stored in a resource

menu.LoadMenu(IDR_PRINT_POPUP);

pPopup = menu.GetSubMenu(0);

pPopup-&gt;TrackPopupMenu(TPM_LEFTALIGN &amp;brVBar TPM_LEFTBUTTON, rect.left, rect.top   1, AfxGetMainWnd());

}

*pResult = TBDDRET_DEFAULT;

}



7.处理对Combox的响应,这里只对内容改变的消息进行处理,若要添加别的处理,参看Combo Box Handlers的消息映射。

在MainFrame.h中加入afx_msg void OnNewAddress();

在MainFrame.cpp中的MESSAGE_MAP中加入消息映射

ON_CBN_SELENDOK(AFX_IDW_TOOLBAR   1,OnNewAddress)

同时加入函数体

void CMainFrame::OnNewAddress()

{

CString str;

ShellExecute(NULL,"OPEN[/img]}
页: [1]
查看完整版本: VC制作类似于IE4的酷工具条