嵌入到主对话框的CPropertySheet创建之后发生奇怪的问题!请指教

ATField 2004-07-13 10:10:55
我在主对话框的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)那么就没有上述问题

请问这是为什么?
...全文
212 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyelf 2004-07-13
  • 打赏
  • 举报
回复
// Fix for: "Child CPropertySheet Hangs If Focus Is Switched" (Q149501)
m_sheet.ModifyStyleEx(0, WS_EX_CONTROLPARENT);
ATField 2004-07-13
  • 打赏
  • 举报
回复
请详细说明一下好吗?为什么在做嵌入的CPropertySheet的时候会发生这个问题呢?
lixiaosan 2004-07-13
  • 打赏
  • 举报
回复
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);
}

ATField 2004-07-13
  • 打赏
  • 举报
回复
不是的。你有兴趣的话可以试一下创建一个嵌入到主对话框中的CPropertySheet,会发生很奇怪的现象。
pmwin 2004-07-13
  • 打赏
  • 举报
回复
不太明白什么意思,用AfxMessageBox试试
ATField 2004-07-13
  • 打赏
  • 举报
回复
问题解决,多谢各位。
尤其感谢flyelf给出解决方案。
我发现以后找问题还是要到网上的MSDN去找阿

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧