怎么在一个无窗体的类中发消息给一个窗体?? 我已经在对话框中定义了自定义消息,在对话框中测试发送消息能接收到,但在无窗体的类中我用PostMessage(WM_MY_MESSAGE,0,0)发消息,对话框却接收不到,这是怎么回事? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 默认this->PostMessage,这个this就对话框吗?如果在无窗体的类中this并没有实体显示只能用,控件变量或窗体句柄.PostMessage(即xx.PostMessage)或者直接用全局函数::PostMessage(句柄,....); HWND hwnd=FindWindow("class","caption");PostMessage(hwnd,WM_YOURMESSAGE,0,0); 所以第一个消息其实是发给对话框的,由于是默认this,所以this可以不写,系统会自动加上的. ::PostMessage(hWndDlg,WM_MY_MESSAGE,0,0); 用全局的PostMessage::PostMessage(hWndDlg,WM_YOURMESSAGE,0,0); 指定hWnd,然后发送消息就好了 PostMessage 我在用::PostMessage(WM_MY_MESSAGE,0,0);系统会报错:error C2660: 'PostMessageA' : function does not take 3 parameters如果直接取hWndCWnd *pWnd=GetDlgItem(IDD_MAINFORM1_SUB2_DIALOG);pWnd->PostMessage(WM_MY_MESSAGE,0,0);运行后一样会出错,怎么回事? 因为不能确定你的“无窗体的类”是个什么类,因此最好的方法是用win api 函数::PostMessage,你的格式用错了,正确格式是:BOOL PostMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); 谢谢楼上各位回复,但是我还是搞不定啊。CWnd *pMainWnd=GetDlgItem(IDD_MAINFORM1_SUB2_DIALOG);::PostMessage(pMainWnd,WM_MY_MESSAGE,0,0);我这样用的时候,系统编译也会报错error C2664: 'PostMessageA' : cannot convert parameter 1 from 'class CWnd *' to 'struct HWND__ *'真搞不情楚,问题出在那里。 API函数PostMessage的第一个参数是HWND类型的,而你用的GetDlgItem返回的确是CWnd *,当然不行啦。建议先用FindWindow,然后用PostMessage. HWND hwnd=FindWindow("#32770","人员分配");if (PostMessage(hwnd,WM_MY_MESSAGE,0,0)) AfxMessageBox("Send OK");我现在自己开一个新的程序测试用上面这种方法可以响应消息,但是我的程序中,消息是成功发送了,但却不响应,好像发送出去的消息已经消失一样我在对话框的头文件这是样定义 #define WM_MY_MESSAGE (WM_USER+100)//{{AFX_MSG(CMainForm1_Sub2)afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); //}}AFX_MSGDECLARE_MESSAGE_MAP().cpp中BEGIN_MESSAGE_MAP(CMainForm1_Sub2, CDialog)//{{AFX_MSG_MAP(CMainForm1_Sub2)ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage) //}}AFX_MSG_MAPEND_MESSAGE_MAP()大家看看应该没有错吧, 我在例子中也是这样写的,例子可以响应,但在我的工程却无法响应,有一点,我的工程中已经存在很多自定义消息,会不会我的消息与它们有冲突呢?! CWnd *pMainWnd=GetDlgItem(IDD_MAINFORM1_SUB2_DIALOG);::PostMessage(pMainWnd->GetSafeHwnd(),WM_MY_MESSAGE,0,0); 谢谢楼上各位回复,但是我还是搞不定啊。CWnd *pMainWnd=GetDlgItem(IDD_MAINFORM1_SUB2_DIALOG);::PostMessage(pMainWnd,WM_MY_MESSAGE,0,0);我这样用的时候,系统编译也会报错error C2664: 'PostMessageA' : cannot convert parameter 1 from 'class CWnd *' to 'struct HWND__ *'真搞不情楚,问题出在那里。使用pMainWnd->m-wnd或者pMainWnd->GetSafeHwnd()他要是HWND句柄不是CWnd没想到那么多人来和我强分啊! 离职了,散点小分! 这样的声明似乎没有意义: typedef class Foo Foo; 怎样用socket通信向FTP服务器上传输文件? billboarding 如何得到音频频率? 如何模拟两个串口的接收数据 帮忙啊!有谁知道dbgrid的详细用法 在线等 vc作图烦恼2 奇怪的问题,我用FindWindow()函数,和spy++看到的窗口句柄不一样. 做游戏从何开始 出师未捷身先死,长使英雄泪满襟。改行做实施了。 怎么将图片文件以.jpg的格式显示出来??
PostMessage(hwnd,WM_YOURMESSAGE,0,0);
系统会报错:error C2660: 'PostMessageA' : function does not take 3 parameters如果直接取hWnd
CWnd *pWnd=GetDlgItem(IDD_MAINFORM1_SUB2_DIALOG);
pWnd->PostMessage(WM_MY_MESSAGE,0,0);
运行后一样会出错,怎么回事?
因此最好的方法是用win api 函数::PostMessage,你的格式用错了,正确格式是:
BOOL PostMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
CWnd *pMainWnd=GetDlgItem(IDD_MAINFORM1_SUB2_DIALOG);
::PostMessage(pMainWnd,WM_MY_MESSAGE,0,0);我这样用的时候,系统编译也会报错
error C2664: 'PostMessageA' : cannot convert parameter 1 from 'class CWnd *' to 'struct HWND__ *'真搞不情楚,问题出在那里。
if (PostMessage(hwnd,WM_MY_MESSAGE,0,0))
AfxMessageBox("Send OK");
我现在自己开一个新的程序测试用上面这种方法可以响应消息,但是我的程序中,消息是成功发送了,但却不响应,好像发送出去的消息已经消失一样我在对话框的头文件这是样定义 #define WM_MY_MESSAGE (WM_USER+100)//{{AFX_MSG(CMainForm1_Sub2)
afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP().cpp中
BEGIN_MESSAGE_MAP(CMainForm1_Sub2, CDialog)
//{{AFX_MSG_MAP(CMainForm1_Sub2)ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()大家看看应该没有错吧, 我在例子中也是这样写的,例子可以响应,但在我的工程却无法响应,有一点,我的工程中已经存在很多自定义消息,会不会我的消息与它们有冲突呢?!
CWnd *pMainWnd=GetDlgItem(IDD_MAINFORM1_SUB2_DIALOG);
::PostMessage(pMainWnd->GetSafeHwnd(),WM_MY_MESSAGE,0,0);
CWnd *pMainWnd=GetDlgItem(IDD_MAINFORM1_SUB2_DIALOG);
::PostMessage(pMainWnd,WM_MY_MESSAGE,0,0);我这样用的时候,系统编译也会报错
error C2664: 'PostMessageA' : cannot convert parameter 1 from 'class CWnd *' to 'struct HWND__ *'真搞不情楚,问题出在那里。使用pMainWnd->m-wnd或者pMainWnd->GetSafeHwnd()
他要是HWND句柄不是CWnd
没想到那么多人来和我强分啊!