MFC不使用對話方塊資源模版建立對話方塊

2021-09-06 12:51:04 字數 1715 閱讀 1605

在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 包含標頭檔案...