MFC之基于对话框的Win32程序

之前认识了Win32程序的主函数,这次介绍一下另一个特别重要的函数,消息回调函数。


第一步:先添加一个对话框

MFC之基于对话框的Win32程序_第1张图片

第二步:通过DialogBox()函数调用,

第一个参数是资源句柄hInstance,

第二个参数是窗口ID,需要用LPCTSTR强制转换,

第三个参数是父窗口,一般设为NULL,

最后一个参数是一个消息处理函数,即消息回调函数,用于处理对话框上的消息。

DialogBox(hInstance, (LPCTSTR)IDD_DIALOG1, NULL, theProc);


第三步:编写该对话框的消息处理函数。

返回值为FALSE则系统自动处理缺省消息,为TRUE时由程序员自己管理消息。一般都为FALSE。

第一个参数是窗口句柄,

第二个参数是消息结构体,用于接收消息的类型,

第三个和第四个参数是消息数据。记录消息传递的数据。

BOOL CALLBACK theProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    return FALSE;
}


第四步:在消息处理函数中编写处理各种消息。WM_COMMAND:来自菜单项、按钮控件、快捷键的消息。用LOWORD()函数解析wParam,得到的是一个按钮的ID,用HIWORD()函数解析lParam。

case中的大括号是为了解决case内不能定义变量的问题。下面的代码是一个简单的计算。

其中

GetDlgItemInt(hWnd, IDC_NUMBER1, NULL, TRUE)是获得控件上的数值,
第一个参数是窗口句柄,
第二个参数是控件ID,
第三个参数是父窗口,一般NULL,
第四个参数为是否支持负数,TRUE支持。
返回值是获得的数值。
SetDlgItemInt(hWnd, IDC_RESULT, result, TRUE)设置控件上的内容为数值。其他参数都一样,第三个是要设置的数值。

BOOL CALLBACK theProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDOK:
			{

				 int number1 = GetDlgItemInt(hWnd, IDC_NUMBER1, NULL, TRUE);
				 int number2 = GetDlgItemInt(hWnd, IDC_NUMBER2, NULL, TRUE);
				 int result = number1 + number2;
				 SetDlgItemInt(hWnd, IDC_RESULT, result, TRUE);
			}
			break;
		case IDCANCEL:
			EndDialog(hWnd, IDCANCEL);
			break;
		
		
		default:
			break;
		}
	default:
		break;
	}
	return FALSE;
}
MFC之基于对话框的Win32程序_第2张图片


最后补充一些关于Win32程序中的数据类型简单的介绍


window数据类型命名规则:


1.指针类型在前面加:LP或P
2.句柄在前面加:H
3.无符号类型加:U


基础数据类型


类型 说明



DWORD 32位无符号整型


DWORD32 32位无符号整型


DWORD64 64位无符号整型


INT_PTR 指向INT类型数据的指针类型






HANDLE 对象句柄,最基本的句柄类型


HICON 图标句柄


HINSTANCE 程序实例的句柄


HKEY 注册表键的句柄


HMODULE 模块的句柄


HWND 窗口的句柄


LPARAM 消息的L参数


WPARAM 消息的W参数


LPCSTR windows字符串常量,可写可读


LPCTSTR 根据环境配置,若定义了UNICODE宏,则是LPCWSTR类型,否则是LPCSTR类型


LPCWSTR Unicode字符串常量


LPDWORD 指向DWORD类型数据的指针


LPSTR windows字符串常量,只读


LPWSTR Unicode字符串常量


WINAPI window API的函数调用方式。


结构体类型


1.POINT:坐标结构体


typedef struct tagPOINT
{
LONG x;
LONG y;
}POINT;




2.SIZE:窗口高宽结构体


typedef struct tagSIZE
{
LONG cx;
LONG cy;
}SIZE;


3.RECTL:矩形结构体


typedef struct _RECTL
{
LONG left;
LONG top;
LONG right;
LONG bottom;
}RECTL;







你可能感兴趣的:(MFC)