
1消息发送方:发送消息
首先在A的头文件(h)中自定义这个消息:
1 #define WM_MyMessage WM_USER+100
或者:
1 const UINT WM_MYMESSAGE = WM_USER + n
需注意以下几点:
所有自定义消息都是以WM_USER消息为基础加上一个任意的自然数n来表示的, n一般至少大于100
该消息一般加在stdafxh 或resourceh 或h中,一般都是全局变量头文件
A是向外发送消息的对象,因此在A的某个方法(函数)里就会调用用来发消息的函数B::SendMessage()/B::PostMessage(),因为是B接受消息。
回到顶部
2消息接收方:接受消息
消息接收方对象接受一个消息,需有以下三部分:
在头文件(h)中有该消息的处理函数的原型;
在实现文件(cpp)中有接受消息映射的宏;
在实现文件(cpp)中有该消息的处理函数的具体实现。
21 头文件中加上自定义消息的处理函数原型
在DECLARE_MESSAGE_MAP()语句之前,加如下形式的函数原型:
1 afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
对Win32来说,wParam, lParam是传递消息最常用的手段。
22 实现文件中加上接受消息映射的宏
在cpp文件里,BEGIN_MESSAGE_MAP语句之后,加如下形式的代码:
1 ON_MESSAGE(WM_MyMessage, OnMyMessage)
也就是说WM_MyMessage消息对应OnMyMessage函数。注意,上面是不用分号结尾的。
23 在实现文件中给出消息处理函数的具体实现
1 LRESULT CBDlg::OnMyMessage( WPARAM wParam, LPARAM lParam )
2 {
3 //处理用户自定义消息
4
5 return 0;
6 }
你可以设置一个全局变量bool stop = false,
点击按钮,启动线程,线程函数开始采集
再次点击,修改stop=true,线程函数检测到stop改变,于是退出采集
在类视图中选择要添加消息相应函数的类,右击->属性,消息选项卡选择要添加的函数。
把输入光标定在一个类的类名上,然后 “Ctrl+Enter”,调出属性面板,在面板上就可以看到有消息映射的按钮了。
切换过去只后,就可以看到所有能自动添加消息映射的消息了。
在MFC中,可以通过以下步骤建立消息响应函数与控件对应的关系:
打开MFC应用程序的资源视图,双击对应的对话框资源文件(dlg文件)打开对话框编辑器。
在对话框编辑器中,选择要添加消息响应函数的控件。例如,选择一个按钮控件,然后右键单击该控件,在d出的上下文菜单中选择“添加事件处理程序”。
在d出的“添加事件处理程序”对话框中,选择要添加的消息类型。例如,选择“BN_CLICKED”表示添加“单击”消息的响应函数。
在“添加事件处理程序”对话框中,选择要添加响应函数的类。这里需要选择的是包含响应函数的类,通常是该对话框所在的类。
在“添加事件处理程序”对话框中,输入要添加的响应函数的名称。这个名称需要以“On”开头,后面跟上消息类型和控件的ID,例如“OnBnClickedButton1”。
点击“添加”按钮,将响应函数添加到代码中。然后,在响应函数中编写具体的处理逻辑。
完成上述步骤后,消息响应函数就与控件对应起来了。当用户 *** 作控件时,MFC会自动调用相应的消息响应函数来处理该消息。
vc60 afx_msg void OnAdd(WPARAM wParam, LPARAM lParam);vc6+ afx_msg LRESULT OnAdd(WPARAM wParam, LPARAM lParam);
MFC基于对话框——右键d出菜单,并响应函数。
1、新建一个菜单资源,比如把菜单的ID号为IDR_MENU1。
2、在ClassWizard中
void CArcSoft_EffectDlg::OnRButtonDown(UINT nFlags, CPoint point)
{// TODO: Add your message handler code here and/or call default
CMenu menu; //定义下面要用到的cmenu对象
menuLoadMenu(IDR_MENU1); //装载自定义的右键菜单;
CMenu pContextMenu=menuGetSubMenu(0); //获取第一个d出菜单,所以第一个菜单必须有子菜单;
CPoint point1;//定义一个用于确定光标位置的位置;
GetCursorPos(&point1);//获取当前光标的位置,以便使得菜单可以跟随光标
pContextMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1x,point1y,AfxGetMainWnd()); //在指定位置显示d出菜单;
CDialog::OnRButtonDown(nFlags, point1)};
这时,当右键点击对话框,就可以将菜单调出来了,如何响应菜单项有如下 *** 作:
3、在资源视图中右键单击菜单项,建立类向导(ClassWizard),此时会d出一个对话框,点击第二个,加入到已存在的类,按确定。
4、在资源视图中为菜单中的每一项建立类向导,并添加Command响应函数,然后在这个函数中加入语句就可以啦。
ON_COMMAND(ID_COPY, OnCopy)//加Command响应函数,自动出现的灰色语句
void CArcSoft_EffectDlg::OnCopy()
{// TODO: Add your command handler code here
MessageBox("复制成功!");
MFC文档的菜单栏中添加一个command响应函数
基于CFormView的应用程序,经常会在菜单栏中添加一个按钮,点击该按钮时,会d出一个对话框~~
具体实现方式如下
1新建一个对话框资源,同时新建一个对话框类和该资源对应,舍对话框类名为CTestDialog;
2在资源视图中找到Menu 这个文件夹,双击里面的文件IDR_MAINFRAME,在这里可以添加自己想要的菜单,也可把原来的文件、编辑等菜单给删掉~~
添加菜单的方法:右击右侧空白区域,选择properties,d出的对话框中,把pop_up勾选掉,添加一个ID和CAPTION,设ID为ID_MYTEST,caption|为测试
(要注意的是,最好选择View类,而不是Frame类或其他类)
3Ctrl+Wd出类向导,message maps中的class name 选择为View类,
从Object IDs中找到我们上一步设置的ID_MYTEST,右侧的message选择Command命令,添加一个命令响应函数;
4在该函数中添加
CTestDialog dlg;
dlgDoModal();
5对应的菜单项添加WM_COMMAND消息,在命令响应函数中DoModal/Create/ShowWindow()你的对话框即可。
6消息映射:
ON_COMMAND(菜单编号,处理函数)
h
public:
处理函数
cpp
处理函数
{
CDialog dc;
dcdomodal();
}
d出非模态对话框的方法:
(1)用类向导给菜单栏中菜单添加一个响应函数
(2) 在头文件中加入
#include "Dlgh"
public:
CDlg Dlg;
(3)在代码中加入
Dlg=new CDlg(this);
Dlg->Create(IDD_DIALOG1); // IDD_DIALOG1为对应的菜单栏中那个按钮的ID
Dlg->ShowWindow(SW_RESTORE);
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)