假设2008生成的窗口类名是CDlg,其他类名是CX
::PostMessage()这个第一个参数要求的句柄怎么填。---------------------------------CX.app文件内-----------------------
#include "CDlg.h"
((CDlg*)AfxGetMainWnd())->PostMessage();这样编译没有问题,但是运行到这里会报错。

解决方案 »

  1.   

    我是直接在这里写的代码,也许会打错一些东西,你在编译器里再检查一下。//先定义消息
    #define UM_MYMESSAGE WM_USER+100//定义响应消息的函数,在BEGIN_MESSAGE_MAP后面加入
    ON_MESSAGE(UM_MYMESSAGE,&CDlg::OnMyMessage)//声明函数   .h头文件
    afx_msg LRESULT OnMyMessage(LPARAM , WPARAM);//定义函数   .cpp文件
    LRESULT CDlg::OnMyMessage(LPARAM lParam,WPARAM pParam)
    {
    //加入其它代码
    return ture;
    }//使用
    PostMessage(UM_MYMESSAGE);
      

  2.   

    第一种方法是你要得到这个对话框的指针。
    第二种方法是用FindWindow去得到对话框的窗口HWND,然后用::PostMessage()
      

  3.   

    二楼没明白我的意思。。我的意思是在类外向窗口类发送消息。。也就是postmessage如何调用的问题。。直接postmessage,只能给自身发消息。
      

  4.   


    第一种方法的指针如何获得呢?
    第二种有没有更好的方法获取HWND?
    谢谢
      

  5.   

    我明白你的意思,是你没有看明白我的意思。我上面的说的PostMessage是API,不是CWnd的成员函数
    BOOL PostMessage( HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam
    );
    你先用FindWindow找到你想发给它消息的窗口的句柄,然后用上面::PostMessage发送就行了。
    注意PostMessage前面要加::,表示调用的是API。
      

  6.   

    第一种方法的指针如何获得呢?
    第二种有没有更好的方法获取HWND?
    谢谢
    ===========
    你的程序是基于对话框的,所以你上面用AfxGetMainWnd()是可以获得对话框的指针的。
    获取HWND最方便的方法就是FindWindow(NULL,_T("窗口标题"));
      

  7.   

    没看清楚,是一楼没明白我的意思。。发消息的类和接收消息的窗口类是在同一个程序内,FindWindow感觉一般是找其他进程窗口用的。。
      

  8.   

    MFC重写了类的PostMessage也是封装全局函数::PostMessage的,他把自己的句柄作为第一个参数传给::PostMessage了,所以在mfc类里面调用PostMessage就是发给自己。如果要发给其他窗口就要把第一个参数设置成那个对话框的句柄,可以用全局变量或者参数传递的方法得到句柄
      

  9.   

    消息映射申明是在对话框类的文件里。
    直接PostMessage得有对话框的句柄。
      

  10.   

    我是通过类名获取句柄,FindWindow(_T("CDlg"),NULL);  ::GetLastError()返回2
      

  11.   

    发消息的类和接收消息的窗口类是在同一个程序内,FindWindow感觉一般是找其他进程窗口用的。。
    ========
    FindWindow找的是窗口,它可以用在查找其它进程中,也可以用来找进程自身的窗口。
    其实就你的程序而言,AfxGetMainWnd()是可以获得对话框的指针的。