我在主对话框的OnInitDialog中加入了CPropertySheet的创建代码,如下
m_propertySheet.AddPage(...)
m_propertySheet.Create( this, WS_CHILD | WS_VISIBLE );
来创建一个嵌入到主窗口的PropertySheet子窗口
但是在这之后如果调用MessageBox则主窗口和MessageBox都无法看见,只听到一声MessageBox创建的声音
我和别人讨论了一下发现只要加上SetFocus就可以了
之后发现在每个CPropertyPage(在m_propertySheet中的Page)的消息处理函数中也必须加上SetFocus,不然在切换窗口的时候也会发生类似的问题
如果不把Property Sheet作为子窗口(WS_CHILD)那么就没有上述问题请问这是为什么?

解决方案 »

  1.   

    不太明白什么意思,用AfxMessageBox试试
      

  2.   

    不是的。你有兴趣的话可以试一下创建一个嵌入到主对话框中的CPropertySheet,会发生很奇怪的现象。
      

  3.   

    messagebox需要在父对话框中处理WM_ACTIVATE消息afx_msg LRESULT CTest6Dlg::OnActive(WPARAM wParam, LPARAM lParam) 

         if (wParam == WA_INACTIVE && NULL != HWND(lParam)) 
         { 
            return ::DefWindowProc(m_hWnd,WM_ACTIVATE,wParam,lParam); 
          } 
          return CDialog::DefWindowProc(WM_ACTIVATE,wParam,lParam); 
    }
     
      

  4.   

    请详细说明一下好吗?为什么在做嵌入的CPropertySheet的时候会发生这个问题呢?
      

  5.   

    // Fix for: "Child CPropertySheet Hangs If Focus Is Switched" (Q149501)
    m_sheet.ModifyStyleEx(0, WS_EX_CONTROLPARENT);
      

  6.   

    问题解决,多谢各位。
    尤其感谢flyelf给出解决方案。
    我发现以后找问题还是要到网上的MSDN去找阿