不使用資源檔案動態建立對話方塊的做法

2021-09-06 12:46:55 字數 1875 閱讀 2976

一般而言,在 windows程式設計中建立對話方塊需要先定義乙個對話方塊資源。我想能不能不用資源檔案單純通過**建立對話方塊呢?晚上搜尋了一些資料,研究了一下,基本實現了。

我寫了乙個kdialog,**如下(**中有一些注釋,相信大家能基本看懂):

標頭檔案的**:

[cpp]view plain

copy

"font-size:16px;"

>

// kdialog.h

#ifndef kdialog_h_included

#define kdialog_h_included

#define id_help   150

#define id_edit   180

#define id_text   200

class

kdialog  

;  #endif // kdialog_h_included

cpp檔案的**:

[cpp]view plain

copy

"font-size:16px;"

>#include 

"kdialog.h"

#include "resource.h"

bool

callback dialogproc (

hwnd

, uint

, wparam

, lparam

) ;  

lpword

lpwalign ( 

lpword

lpin)  

kdialog::kdialog(hinstance

hinst, 

hwnd

hwndowner)  

kdialog::~kdialog()  

char

nedittwo[128]= 

"從這兒輸入字串."

;  bool

callback kdialog::dialogproc(

hwnd

hdlg,  

uint

umsg, 

wparam

wparam, 

lparam

lparam)  

break

;  case

wm_close:  

enddialog (hdlg, 0) ;  

return

true ;  

default

:  break

;  }  

return

false ;  

}  int_ptr

kdialog::domodal()    

外部呼叫的方法也很簡單(把應用程式控制代碼和對話方塊的所有者視窗控制代碼傳進來即可):

[cpp]view plain

copy

"font-size:16px;"

>             kdialog dlg(m_hinst,m_hwnd);  

dlg.domodal();  

上面建立的是模式對話方塊,下面是建立非模式對話方塊的**:

[cpp]view plain

copy

bool

kdialog::domodeless()    

效果圖如下:

具體的實現原理,大家請參考這篇文章:對話方塊模板,regextest,微軟官網上也有相關的文章:usingdialog boxes。此外codeproject上的乙個例子:usingdialog templates to create an inputbox() in c++

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

在mfc程式中使用對話方塊時首先在資源模版裡建立對話方塊資源,然後domodal 或者create顯示出模式對話方塊或者非模式對話方塊,這樣建立出的對話方塊移植性差,從乙個工程移動到另乙個工程比較麻煩。如下 建立記憶體對話方塊資源模版類,h檔案 pragma once define dlg temp...

Android 自定義對話方塊 res資源檔案

android 自定義對話方塊 res資源檔案 this表示該對話方塊是針對當前activity的 progress progressdialog new progressdialog dialogactivity.this 設定最大值為100 progressdialog.setax 100 設定...

在記憶體建立對話方塊資源

pragma once class cbasedyndialog public cdialog public dword m dwdlgexstyle,m dwdlgstyle 風格 wchar m szdlgtitle 128 標題 rect m rcdlgrect 位置 尺寸 wchar m s...