MFC 工具栏按钮的消息响应

MFC 工具栏按钮的消息响应,第1张

晕。

工具栏上的按钮茄桐族不是窗口。

都是一个一个画上去的,你可以看看MFC的CToolBar的代码,定义了一个按钮数据块,记录按钮ID,TIP,文字,图案ID,颤弊状态,绑定数据,RECT。鼠标点击工具条的时候,搜索按钮链表,判断命中那个按钮。找到后,然后向父窗口WM_COMMAND消息轮咐,传送命中的按钮ID,如果没命中。不发生消息。

其实内部逻辑很简单,复杂的部分就是按钮布局重排,有seperator/和嵌入控件的情况,处理有点繁琐。

推荐个学习交流群:8721441o7

1、 构造CToolBar类型的对象 CToolBar tool

2、 调用CreateEx()函数 tool.CreateEx(…)

3、 在资源编辑器中新建一个工具栏资源,假定ID为IDT_MYTOOL

4、 调用CToolBar的函数LoadToolBar(IDT_MYTOOL)

5、 (可选)如果想让工具条可以停靠,那么可以调用tool.EnableDocking(TRUE)

此后还必须调用父窗口的EnableDocking(TRUE)意思是父窗口可以被停靠。

6、 (可选)如果希望工具条可以隐藏和显芹庆示,需要调用ShowControlBar(CControlBar*

pcontrol)

至此,工具栏就添加完成了。

接下来我们希望让工具栏中的按钮可以在我们鼠标经过时显示提示信息,如图:

实现这个功能需要做衫首昌以下工作:

1、 在cpp文件的OnInitDialog()中添加:tool.EnableToolTips(TRUE)或者在CreateEx()函或扒数中设置CBRS_TOOLTIPS标识。

在头文件中添加

BOOL OnToolTipsNotify(UINT id,NMHDR * pNMHDR,LRESULT* pResult)

2、 在.Cpp文件添加如下红色代码:

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipsNotify) //声明

工具栏提示 通知消息 ( 必须手动添加)

END_MESSAGE_MAP()

3、定义如下函数:

BOOLCMainFrame::OnToolTipsNotify(UINT id, NMHDR* pNMHDR,LRESULT* pResult)

TOOLTIPTEXT* pT =(TOOLTIPTEXT*)pNMHDR //将pNMHDR转换成TOOLTIPTEXT指针类型数据

UINTnID =pNMHDR->idFrom //获取工具条上按钮的ID

if(nID== IDC_XXX) //如果nID是希望获取的ID,那么就设置相应提示信息到TOOLTIPTEXT结构体的lpszText中。

{

pT->lpszText = "显示文字"

}

return FALSE

}

首先说明一下:

BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)和END_MESSAGE_MAP()之间是VC编译器在编译程序时候,查找消息与函数的映射关系的地方,比如编译这个文件,当编译器在这个之间发现语句ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0),时,就会把消息ON_BN_CLICKED,IDC_ICONBUT0,OnIconbut0三者关联起来,使得程序运行的时候,点击ID为IDC_ICONBUT0后产生ON_BN_CLICKED消息,同巧纤时OnIconbut0函数被调用。对于一个窗口,除了我们通过手动添加或通过向导添加的消息映射之外,还有很多消息需要进行映射;比如这个例子,当鼠标从窗口上移动时,系统会向窗口发送鼠标移动消息,可是你在这里并没有处理,那谁来映射并处理这些消息,因为编译器在这里没有找到鼠标移孝好仿动的消息映射,它就会从这个类的袜弊父类逐曾往上找,直到找到为止,而BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)就是告诉编译器,如果在这里找不到消息映射,就从这个类的父类CFormView开始往上查找。比如鼠标移动消息,在这里并没有做映射处理,编译器就会到父类CFormView中去查找,如果父类CFormView中也没有,编译器就会不断的往上找,直到找到CWnd类,CWnd类映射了所有的窗口消息。

对于不熟悉如何添加消息映射的朋友,最好用向导添加。对于手动添加消息映射,除了在这里添加消息映射之外,还要定义消息函数。

你是怎样添加的,怎么个无法编译,编译错误是什么?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11987238.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存