zoukankan      html  css  js  c++  java
  • MFC子窗体、父窗体

    现在需要将一个窗体放到一个控件中,默认情况下窗体的Style属性为Popup,而在控件的初始化时,代码如下:

    m_dealDlg=shared_ptr<CImageDealDlg>(new CImageDealDlg());
    m_dealDlg->Create(IDD_imageDeal);
    m_dealDlg->SetParent(this);
    m_dealDlg->ShowWindow(SW_SHOW);

    这样做几乎没有问题——只有一个小小的完美之处——一个程序添加这个控件窗口后,如果有其它的非Topmost窗体有部分覆盖主程序,这时用鼠标直接点击子窗体,主程序不会弹到最上层来。用简洁的话说,即虽然用SetParent可以将一个窗体与虽一窗体设置为父子关系,但这时它们只是看起来像而已,即子窗体会跟随移动,可是没有没有消息通信。

    于是想到将Style属性设置为Child,可这时在Release模式下,控件一片空白,在Debug模式下在winocc.cpp的328行ASSERT中断,发现是因为m_hWnd没有值的原因,而m_hWnd一般是在Create时被创建的,这时再研究下Create是否被正确调用,发现其后还可以指定第二个参数CWnd* pParentWnd。于是改成

    m_dealDlg->Create(IDD_imageDeal,this);

    发现程序正常运行,再去掉 m_dealDlg->SetParent(this); 也可正常运行。

    原来如此,Parent得在Create函数中指定。这里再吐槽下,MFC中有三个地方可以设置父窗体——构造函数、Create参数、SetParent。

    在MSDN中搜索Window Styles可以知道各种Style的区别,这里就不做翻译。

  • 相关阅读:
    利用本地浏览器远程服务器上的jupyter notebook
    解决IIS服务器Web访问提示输入密码
    IIS 配置
    override new 关键字的区别
    ASP.NET的网站的设计与优化
    山东人!
    远程连接SQL Server 2000服务器的解决方案
    对软件的新认识
    一个程序员成长的六个阶段
    优秀程序员应当具备的品质
  • 原文地址:https://www.cnblogs.com/xiangism/p/2784687.html
Copyright © 2011-2022 走看看