关于MFC将一个窗体嵌入另一个窗体的方法

VC 专栏收录该内容
203 篇文章 0 订阅

将一个窗体(子窗体)嵌入另一个窗体(父窗体),也就是相当于把一个窗体当成控件,放入另一个窗体中

现在用的比较多的方法是将子窗体的窗体属性中的border设为none,Style设为Child,在父窗体类中实现就行

[cpp]  view plain  copy
  1. CPage *m_page = new CPage();  
  2.     m_page->Create(m_page::IDD,this);  
  3.     CRect re;  
  4.     GetDlgItem(IDC_PICTURE).GetWindowRect(&re);//IDC_PICTURE是在父窗体中放置的PictureCtrl控件,确定子窗体位置用的  
  5.     ScreenToClient(re);  
  6.     m_page->MoveWindow(re);  
  7.     m_page->ShowWindow(SW_SHOW);  

这是比较普遍,而且简单的方法,但是有时候子窗体可能在别的地方还需要单独调用,而且是带边框的形式,这种就很头疼,总不能说建两个窗体吧。网上相关问题的帖子也挺多,但是都没有具体可靠的方法,最近解决了相关的问题,废话不多说

[cpp]  view plain  copy
  1. CPage *m_page = new CPage();  
  2.     m_page->Create(m_page::IDD,this);  
  3.   
  4.     m_page->SetParent(this);//这句必须加,要不然子窗体就不在父窗体内  
  5.     DWORD dw = ::GetWindowLong(m_page->m_hWnd,GWL_STYLE);  
  6.     dw = dw&~WS_POPUP;//取消弹出式窗体属性  
  7.     dw = dw&~WS_CAPTION;//取消标题栏  
  8.     dw = dw&~WS_THICKFRAME;//取消拖动改变大小  
  9.     dw = dw|WS_CHILD;//属性必须设为WS_CHILD  
  10.     ::SetWindowLong(m_page->m_hWnd,GWL_STYLE,dw);  
  11.     dw = ::GetWindowLong(m_page->m_hWnd,GWL_EXSTYLE);  
  12.     dw = dw&~WS_EX_DLGMODALFRAME;//去掉双边框的扩展属性  
  13.     ::SetWindowLong(m_page->m_hWnd,GWL_EXSTYLE,dw);  
  14.     CRect re;  
  15.     this->GetWindowRect(re);  
  16.     ScreenToClient(re);  
  17.     //m_page->SetWindowPos(&CWnd::wndTopMost,0,0,re.Width()-20,re.Height()-40,SWP_NOMOVE);  
  18.     m_page->MoveWindow(0,0,re.Width()-20,re.Height()-40);//用movewindow和setwindowpos都可以  
  19.     m_page->ShowWindow(SW_SHOW);  

好了,就这么多,方法挺简单的,只不过没有系统的介绍

  • 1
    点赞
  • 0
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值