在mfc程式中使用對話方塊時首先在資源模版裡建立對話方塊資源,然後domodal()或者create顯示出模式對話方塊或者非模式對話方塊,這樣建立出的對話方塊移植性差,從乙個工程移動到另乙個工程比較麻煩。
**如下:
// 建立記憶體對話方塊資源模版類,h檔案
#pragma once
#define dlg_template_buffer_max_lengt 1024
class cdlgtemplate
;// cpp檔案
cdlgtemplate::cdlgtemplate(int nbufferlength)
}cdlgtemplate::~cdlgtemplate()
}// 對話方塊模版
pdlgtemp->style = dwstyle;
pdlgtemp->dwextendedstyle = dwstyleex;
pdlgtemp->cdit = 0;
pdlgtemp->cx=rect.width();
pdlgtemp->cy=rect.height();
pdlgtemp->x=(short)rect.left;
pdlgtemp->y=(short)rect.top;
ptemp=(word*)(pdlgtemp+1);
// 選單
*ptemp++=0;
// class
*ptemp++=0;
// caption
wcscpy((wchar*)ptemp,strcaption);
ptemp += strcaption.getlength()+1;
// font
return pdlgtemp;
}// 例子
class cmydlg: public cdialog
;
virtual bool oninitdialog();
virtual void onok();
virtual void dodataexchange(cdataexchange* pdx);
};cmydlg::~cmydlg()
void cmydlg::dodataexchange(cdataexchange* pdx)
bool cmydlg::createmodedlg(cstring strcaption,crect rect,bool bmode,cwnd* pparent)
else
return bresult;
}bool cmydlg::oninitdialog()
// 建立編輯框
crect rect(0,0,50,20);
if (!m_ctrledit.create(ws_child|ws_visible|ws_border,rect,this,2))
return true;
}void cmydlg::onok()
useage
模式cmydlg dlg;
cstring result;
dlg.createmodedlg(_t("123"),crect(0,0,100,100),this);
if (idok==dlg.domodal())
非模式cmydlg dlg;
cstring result;
if(dlg.createmodedlg(_t("123"),crect(0,0,100,100),false,this))
不使用資源檔案動態建立對話方塊的做法
一般而言,在 windows程式設計中建立對話方塊需要先定義乙個對話方塊資源。我想能不能不用資源檔案單純通過 建立對話方塊呢?晚上搜尋了一些資料,研究了一下,基本實現了。我寫了乙個kdialog,如下 中有一些注釋,相信大家能基本看懂 標頭檔案的 cpp view plain copy font s...
mfc建立隱藏對話方塊
通常有需求mfc主對話方塊建立乙個子對話方塊 彈出式的對話方塊 但是彈出對話方塊必須要隱藏起來,等需要顯示的時候才顯示。嘗試過在建立彈出對話方塊後呼叫showwindow sw hide 函式實現,但是介面始終會閃爍一下。網上找到的許多資料都說在子對話方塊的oninitdialog 函式中新增sho...
mfc 子對話方塊控制父對話方塊 MFC對話方塊構架程式
遺憾的是 從來沒有被堅定選擇過,就像是,他只是剛好需要,你只是剛好在。網易雲熱評 一 對話方塊架構分類 1 模式對話方塊,彈出來不能進行其他操作 2 無模式對話方塊,彈出來後可以進行其他操作 二 新建win32應用程式 模式對話方塊 1 建立 2 修改屬性 3 新增dialog資源 4 包含標頭檔案...