大家好,博主在这里跟大家分享一下学习MFC的经验。关于MFC的每篇帖子我都会奉上原文档下载地址(百度文库)和源代码的下载地址(CSDN),都是免金币或积分的!目的就是更加有利于与大家交流,共同进步!因为是初学,所以肯定有疏漏之处,请大家指正
SendMessage可以理解为,SendMessage函数发送消息,等待消息处理完成后,SendMessage才返回。稍微深入一点,是等待窗口处理函数返回后,SendMessage就返回了。
PostMessage可以理解为,PostMessage函数发送消息,不等待消息处理完成,立刻返回。稍微深入一点,PostMessage只管发送消息,消息有没有被送到则并不关心,只要发送了消息,便立刻返回
这里主要讲一下mfc中SendMessage的使用方法。传递消息主要分4步:
1. 在类的定义中声明消息函数:afx_msg void AAA();
2. 在相应的cpp文件中的MESSAGE_MAP区域内添加ON_MESSAGE(MESSAGE_ID,AAA),其中参数1为要传递消息的ID,参数2为刚刚声明的函数名称,不用带括号。
3. 实现消息函数:在cpp文件中添加
LRESULT 类名::AAA(WPARAM
wparam,LPARAM lparam) {
执行内容
…
return
0;
}
4. 发送消息:在需要发送消息的地方添加下列语句:
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默认