我用对话框向导建了一个新项目TEST,其他的是默认的。在自动生成的窗体里面有一个按钮,用来发送消息
::sendmessage(test1.m_hWnd,WM_TEST,0,0);//test1是我自建的一个窗体,test1.h里面
afx_msg LRESULT OnTest(WPARAM wparam,LPARAM lparam);  //声明消息处理函数test1.cpp里面
BEGIN_MESSAGE_MAP(test1,cdialog)
ON_MESSAGE(WM_TEST,OnTest)
END_MESSAGE_MAPLRESULT test1::OnTest(WPARAM wparam,LPARAM lparam)
{
return 0;
}
在stdafx.h里面定义#define WM_TEST WM_USER+10运行之后,在对话框里面点击按钮发送消息,在OnTest函数里面打断点,发现没有响应,请问各位大侠,我这里面缺少什么,有哪里错了,发送自定义消息到底是什么步骤

解决方案 »

  1.   

    你的test1.m_hWnd窗口句柄是否有效???
      

  2.   

    你这个WM_TEST 是怎么定义的,它的值一定要在规定的范围内。WM_USER以后
      

  3.   

    用FindWindow来查找窗口test1吧 
      

  4.   

    afx_msg LRESULT OnTest(WPARAM wparam,LPARAM lparam); //声明消息处理函数是否加在下面代码的里面
    // {{AFX_MSG
    //}}AFX_MSG你在你的响应函数里加上 MessageBox 弹出消息试试。
      

  5.   

    ::sendmessage(test1.m_hWnd,WM_TEST,0,0);//test1是我自建的一个窗体
    ==========
    看看test1.m_hWnd是不是有效的
      

  6.   

    ASSERT(::IsWindow(test1.m_hWnd)); // 这里出错的话窗口句柄无效.
    ::sendmessage(test1.m_hWnd,WM_TEST,0,0);//test1是我自建的一个窗体,
    帮你转到基础版了.
      

  7.   

    ASSERT(::IsWindow(test1.m_hWnd));//我明天去试试这句,我输入test1.之后就自动弹出含m_hWnd的选项出来了,所以我一直没有怀疑这个句柄无效,
      

  8.   

    我从加10到加到100以上都没用的,准备重载run函数,不知道行不行,
      

  9.   

    你要先确定一下你的PostMessage的HWND参数是否有效??
      

  10.   

    估计是窗口句柄m_hWnd的问题~
      

  11.   

    你应该这样做,首先应该在Test里面定义#define  WM_TEST  (WM_USER+100)
                                    然后可以利用FindWindow这个函数去查找你那个TEST1窗口。
                                         HWND m_hWnd = FindWindow(NULL,TEXT("窗口的名字"));
                                    SendMessage(m_hWnd,WM_TEST,0,0);最后就是在TEST1里面去处理这个消息了。LZ试试。
      

  12.   


    我试了下,确实发现是没有激活test1窗体的问题。我先在OnTest()响应函数里面添加了个afxmessagebox(“I see you”)作为提示;然后把窗体test1显示在屏幕上,最后点击默认窗体里面的按钮,结果弹出提示,这说明实现了楼主要的功能了。