我建立了一个基于对话框的MFC应用程序,里面有一个主窗口,在主窗口中的一个按钮点击事件里创建了另一个窗口(Dlg2),并将Dlg2显示出来(这时Dlg2是在主窗口的前端的,即覆盖了主窗口)。我想在Dlg2中的一个按钮的点击事件里实现让主窗口显示在子窗口的前端,但一直实现不了,希望高手解答!主窗口中创建Dlg2的方法如下:void CD2Dlg::OnButton1()
{
if(m_pDlg2 == NULL)
{
m_pDlg2 = new CDialog2;
m_pDlg2->Create(IDD_DIALOG1);
m_pDlg2->SetParent(this);
m_pDlg2->ShowWindow(SW_SHOW);
}
m_pDlg2->SetActiveWindow();
}
在Dlg2的按钮点击事件里是这样写的:void CDialog2::OnButton1()
{
CWnd *pParentWnd = this->GetParent();
pParentWnd->SetActiveWindow();
//pParentWnd->SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}被注释掉的SetWindowPos也用过,没有效果。还有用过SetForegroundWindow(),但同样没有。我还看到一位高手在别人的回帖中说了:存在父子关系的窗口中,上面用的那些方法是无效的(如SetWindowPos,SetForegroundWindow)。那么我想问下,怎样才能去掉窗口之间的这种父子关系呢?
{
if(m_pDlg2 == NULL)
{
m_pDlg2 = new CDialog2;
m_pDlg2->Create(IDD_DIALOG1);
m_pDlg2->SetParent(this);
m_pDlg2->ShowWindow(SW_SHOW);
}
m_pDlg2->SetActiveWindow();
}
在Dlg2的按钮点击事件里是这样写的:void CDialog2::OnButton1()
{
CWnd *pParentWnd = this->GetParent();
pParentWnd->SetActiveWindow();
//pParentWnd->SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}被注释掉的SetWindowPos也用过,没有效果。还有用过SetForegroundWindow(),但同样没有。我还看到一位高手在别人的回帖中说了:存在父子关系的窗口中,上面用的那些方法是无效的(如SetWindowPos,SetForegroundWindow)。那么我想问下,怎样才能去掉窗口之间的这种父子关系呢?
解决方案 »
- 用CAsyncSocket写服务端的问题(可接受多个客户端连接)
- h.264 视频解码后如何显示到指定的对话框控件上
- 随机数问题,求助
- sndPlaySound没有放出声音
- 下载文件遇到Content-Encoding:deflate!怎么解压缩啊?
- 有2个地方置顶链接【无效】.
- user-interface thread 用中文怎么说?
- 各位大哥请帮个忙!!!!!!!!!!!!!11.00结贴
- 求把win32的DLL工程改为EXE工程
- 关于注册表操作
- 关于DIRECTSHOW类的问题,链接错误,求救
- opencv2.3.2使用_cvUpdateMotionHistory函数//不知道是在那个lib与头文件呢???
-------------------------------------------
SetParent(NULL)你也可以在CDialog2::OnButton1()里面隐藏子窗口,需要的时候再显示,看起来就像是子窗口到后面了。
-->
m_pDlg2->Create(IDD_DIALOG1, GetDesktopWindow());
SetParent(CDialog2, NULL)
注意查MSDN,参数要正确,不要照搬
去掉不就可以了!
{
// TODO: Add extra validation here
CNewDlg* pDlg = new CNewDlg;
pDlg->Create(IDD_DIALOG1, GetDesktopWindow());
pDlg->ShowWindow(SW_SHOW);
SetForegroundWindow();
}
用了你的方法还是不行,当我点击Dlg2中的按钮时,程序遇到错误挂掉了!
Dlg2中的按钮事件:void CDialog2::OnButton1()
{
CWnd *pParentWnd = this->GetParent();
if(pParentWnd == GetDesktopWindow())
MessageBox("YES");
else
MessageBox("no"); // 这里被执行到了
pParentWnd->SetActiveWindow();
//pParentWnd->SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
LZ,这里大家是帮忙找出问题的原因或者解决方案,不是包办问题。
LZ最终还是应该自己去解决。
人,总是要靠自己的
CRect winrect;
GetWindowRect(&winrect);
SetWindowPos(&this->wndNoTopMost, winrect.left, winrect.top, winrect.Width(), winrect.Height(), SWP_NOSIZE);