mfc 设置子窗口只打开一遍_MFC 判断子窗体是不是已经打开,避免重复创建
MFC 判斷子窗體是否已經(jīng)打開,避免重復(fù)創(chuàng)建
在主窗體中,嵌入一個(gè)很多個(gè)子窗體,但是,每次只顯示一個(gè)。
我的做法是,首先在主窗體頭文件中定義子窗體對(duì)象,然后在單擊顯示按鈕的時(shí)候,先判斷子窗體是否已經(jīng)被創(chuàng)建,如果創(chuàng)建了,則ShowWindow(SW_SHOW);將其他已經(jīng)創(chuàng)建的窗體ShowWindow(SW_HIDE);如果沒有創(chuàng)建,則先Create窗體并顯示。
在MainDlg.h里面定義:
DeviceParam deviceParam;//設(shè)備信息窗體
Version ver;//版本信息窗體
按下按鈕判斷是否已經(jīng)存在:
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;//設(shè)備信息窗體
Version ver;//版本信息窗體
CWnd* pChild;
MainDlg的構(gòu)造函數(shù)里面
pChild=NULL;
在關(guān)閉pChild的時(shí)候要發(fā)送消息給MainDlg窗口把pChild=NULL;
按下按鈕判斷是否已經(jīng)存在:
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);
}
差不多就這樣了
------解決方案--------------------
在關(guān)閉pChild的時(shí)候要發(fā)送消息給MainDlg窗口把delete pChild;pChild=NULL;
------解決方案--------------------
成員變量:
CDialog* p[10];
構(gòu)造函數(shù):
for(int i=0; i<10; i++) p[i] = NULL;
假設(shè)有6個(gè)選項(xiàng),每個(gè)選項(xiàng)對(duì)應(yīng)一個(gè)對(duì)話框
switch(k)
{
if(p[k] == NULL){ p[k] = new CDialog(); p[k]->Create(); }
}
Show(k);
單獨(dú)寫Show函數(shù)
for(int i=0; i<10; i++)
{
if(p[i] != NULL) p[i]->ShowWindow(SW_HIDE);
}
p[k]->ShowWindow(SW_SHOW);
------解決方案--------------------
引用:
成員變量:
CDialog* p[10];
構(gòu)造函數(shù):
for(int i=0; i<10; i++) p[i] = NULL;
假設(shè)有6個(gè)選項(xiàng),每個(gè)選項(xiàng)對(duì)應(yīng)一個(gè)對(duì)話框
switch(k)
{
if(p[k] == NULL){ p[k] = new CDialog(); p[k]->Create(); }
}
Show(k);
單獨(dú)寫Show函數(shù)
********************************************************
******************自己測(cè)試通過解決方案*********************
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
總結(jié)
以上是生活随笔為你收集整理的mfc 设置子窗口只打开一遍_MFC 判断子窗体是不是已经打开,避免重复创建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这种米粉慎吃 严重或可致死!
- 下一篇: 智能客户端ios_为什么现在的客户端开发