[align=center][size=large]对话框控件和对话框的绑定[/size][/align]
基于Windows SDK建立对话框和一些常用控件,问题:
1)对话框的创建?
2)对话框的控件如何初始化?
3)对话框的控件如何绑定到对话框窗口?
一、对话框的创建
对话框分为模态对话框和非模态对话框,这俩者的区别许多资料里都有详细的说明。
模态对话框获得输入焦点后之道点击OK或者Cancel后才会把焦点释放,在模态对话框设置期间其他程序不能获得焦点,这样的好处是达到了利用对话框和用户交流的目的。非模态对话框的例子就是当用notepad编辑文档,当要关闭时会弹出一个对话框提示是否要保存,这个对话框就是一个典型的模态对话框。
非模态对话框调用之后立即返回,并不持续占用输入焦点,那么可以同时开多个非模态对话框。
创建埋汰对话框与船舰窗口的区别:
创建模态对话框并不像窗口的创建:注册->创建->显示->窗口处理函数这个流程,对话框的模板系统已经注册好了,我们直接创建就可以。关键是创建了对话框之后的回调函数如何处理,怎么绑定回调函数?
创建模态对话框的API函数:
(1)DialogBox:
INT_PTR DialogBox( HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
这个函数根据系统对话框模板创建一个模态对话框,其中参数的含义如下:
hlnstance:标识一个模块的事例该模块的可执行文件含有对话框模板。 IpTemplate:标识对话框模板。此参数可以是指向一个以NULL结尾的字符串的指针,该字符串指定对话框模板名,或是指定对话框模板的资源标识符中的一个整型值。如果此参数指定了一个资源标识符则它的高位字一定为零,且低位字一定含有标识符。一定用MAKEINTRESOURCE宏指令创建此值。 hWndParent:指定拥有对话框的窗口。 IpDialogFunc:指向对话框过程的指针。有关更详细的关于对话框过程的信息,请参见DialogProc
(2)DialogBoxParam
INT_PTR DialogBoxParam( HINSTANCE hInstance,
LPCTSTR lpTemplateName,
HWND hWndParent,
DLGPROC lpDialogFunc,
LPARAM dwInitParam
);
该函数和DialogBxo相似,只是多了一个最后的参数,用来传递信息。
这两个函数都是通过CreateWindowEx来创建对话框的,而CreateWindowEx是CreateWindow的另外一个函数,高级函数,是微软后来封装的。
(3)CreateDialog 创建非模态对话框
HWND CreateDialog( HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
The CreateDialog macro creates a modeless dialog box from a dialog box template resource. The CreateDialog macro uses the CreateDialogParam function
(4)CreateDialogParam 创建非模态对话框
HWND CreateDialogParam( HINSTANCE hInstance,
LPCTSTR lpTemplateName,
HWND hWndParent,
DLGPROC lpDialogFunc,
LPARAM dwInitParam
);
这些函数调用后会发送WM_INITDIALOG消息来初始化对话框,这个消息由系统派遣到对话框回调函数进行处理。
比如:
下面的代码是用CreateWindowEx创建一个对话框
输出结果是建立一个空的模态对话框。
基于Windows SDK建立对话框和一些常用控件,问题:
1)对话框的创建?
2)对话框的控件如何初始化?
3)对话框的控件如何绑定到对话框窗口?
一、对话框的创建
对话框分为模态对话框和非模态对话框,这俩者的区别许多资料里都有详细的说明。
模态对话框获得输入焦点后之道点击OK或者Cancel后才会把焦点释放,在模态对话框设置期间其他程序不能获得焦点,这样的好处是达到了利用对话框和用户交流的目的。非模态对话框的例子就是当用notepad编辑文档,当要关闭时会弹出一个对话框提示是否要保存,这个对话框就是一个典型的模态对话框。
非模态对话框调用之后立即返回,并不持续占用输入焦点,那么可以同时开多个非模态对话框。
创建埋汰对话框与船舰窗口的区别:
创建模态对话框并不像窗口的创建:注册->创建->显示->窗口处理函数这个流程,对话框的模板系统已经注册好了,我们直接创建就可以。关键是创建了对话框之后的回调函数如何处理,怎么绑定回调函数?
创建模态对话框的API函数:
(1)DialogBox:
INT_PTR DialogBox( HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
这个函数根据系统对话框模板创建一个模态对话框,其中参数的含义如下:
hlnstance:标识一个模块的事例该模块的可执行文件含有对话框模板。 IpTemplate:标识对话框模板。此参数可以是指向一个以NULL结尾的字符串的指针,该字符串指定对话框模板名,或是指定对话框模板的资源标识符中的一个整型值。如果此参数指定了一个资源标识符则它的高位字一定为零,且低位字一定含有标识符。一定用MAKEINTRESOURCE宏指令创建此值。 hWndParent:指定拥有对话框的窗口。 IpDialogFunc:指向对话框过程的指针。有关更详细的关于对话框过程的信息,请参见DialogProc
(2)DialogBoxParam
INT_PTR DialogBoxParam( HINSTANCE hInstance,
LPCTSTR lpTemplateName,
HWND hWndParent,
DLGPROC lpDialogFunc,
LPARAM dwInitParam
);
该函数和DialogBxo相似,只是多了一个最后的参数,用来传递信息。
这两个函数都是通过CreateWindowEx来创建对话框的,而CreateWindowEx是CreateWindow的另外一个函数,高级函数,是微软后来封装的。
(3)CreateDialog 创建非模态对话框
HWND CreateDialog( HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
The CreateDialog macro creates a modeless dialog box from a dialog box template resource. The CreateDialog macro uses the CreateDialogParam function
(4)CreateDialogParam 创建非模态对话框
HWND CreateDialogParam( HINSTANCE hInstance,
LPCTSTR lpTemplateName,
HWND hWndParent,
DLGPROC lpDialogFunc,
LPARAM dwInitParam
);
这些函数调用后会发送WM_INITDIALOG消息来初始化对话框,这个消息由系统派遣到对话框回调函数进行处理。
比如:
下面的代码是用CreateWindowEx创建一个对话框
// CreateDialog.cpp : Defines the entry point for the application.
//
#include <Windows.h>
#define MAX_LOADSTRING 100
// Global Variables:
static TCHAR szTitle[MAX_LOADSTRING] = TEXT("Test"); // The title bar text
WNDPROC hWndProc;
LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: Place code here.
MSG msg;
//HACCEL hAccelTable;
// Perform application initialization:
HWND hWnd = CreateWindowEx(WS_EX_APPWINDOW, TEXT("#32770"), szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
//Set callback function
hWndProc = (WNDPROC)SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)(WNDPROC)WindowProc);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE:
DestroyWindow(hWnd);
return 0;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return CallWindowProc(hWndProc, hWnd, uMsg, wParam, lParam);
}
return 0;
}
输出结果是建立一个空的模态对话框。