模态对话框/非模态对话框/系统对话框CColorDialog 置顶问题/显示最前面/TopMost

时间:2022-06-04 17:37:32

问题.  当主对话框A是非模态对话框时,对话框B等以模态对话框弹出时, 如CColorDialog dlg; dlg.DoModal(); 时无法位于最前面,怎么办?

解决方法:( 我们分3种情况考虑)

1. 将主对话框A也设置为模态对话框。后来弹出的模态对话框自然在最前面;

2. 若副对话框B不是等系统对话框(如CColorDialog),而是自定义对话框,则 在系统消息OnInitDialog() 中设置

 SetWindowPos(&CWnd::wndTopMost,0,0,0,0, SWP_NOMOVE|SWP_NOSIZE);  //置顶

3. 若副对话框是系统对话框,如CColorDialog,则重写OnInitDialog(), 代码如下:

//   说明:置顶颜色对话框 [9/21/2016 ZOSH];
class CMyTopColorDialog : public CColorDialog
{
public:

BOOL OnInitDialog()
{
SetWindowPos(&CWnd::wndTopMost,0,0,0,0, SWP_NOMOVE|SWP_NOSIZE);//置顶

return CColorDialog::OnInitDialog();
}

CMyTopColorDialog()
{

}

~CMyTopColorDialog()
{

}
};

因此,将CColorDialog dlg; dlg.DoModal(); 替换为CMyTopColorDialog dlg; dlg.DoModal(); 即可!

2016年9月记 - ZOSH!