ZKX's LAB

mfc 向所有窗口发送自定义消息

2020-07-16知识3
MFC自定义消息的方法? 建议你仔细看看关于消息机制的书,这是windows编程非常重要的一个概念,基本上每一本win编程书籍上都要花费1~2大章去讲解。所谓自定义消息,是相对系统消息来说的,你将的键盘消息这些,从硬件和操作系统来的,都是系统消息,不能自定义。在MFC中,对于系统消息,你需要做的就是设置响应函数,并在函数中实现对该消息发生后要处理的事情。对于自定义消息,首先你需要的是一个“消息发送者”,而不是接收处理,从哪里发送消息,比如来自菜单、按键等等。板卡的按键,你首先需要的是接收信号,比如在一个线程中,然后自定义一个消息号,当接收按键信号后,想你的主窗口或者指定窗口发送这个消息。在窗口类中,自定义消息处理函数,并在消息处理函数中弹出对话框即可。 MFC tabctrl控件子窗口怎么向父窗口发自定义消息?用sendmessage()发了,可是父窗口中收不到,不响应 是你的窗口关系没搞清,tab控件的父窗口是CBucterSmartHomeSystemDlg CameraPage的父窗口是tab,所以你GetParent()->w_hWnd是发送给tab了, CBucterSmartHomeSystemDlg自然收不到。要解决问题,可以GetParent()->GetParent()->w_hWnd。 求解,MFC问题,自定义窗口类接收不到WM_KEYDOWN消息 按照逻辑,这应该是可行的,我刚才试了,确实是可行的,按键了能得到键按下的消息,ShowPaneDlg类是窗格类吧?你在ShowPaneDlg这个类的父窗口是哪个?是不是被父窗口截取了消息? 求关于MFC的自定义消息和发送消息的详细说明. 都说是自定义了!你想传什么参数都行,只要行!比如我要传给一个窗口一个字符串 SendMessage(hwnd,WM_XXX,0,(LPARAM)buf);hwnd 是那个窗口的句柄WM_XXX是自己定义的消息用#define 定义个数字!那个窗口的类里用红 ON_MESSAGE(WM_XXX,ONXXXX) ONXXXX是个函数名!定义如下!h afx_msg LRESULT ONXXX(WPARAM XXX,LPARAM YYY);cpp LRESULT CXXX:ONXXX(.) { switch(xxx) { TCHAR*buf=(TCHAR*)yyyy;得到字符串,那个xxxx 变量就是0 随便你定义变量有内存的概念么?} } 如何在MFC对话框之间自定义消息传递 1.消息发送方:首先在A的头文件(*.h)中自定义这个消息: 1#define WM_MyMessage WM_USER+100 或者: 1 const UINT WM_MYMESSAGE=WM_USER+n 需注意以下几点:所有自定义消息都是以WM_USER消息为基础加上一个任意的自然数n来表示的,n一般至少大于100 该消息一般加在stdafx.h 或resource.h 或*.h中,一般都是全局变量头文件 A是向外发送消息的对象,因此在A的某个方法(函数)里就会调用用来发消息的函数B:SendMessage()/B:PostMessage(),因为是B接受消息。2.消息接收方:接受消息消息接收方对象接受一个消息,需有以下三部分:在头文件(*.h)中有该消息的处理函数的原型;在实现文件(*.cpp)中有接受消息映射的宏;在实现文件(*.cpp)中有该消息的处理函数的具体实现。2.1 头文件中加上自定义消息的处理函数原型在DECLARE_MESSAGE_MAP()语句之前,加如下形式的函数原型: 1 afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);对Win32来说,wParam,lParam是传递消息最常用的手段。2.2 实现文件中加上接受消息映射的宏在cpp文件里,BEGIN_MESSAGE_MAP语句之后,加如下形式的代码: 1 ON_MESSAGE(WM_MyMessage,OnMyMessage) 也就是说WM_... MFC中如何从一个自定义类发送消息至视类、文档类、框架类? 直接在类属性里加消息响应函数 谁能帮我把MFC自定义消息流程说一下,要详细一些,有几个点: 1.两个都是消息的参数,是长整型的。自定义消息的话你想传什么就传什么;要是系统消息,可以查msdn,里面都有说明,每个参数的值代表什么意思。2.第一个是api,需要传一个窗口句柄,可以对任意窗口发消息;第二个是CWnd的成员,不要传入窗口句柄,只能对特定的窗口发消息。3.最后两个参数就是第一个问题中说的那俩东东。 C++ 怎么自定义消息处理?网上很多用到的afx_msg都是MFC中的,我想知道不用MFC又该怎么做? windows编程中如果复需要自定义消息的话,可以在响应的头文件中使用define来定义,比如现在定义消息,#define WM_MY_MSG WM_USER+100,这里为了不和windows自身的消息冲突,所以将起始值设为 WM_USER+100 消息定义之制后该这么用呢?这就要使用SendMessage函数在适当的时候来向窗体发送消息了,SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam),hWnd是接受消息的窗体句柄百,Msg 为要发送的消息,wParam和lParam都是附加的信息,后两个参数应该比较常见吧,哈哈。那么发送以后我度们该怎么处理呢?这就必须要“抓住”从SendMessage发来的消息了,现在我们在问窗口过程中WndProc中添加消息响应机制,在switch中添加如下代码 case WM_MY_MSG: 在这里写你自答己的处理代码就OK了 return 0;这样不需要和MFC打任何交道,轻松搞定自定义消息! MFC自定义消息 可以在对话框的类中添加一个(CWnd*)成员变量,在构造对话框的对象时可以将主框架类的对象指针赋给它,如Dlg1 dlg(this);然后再调用dlg.DoModal();最后,在发送消息时不能用CWnd类的成员函数PostMessage,而要用系统全局函数:PostMessage(((CMainFrame*)pWnd)->GetActiveView()->m_hWnd,WM_USERMSG,NULL,NULL);这样才能在view类接收到消息。你原来的方法可能消息路由不到view类 MFC里面,如何在自定义类里面响应菜单的command命令? MFC下,菜单的command命令都是对应着MainFrame或者子窗口的(这个有从属关系),所以,你必须在主窗口或者子窗口下做响应函数。当然,你可以在响应函数中调用子定义类的东西,或者发送消息给自定义类,实现在子定义类的控制。建议使用资源里面菜单项上面的ClassWizard创建菜单响应函数。

随机阅读

qrcode
访问手机版