我已经在对话框中定义了自定义消息,在对话框中测试发送消息能接收到,但在无窗体的类中
我用PostMessage(WM_MY_MESSAGE,0,0)发消息,对话框却接收不到,这是怎么回事?

解决方案 »

  1.   

    默认this->PostMessage,这个this就对话框吗?如果在无窗体的类中this并没有实体显示只能用,控件变量或窗体句柄.PostMessage(即xx.PostMessage)或者直接用全局函数::PostMessage(句柄,....);
      

  2.   

    HWND hwnd=FindWindow("class","caption");
    PostMessage(hwnd,WM_YOURMESSAGE,0,0);
      

  3.   

    所以第一个消息其实是发给对话框的,由于是默认this,所以this可以不写,系统会自动加上的.
      

  4.   

    ::PostMessage(hWndDlg,WM_MY_MESSAGE,0,0);
      

  5.   

    用全局的PostMessage::PostMessage(hWndDlg,WM_YOURMESSAGE,0,0);
      

  6.   

    指定hWnd,然后发送消息就好了 PostMessage
      

  7.   

    我在用::PostMessage(WM_MY_MESSAGE,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);
    运行后一样会出错,怎么回事?
      

  8.   

    因为不能确定你的“无窗体的类”是个什么类,
    因此最好的方法是用win api 函数::PostMessage,你的格式用错了,正确格式是:
    BOOL PostMessage(  
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam
    );
      

  9.   

    谢谢楼上各位回复,但是我还是搞不定啊。
    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__ *'真搞不情楚,问题出在那里。
      

  10.   

    API函数PostMessage的第一个参数是HWND类型的,而你用的GetDlgItem返回的确是CWnd *,当然不行啦。建议先用FindWindow,然后用PostMessage.
      

  11.   

    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_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()大家看看应该没有错吧, 我在例子中也是这样写的,例子可以响应,但在我的工程却无法响应,有一点,我的工程中已经存在很多自定义消息,会不会我的消息与它们有冲突呢?!
      

  12.   


    CWnd *pMainWnd=GetDlgItem(IDD_MAINFORM1_SUB2_DIALOG);
    ::PostMessage(pMainWnd->GetSafeHwnd(),WM_MY_MESSAGE,0,0);
      

  13.   

    谢谢楼上各位回复,但是我还是搞不定啊。
    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
    没想到那么多人来和我强分啊!