none
自定义消息中弹出CFileDialog对话框,消息无法再次响应 RRS feed

  • 问题

  • 我的程序需要响应串口的消息,在响应串口的消息函数中,根据消息的内容分为三个调用函数,其中一个是需要有打开文件的功能,另一个是模拟鼠标的操作,主要的代码如下:

    afx_msg LRESULT MainDlg::OnCommunication(WPARAM wParam,LPARAM lParam)

    {

    if(...)

    MenuFileOpen();

    else if(...)

    MouseAction();

    else

    ...

    }

    MenuFileOpen()

    {

    CFileDialog OpenFile(TRUE,NULL,NULL,0,_T("采集卡数据(*.traw)|*.traw||"));
    OpenFile.m_ofn.lpstrInitialDir=_T("D:\\TSDATA");
    if (OpenFile.DoModal()==IDOK)

    {

    //...

    }

    }

    当我第一次收到该自定义消息时,执行的是打开文件操作,但弹出对话框后无法响应模拟鼠标的操作。

    实际的鼠标仍可以对窗口上的鼠标进行操作。

    程序界面上有个button,点击后调用的函数也是MenuFileOpen(),但是通过模拟鼠标的操作函数点击该button后弹出对话框,却依然可以响应模拟鼠标的操作。这和上面的方式有什么区别?

    void MainDlg::OnBnClickedBtnmenuFile()

    {

    MenuFileOpen();

    }

    我想问问大家,这是什么原因,我可以用什么方法解决串口发送的消息打开文件后,依然可以响应模拟鼠标的操作。

    个人感觉是对话框DoModal的问题,但是点击button和在自定义消息响应函数中调用有什么区别?

    2012年7月25日 3:00

答案

  • SendMessage发给的是WindProc, PostMessage发到主窗口的消息队列, 要不要替换成PostMessage试一下吖
    • 已标记为答案 minizon 2012年7月31日 4:28
    2012年7月30日 14:37

全部回复

  • 什么时候发送的消息?我觉得是消息循环的问题。


    麻烦把正确答案设为解答。

    2012年7月26日 2:34
    版主
  • 消息是串口对象的线程中发送的,用的是SendMessage。当串口接收到数据时,SendMessage发送给窗体,响应函数是OnCommunication
    2012年7月27日 15:28
  • SendMessage发给的是WindProc, PostMessage发到主窗口的消息队列, 要不要替换成PostMessage试一下吖
    • 已标记为答案 minizon 2012年7月31日 4:28
    2012年7月30日 14:37
  • 串口我还是用SendMessage的方式,不过在OnCommunication中我用PostMessage发送了一个打开文件对话框的消息。
    2012年7月31日 4:30