MFC切换窗口,如何将子窗口放在主窗口外
时间: 2023-07-19 08:04:45 浏览: 77
在MFC中,可以通过以下步骤将子窗口放在主窗口外:
1.在子窗口的类视图中添加以下代码:
```c++
BOOL CMyChildWnd::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE;
// 设置子窗口风格
cs.style &= ~WS_CHILD;
cs.style |= WS_POPUP | WS_THICKFRAME;
// 设置子窗口大小和位置
cs.x = 0;
cs.y = 0;
cs.cx = 400;
cs.cy = 300;
return TRUE;
}
```
这里将子窗口的风格设置为`WS_POPUP`和`WS_THICKFRAME`,以便使其成为一个独立的窗口,并且可以调整大小。同时,还可以通过设置`x`、`y`、`cx`和`cy`来控制子窗口的位置和大小。
2.在主窗口中添加以下代码:
```c++
void CMainFrame::OnCreate(LPCTSTR lpstrClassName, int nWidth, int nHeight)
{
// 创建子窗口
CMyChildWnd* pChildWnd = new CMyChildWnd();
pChildWnd->Create(NULL, _T("My Child Window"), WS_VISIBLE | WS_BORDER, CRect(0, 0, 400, 300), this, NULL);
// 将子窗口移动到主窗口外
CRect rect;
pChildWnd->GetWindowRect(&rect);
SetWindowPos(&wndTopMost, rect.left - nWidth, rect.top - nHeight, rect.Width(), rect.Height(), SWP_SHOWWINDOW);
}
```
这里创建一个子窗口,并将其显示出来。然后通过`GetWindowRect`获取子窗口的位置和大小,再通过`SetWindowPos`将子窗口移动到主窗口的外面。
其中,`nWidth`和`nHeight`是用来控制子窗口距离主窗口的距离的参数,根据实际情况设置即可。