MFC 判断子窗体是否已经打开,避免重复创建

在主窗体中,嵌入一个很多个子窗体,但是,每次只显示一个。

我的做法是,首先在主窗体头文件中定义子窗体对象,然后在单击显示按钮的时候,先判断子窗体是否已经被创建,如果创建了,则ShowWindow(SW_SHOW);将其他已经创建的窗体ShowWindow(SW_HIDE);如果没有创建,则先Create窗体并显示。

在MainDlg.h里面定义:

DeviceParam deviceParam;//设备信息窗体

Version ver;//版本信息窗体

按下按钮判断是否已经存在:

CWnd* pChild;

pChild = deviceParam.GetActiveWindow();

if(NULL != pChild)

{

deviceParam.ShowWindow(SW_SHOW);

}

else

{

deviceParam.Create(DeviceParam::IDD,this);

deviceParam.SetParent(this);

deviceParam.ShowWindow(SW_SHOW);

deviceParam.SetWindowPos(NULL,x,y,deviceParam.Width,deviceParam.Height,0);

}

------解决方案--------------------

在MainDlg.h里面定义:

DeviceParam deviceParam;//设备信息窗体

Version ver;//版本信息窗体

CWnd* pChild;

MainDlg的构造函数里面

pChild=NULL;

在关闭pChild的时候要发送消息给MainDlg窗口把pChild=NULL;

按下按钮判断是否已经存在:

pChild = deviceParam.GetActiveWindow();

if(NULL != pChild)

{

deviceParam.ShowWindow(SW_SHOW);

}

else

{

deviceParam.Create(DeviceParam::IDD,this);

deviceParam.SetParent(this);

deviceParam.ShowWindow(SW_SHOW);

deviceParam.SetWindowPos(NULL,x,y,deviceParam.Width,deviceParam.Height,0);

}

差不多就这样了

------解决方案--------------------

在关闭pChild的时候要发送消息给MainDlg窗口把delete pChild;pChild=NULL;

------解决方案--------------------

成员变量:

CDialog* p[10];

构造函数:

for(int i=0; i<10; i++) p[i] = NULL;

假设有6个选项,每个选项对应一个对话框

switch(k)

{

if(p[k] == NULL){ p[k] = new CDialog(); p[k]->Create(); }

}

Show(k);

单独写Show函数

for(int i=0; i<10; i++)

{

if(p[i] != NULL) p[i]->ShowWindow(SW_HIDE);

}

p[k]->ShowWindow(SW_SHOW);

------解决方案--------------------

引用:

成员变量:

CDialog* p[10];

构造函数:

for(int i=0; i<10; i++) p[i] = NULL;

假设有6个选项,每个选项对应一个对话框

switch(k)

{

if(p[k] == NULL){ p[k] = new CDialog(); p[k]->Create(); }

}

Show(k);

单独写Show函数

********************************************************

******************自己测试通过解决方案*********************

static CDlgResetAlarmInfo *p_DlgResetAlarmInfo = new CDlgResetAlarmInfo;

HWND hWnd = p_DlgResetAlarmInfo->GetSafeHwnd();

if(IsWindow(hWnd))

{

p_DlgResetAlarmInfo->ShowWindow(SW_SHOW);

}

else

{

p_DlgResetAlarmInfo->Create(CDlgResetAlarmInfo::IDD,CWnd::FromHandle(a_pTrend->GetSafeHwnd()));

p_DlgResetAlarmInfo->ShowWindow(SW_SHOW);

}**********************没有问题***************************

原文:http://blog.csdn.net/ghevinn/article/details/29560425

mfc 设置子窗口只打开一遍_MFC 判断子窗体是不是已经打开,避免重复创建相关推荐

  1. html 判断当前窗口是否是子窗口,C#的MDI窗体判断子窗体是否已经打开

    Mdi窗体的设置: IsMdiContainer 设置为true: 子窗体设置: /// /// 显示子窗体 /// /// private void ShowForm(BaseForm _bt) { ...

  2. Qt中正确设置子窗口关闭方式

    在做Qt界面设计时,通过一个按钮打开子窗口,即以new方式创建子窗口,再点击按钮后,调用close关闭子窗口,但子窗口程序还在运行,说明子窗口资源未能得到及时释放.解决的办法是: CDA_Plot = ...

  3. QT:设置子窗口显示在父窗口的位置(绝对坐标)

    QT:设置子窗口显示在父窗口的位置(绝对坐标) 故事背景:最近需要在父窗体修改按钮上弹出二次确认框,之前要么使用 QDesktopWidget,要么使用QCursor,来设置弹窗位置,但是这两种方式不 ...

  4. Qt关于设置子窗口样式表不生效问题

    父窗口A中创建了一个子窗口B,B = new WidgetB(this),this是父窗口A,最后运行程序时出现子窗口B继承了父窗口A的样式,于是在子窗口类中的构造函数里调用 setAutoFillB ...

  5. mfc 制作不同的文档模板mdi不同的子窗体_对IT项目售前解决方案制作的一些思考...

    作者:人月神话,新浪博客同名 简介:多年SOA规划建设,私有云PaaS平台架构设计经验,长期从事一线项目实践 今天准备对于IT项目售前解决方案的制作,对于一个软件企业来说,往往会针对自己的产品线和产品 ...

  6. mfc 制作不同的文档模板mdi不同的子窗体_制作ACK集群自定义节点镜像的正确姿势...

    随着云原生时代的到来,用户应用.业务上云的需求也越来越多,不同的业务场景对容器平台的需求也不尽相同,其中一个非常重要的需求就是使用自定义镜像创建ACK集群. ACK支持用户使用自定义镜像创建Kuber ...

  7. mfc 制作不同的文档模板mdi不同的子窗体_鹤岗水利渡槽钢模板设计-哈尔滨同顺钢模板...

    我们知道圆柱木模板的作用就是通过将木板定型,制作成圆柱形的模具,用来打造混凝土圆柱子,还可以将木板成其他形状制作成异形板.5.做清水混凝土:浇筑物件表面光滑美观,减少墙壁二次抹灰,可直接贴面装饰,减缩 ...

  8. C#MDI窗体避免重复打开子窗体的问题

    在做winform程序的时候,需要用到MDI窗体,在网上看了一些避免子窗体重复打开的问题. 现在我有一个MDI窗体formfather以及两个子窗体form1和form2. 在父窗体上弄两个按钮,点击 ...

  9. c# winform 防止窗体多次打开

    在使用MDI子窗体时,如果仅仅是使用 from.show() 代码,那么我们单击几次菜单,就会打开几个同样的子窗体.可以用这段代码防止这种情况. 首先添加一个函数,这个函数用于检测指定的子窗体是否已经 ...

最新文章

  1. 选择一个稳定、快速的服务器四大注意事项
  2. Oracle 11g Release 1 (11.1) PL/SQL_多维 Collection 类型和其异常
  3. Win32编程day04 学习笔记
  4. Tmux的安装、使用与配置
  5. mysql 堆叠查询_SQL 注入方法 - 盲注、报错注入、UNION查询注入与堆叠注入
  6. python2clock_控制fps的时钟Clock类源码
  7. 频数直方图的步骤_如何运用QC七大手法和九大步骤分析问题?
  8. Crnn中文end-to-end识别
  9. 2018年中国财富管理才真正迎来发展元年
  10. 远程文件传输工具Filezilla
  11. 谷歌中国算法比赛解题报告 APAC2017C
  12. 数值计算(四)——插值法(3)Hermite插值法
  13. mysql获取某天的开始时间和结束时间
  14. 关于营销自动化,30个惊人的事实
  15. 企业文档管理难题,云盒子来解决!
  16. 给深度学习新手做项目的10个建议
  17. [数据结构]基于二叉树的家谱系统
  18. 对你影响最深的计算机书籍是哪一本?
  19. 华为内部存储转sd卡_华为手机内部存储软件怎么转到sd卡?
  20. rsa public key not find

热门文章

  1. 网页Request Headers请求头和Response Headers响应头
  2. android Calendar使用 年月日时分秒
  3. 前端项目 开发者环境 和 正式环境 区别
  4. win7 64 安装sp1补丁提示“客户端没有所需的特权”
  5. C语言给出任意4个数算24点,讨论24点算法。
  6. windows彻底删除php,windows如何删除php
  7. lm358在哪个库里_库里8和aj35哪个好 库里8是安德玛的吗
  8. beetl 取list下标的问题
  9. 七、基于比较的排序算法总结
  10. linux查用户的家目录,详解Linux误删用户家目录的恢复方法