本帖最后由 VisualEleven 于 2012-09-11 10:48:54 编辑

解决方案 »

  1.   

    可不可以用消息映射来传到其它对话框可以啊,我一般是自己SendMessage再发一条消息过去。你自己再写个消息循环有何意义??
      

  2.   

    你可以将所有需要接收消息的窗口句柄保存起来,可以保存在App类的成员变量中,作为一个类似全局变量的序列(CArray类可以满足,或者使用CMap用来保存对话框名称与窗口句柄的映射关系,方便查找)。每次需要向一个窗口发送消息时,就从保存好的句柄序列中取得一个HWND,然后使用::SendMessage向这个窗口发送消息。对应的窗口类中需要定义这个消息的响应函数,可以用ON_MESSAGE(MY_MESSAGE, MyFunction)宏来定义。
    像LZ这样自己写一个消息循环,是很费劲的,即使上面的错误不发生,程序也会卡死在那个button的消息循环中。
      

  3.   

    利用其它窗口的HWND句柄,SendMessage/PostMesasge()不就可以吗?
      

  4.   

    问题是不知道SendMessage/PostMesasge(),能不能详细写一下,大神,我在好多帖子里都看到你了我是初学MFC的。。谢了
      

  5.   

    afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
    afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);
    ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
    ON_WM_RBUTTONDOWN()
    LRESULT  CTestView::OnMyMessage(WPARAM wParam,LPARAM lParam)
    {
    MessageBox("这是响应自定义消息","信息提示",MB_OK);
    return 1;
    }void CTestView::OnRButtonDown(UINT nFlags, CPoint point)
    {
    char buf[15] = {"信息提示测试1"};
    char buf2[15] = {"dsfdsfsdf"};
    //char ch[3] = {0};
    //strcpy_s_s(ch,buf);
    //strcpy_s(ch,buf2);
    ::SendMessage(AfxGetMainWnd()->m_hWnd,WM_MYMESSAGE,35,(LPARAM)buf);
    }
      

  6.   

    可以在每个对话框在进行操作的时候,向其他对话框发送消息
    #defile MSG_MESSAGE WM_USER+101
    ON_MESSAGE( MSG_MESSAGE, FUNCTION1)
    ::SendMessage(AfxGetMainWnd()->m_hWnd,MSG_MESSAGE,35,(LPARAM)buf);
      

  7.   

    请问下10楼
    ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
    ON_WM_RBUTTONDOWN()
    这两个 应该放在什么地方,我放的时候老提示有错误,谢谢
      

  8.   

    1.WM_MYMESSAGE是自定义的一个宏,其声明放在“Resource.h”文件中,例如:#define WM_MYMESSAGE WM_USER+1000
    2.afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam)是自定义的一个消息响应函数,在每个类的头文件中声明之,在类的.CPP文件中实现之
    3.ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)的作用是自定义了消息映射的关系,他要放在“.CPP文件”的下列位置:
    BEGIN_MESSAGE_MAP(类名, 父类)
    // 标准打印命令
    ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
    END_MESSAGE_MAP()
    4.ON_WM_RBUTTONDOWN()的位置与.ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)相同。
    写了半天了,给分吧
      

  9.   

    电影院点座系统(模拟多终端)的方案:
    1.多台计算机网络连接(实际,网络通信)
    2.一台计算机多个程序模拟(进程间通信)
    3.一台计算机一个程序多个界面模拟(消息通信 或是 全局变量<或是 多界面类的静态局部变量> 通信)看楼主的代码, 好像是3了。
    具体解决方案是:
    1.  在CDialog44类中,定义所用的CDialog1、CDialog2的指针 成员变量、 座位信息
    2.  在CDialog44::OnInit...(初始化消息响应函数)中new 并create 
        注意:Create(IDD_DIALOG1,NULL)时,将第二个参数改成 this
    3.  在CDialog44::OnButton1()中 ShowWindow 
    4.  在CDialog44类中添加一个成员函数,用各界面指针调用UpdateWindow(),更新显示
    5.  某界面座位信息 发生改变时, 更改parent的座位信息,调用parent中的更新显示函数。