MFC主窗口MainFrm要向另一对话框类CMProperty发送消息。
最开始呢,我用hWnd=mpro.m_hWnd(mpro是对话框类的对象),得到的句柄为0,问了半天,说要先创建,那我就先创建好了。
于是呢, mpro.Create(IDD_MODUALPROPERTY,this);
         hWnd=mpro.m_hWnd;
         ::PostMessage(hWnd,WM_SEND,0,(LPARAM)stradd);
可是这样呢,问题又来了,对话框OnRecv(WPARAM wParam,LPARAM lParam)函数中无法识别控件变量了。上网查了半天,说是新建了个实例,要先SHOW。那我就 :
         mpro.Create(IDD_MODUALPROPERTY,this);
         mpro.ShowWindow(true);
         hWnd=mpro.m_hWnd;
         ::PostMessage(hWnd,WM_SEND,0,(LPARAM)stradd);
这下控件有反应了,数据可以填充上去了,却填充在一个新的跟原来对话框一模一样的对话框里。就是说这里开始有两个对话框了,查询得到的消息显示在第二个对话框,好崩溃啊。
难道得到对话框句柄一定要CREAT吗?还有就是对话框类里初始化的全局变量在RECV函数里无法识别,难道说它是一个新的线程吗?
怎么办啊,怎么解决呢?

解决方案 »

  1.   

    补充一下,是对话框设置好查询条件,然后向串口发命令,下位机接受的消息全部由主窗口接收再分发给不同对话框,所以说在某一对话框接受消息时,这个对话框是已经存在了的,而CREAT、SHOW之后就会增加一个一模一样的对话框,返回消息显示在该对话框。
      

  2.   

    囧 hWnd=mpro.m_hWnd是在哪里调用的?? 
      

  3.   

    CMProperty第一次创建时肯定有句柄了,所以下次发送时直接向这个句柄发就行。
      

  4.   

    没有看明白,不过domadol之后就算窗口句柄存在了,之前是不存在的,所以你要在确保窗口存在的情况下发送消息了。