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的区别,这里就不做翻译。

  • 相关阅读:
    AudioToolbox学习(转)
    ios5键盘问题
    何时使用self.
    ios判断邮箱,手机号码,车牌号是否合法(正则表达)
    将图片重新绘制
    在UITableViewCell中获取所在的行数以及去除选中状态
    根据UIView获取其UIViewController
    在iOS中将string转成UTF8编码
    SQL提高性能
    oracle创建口令文件
  • 原文地址:https://www.cnblogs.com/xiangism/p/2784687.html
Copyright © 2011-2022 走看看