- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MFC用户自定义消息SendMessage的使用.docx
用户自定义消息SendMessage的使用这里主要讲一下mfc中SendMessage的使用方法。传递消息主要分4步:在类的定义中声明消息函数:afx_msg void AAA();在相应的cpp文件中的MESSAGE_MAP区域内添加ON_MESSAGE(MESSAGE_ID,AAA),其中参数1为要传递消息的ID,参数2为刚刚声明的函数名称,不用带括号。实现消息函数:在cpp文件中添加LRESULT 类名::AAA(WPARAM wparam,LPARAM lparam){执行内容……return 0;}发送消息:在需要发送消息的地方添加下列语句:HWND hWnd = ::FindWindowEx( m_hWnd, NULL, NULL, WINDOW_TEXT ) ;FromHandle(hWnd)-SendMessage(MESSAGE_ID,a,b);其中,m_hWnd为接收消息的父窗口的句柄,WINDOW_TEXT为接收消息窗口的标题,得到的hWnd为接收消息窗口的句柄。调用该窗口的SendMessage函数,MESSAGE_ID为刚刚设定的消息ID,a和b是要传递的参数。注:在这4个步骤中,前三个我在做的时候基本没什么障碍。问题主要出现在第4步。开始找到网上的例子给的都是FindWindow函数,怎么用都不好使。后来看到有人说FindWindow是找操作系统下打开的窗口的句柄,找窗口中子窗口要用FindWindowEx函数。我也尝试过用对话框的ID找到相应的句柄,像GetDlgItem(ID)函数一样,未果。我使用的对话框都是没有标题栏的,所以也就没有窗口的标题,当然这并不会影响我设置标题。只要在生成该窗口的区域内添加SetWindowText(“窗口标题”)就可以了。也就是说窗口标题可以设置,但是不会显示。最后一点在SendMessage()函数中,MFC默认传递的参数是WPARAM和LPARAM型(一个是UINT型,一个LONG型),如果要传递浮点类型,或者其它不是整数的类型,就可以用指针的形式传递(如果发送方只是申请一个变量并以地址的形式传递,然后接收方以指针的形式接收,如果在执行完SendMessage之后原函数体立即结束了,我不知道在接收函数体接收和使用该变量的之间的一瞬间,该内存区域会不会被占用,我觉得还是有这种可能的。所以我觉得还是在原函数体先申请一块内存,然后在接收函数使用完之后再释放该内存比较合理吧)。在以下这个例子中是一个MFC的对话框应用程序,名字为MessageTest。它包括左边的一个发送对话框,和右边的两个接收对话框,其中发送对话框和接收对话框1分别是主对话框的子对话框,在接受对话框中有一个Tab Control,在Tab Control中有个接受对话框2。这么做的目的主要是为了理解如何找句柄的,为此我把几个对话框设置成深陷下去的便于观察。准备工作:手动添加1个设置全局变量的头文件GlobalSetting.h,这样做的目的是让所有的地方都能知道对话框的标题和自定义的结构。在GlobalSetting.h中加入下列语句:#define RECEIVE1_TITLE receive1 title#define RECEIVE2_TITLE receive2 title#define GET_INT WM_USER+1000#define GET_DOUBLE WM_USER+1001#define GET_STRING WM_USER+1002#define GET_STRUCT WM_USER+1003struct SendStruct{int a;int b;int c;int d;};RECEIVE1_TITLE和RECEIVE2_TITLE定义两个接收对话框的标题,后边的4个GET_是4个消息ID,WM_USER是用户自定义消息的起始ID。在各个需要使用这些内容的位置添加#include “GlobalSetting.h”。在生成两个接受对话框的位置加入SetWindowText(RECEIVE1_TITLE)和SetWindowText(RECEIVE2_TITLE)。例1:从发送对话框发送整数到接受对话框1中。在接受对话框1的类的定义中加入afx_msg LRESULT GetInt(WPARAM wparam,LPARAM lparam);在对应的cpp文件中加入ON_MESSAGE(GET_INT,Receive1Dlg::GetInt)在函数实现部分加入LRESULT Receive1Dlg::GetInt(WPARAM wparam,LPARAM lparam){CString str;str.Format(%d %d,wparam,lparam);CEdit* e
文档评论(0)