mfc 设置子窗口只打开一遍_MFC 判断子窗体是不是已经打开,避免重复创建
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 判断子窗体是不是已经打开,避免重复创建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这种米粉慎吃 严重或可致死!
- 下一篇: 智能客户端ios_为什么现在的客户端开发