分享
 
 
 

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

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

用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 ¦ WS_VISIBLE ¦ CBRS_TOP

¦ CBRS_GRIPPER ¦ CBRS_TOOLTIPS ¦ CBRS_FLYBY ¦ CBRS_SIZE_DYNAMIC) )

{

TRACE0("Failed to create toolbar ");

return -1; // fail to create

}

if (!m_wndStatusBar.Create(this) ¦¦

!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(&img);

img.Detach();

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

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

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

img.Detach();

m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT ¦ 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¦TBBS_SEPARATOR , 2);

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

m_wndToolBar.SetButtonInfo(3, ID_FILE_PRINT_SETUP, TBSTYLE_BUTTON ¦ TBSTYLE_DROPDOWN, 3);

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

CRect rectToolBar;

// 设置工具条大小

m_wndToolBar.GetItemRect(0, &rectToolBar);

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

// 创建

if (!m_wndAddress.Create(CBS_DROPDOWN ¦ 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(&item);

if (!m_wndReBar.Create(this))

{

TRACE0("Failed to create rebar ");

return -1; // fail to create

}

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

m_wndReBar.AddBar(&m_wndToolBar);

m_wndReBar.AddBar(&m_wndAddress, "地址", NULL, RBBS_FIXEDBMP ¦ 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;

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->iItem, &rect);

rect.top = rect.bottom;

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

if(pNMToolBar->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->TrackPopupMenu(TPM_LEFTALIGN ¦ 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" ,"http://jonson.126.com",NULL,NULL,SW_SHOW);

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有