永发信息网

sendmessage 对话框不存在怎么办

答案:1  悬赏:70  手机版
解决时间 2021-11-20 11:42
  • 提问者网友:世勋超人
  • 2021-11-19 19:00
sendmessage 对话框不存在怎么办
最佳答案
  • 五星知识达人网友:行路难
  • 2021-11-19 19:51
首先简单描述一下PostMessage和SendMessage的区别,让大家有个概念。
PostMessage:只是将消息放入到消息队列中,不管是否执行都返回。
SendMessage:将消息放入到消息队列中,并立即执行返回结果。
下面开始做一个基于对话框的MFC示例:
1)创建工程,并在对话框中插入一个STATIC控件,关联变量名m_staticPrompt
2)在对话框头文件中声明函数:
afx_msg LRESULT OnRefreshPrompt(WPARAM wPara,LPARAM lPara);//目的是接受到消息后,进行响应
3)在对话框头文件中定义一个自定义消息宏名称
#define WM_REFRESH WM_USER+1
4)在对话框源文件中添加消息映射
BEGIN_MESSAGE_MAP(CTestPostMsgDlg, CDialog)
...
ON_MESSAGE(WM_REFRESH, &CTestPostMsgDlg::OnRefreshPrompt)
...
END_MESSAGE_MAP()
5)在对话框源文件中写入如下代码:
//执行WM_REFRESH消息响应
LRESULT CTestPostMsgDlg::OnRefreshPrompt(WPARAMwPara,LPARAM lPara)
{
CString* str = (CString*)lPara;
if(str->Compare(_T("POST"))==0)
m_staPrompt.SetWindowText(_T("接受到传递的消息"));
UpdateData(FALSE);
//
return TRUE;
}

//
void CTestPostMsgDlg::OnBnClickedOk()
{
//第一步传递普通的消息看看区别
//如果调试以下两句代码,您会发现:先退出后更新
// PostMessage(WM_REFRESH);
// SendMessage(WM_CLOSE);
//如果调试以下两句代码,您会发现:先更新后退出
// PostMessage(WM_CLOSE);
// SendMessage(WM_REFRESH);

//第二步一个带字符串的消息看看效果
CString* strTemp = new CString("POST");
//如果使用PostMessage传递,您会发现:字符串已经析构了才执行消息响应,这样会造成死机
// PostMessage(WM_REFRESH,0,(LPARAM)strTemp);
//如果使用SendMessage传递,您会发现:显示正常
SendMessage(WM_REFRESH,0,(LPARAM)strTemp);
delete strTemp;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯