为custom dialog box class定义两个窗口过程

本文展示了一个使用Windows API创建简单对话框的应用程序实例。该程序包含主要窗口过程WindowProc和对话框过程DialogProc,通过注册窗口类并显示对话框来实现基本的用户交互功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
#include <windows.h>
#include "resource.h"

LRESULT CALLBACK WindowProc(          HWND hwnd,
							UINT uMsg,
							WPARAM wParam,
							LPARAM lParam
							)
{
	switch ( uMsg )
	{
	case WM_CLOSE:
		::PostQuitMessage(0);
		break;
	}

	return ::DefDlgProc(hwnd, uMsg, wParam, lParam);//注意这里不是DefWindowProc
}

BOOL CALLBACK DialogProc(
						 HWND hwndDlg, 
						 UINT uMsg, 
						 WPARAM wParam, 
						 LPARAM lParam
						 )
{
	switch ( uMsg )
	{
	case WM_COMMAND:
		if ( LOWORD(wParam) == IDOK )
			EndDialog(hwndDlg, 1);
		break;
	}
	return FALSE;
}

int WinMain(          HINSTANCE hInstance,
			HINSTANCE hPrevInstance,
			LPSTR lpCmdLine,
			int nCmdShow
			)
{
	WNDCLASSEX wc;
	wc.cbSize = sizeof(wc);
	wc.style = CS_VREDRAW | CS_HREDRAW;//可为赋值为0,但不能不赋值!
	wc.lpfnWndProc = WindowProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = DLGWINDOWEXTRA;
	wc.hInstance = hInstance;
	wc.hIcon = ::LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor = ::LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = ::CreateSolidBrush(RGB(255,255,255));
	wc.lpszMenuName = NULL;
	wc.lpszClassName = "mydlgclass";
	wc.hIconSm = NULL;
	::RegisterClassEx(&wc);
	//消息会依经过WindowProc与DialogProc
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
}

rc文件:

IDD_DIALOG1 DIALOGEX 0, 0, 316, 186
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
CLASS "mydlgclass"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,205,165,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,259,165,50,14
END


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值