对话框是一种特殊的主窗口,它主要用来实现程序和用户之间的信息交互,它有两种基本的模式:模态对话框和非模态对话框。当为模态对话框时,它的父窗口禁止消息输入,而为非模态对话框时,可以在对话框与父窗口之间进行切换。 一般的对话框编写流程是先定义对话框模板,然后定义的控件数组,最后是创建对话框。下面为定义对话框模板,定义控件数组,创建对话框原型:
a) 定义对话框模板原型
struct T_GUI_DLGTEMPLATE
{
T_UWORD dwStyle; /*对话框风格*/
T_UWORD dwExStyle; /*扩展风格*/
T_WORD x, y, w, h; /*对话框位置和大小*/
T_CONST T_BYTE* caption; /*标题栏文本*/
T_GUI_HICON hIcon; /*标题栏上的图标句柄*/
T_GUI_HMENU hMenu; /*对话框所拥有的菜单*/
T_WORD ControlNr; /*对话框上的控件数目*/
T_GUI_PCTRLDATA controls; /*控件数组指针*/
T_UWORD dwAddData; /*额外数据,必须为0*/
} T_GUI_DLGTEMPLATE;
typedef T_GUI_DLGTEMPLATE* T_GUI_PDLGTEMPLATE;
b) 定义控件数组原型
struct T_GUI_CTRLDATA
{
T_BYTE* class_name; /*控件类名*/
T_UWORD dwStyle; /*控件风格*/
T_WORD x, y, w, h; /*控件在对话框中的位置和大小*/
T_WORD id; /*控件ID*/
T_CONST T_BYTE* caption; /*控件文本*/
T_UWORD dwAddData; /*控件额外数据*/
T_UWORD dwExStyle; /*控件扩展风格*/
};
c) 模态对话框创建原型:
T_WORD fnGUI_DialogBoxIndirectParam (
T_GUI_pDlgTemplate pDlgTemplate,
T_GUI_HWND hOwner,
T_GUI_WndProc DlgProc,
T_GUI_LPARAM lParam)模态对话框关闭时返回点击的按钮ID 值
d) 非模态对话框创建原型:
T_GUI_HWND fnGUI_CreateMainWindowIndirect (
T_GUI_pDlgTemplate pDlgTemplate,
T_GUI_HWND hOwner,
T_GUI_WndProc WndProc)该函数的返回值是对话框的句柄
在主窗口中如果希望对控件进行控制, 就要向该控件发送消息, 调用函数fnGUI_SendMessage; 在对话框中如果希望对控件进行控制, 就要调用函数fnGUI_SendDlgItemMessage,原型如下:
T_WORD fnGUI_SendDlgItemMessage (
T_GUI_HWND hDlg,
T_WORD nIDDlgItem,
T_WORD message,
T_GUI_WPARAM wParam,
T_GUI_LPARAM lParam)
hDlg 是对话框的句柄,nIDDlgItem 是对话框控件的ID,后3 个参数表示消息,可以是系统消息,也可以是相应控件自己的消息 。