Windows API (DAY09) WindowProc 和 DefWindowProc 函数

在 Windows 操作系统里,当窗口显示之后,它就可以接收到系统源源不断地发过来的消息, 然后窗口就需要处理这些消息,因此就需要一个函数来处理这些消息。在 API 里定义了一 个函数为回调函数,当系统需要向窗口发送消息时,就会调用窗口给出的回调函数 WindowProc,如果 WindowProc 函数不处理这个消息,就可以把它转向 DefWindowProc 函数来处理,这是系统的默认消息处理函数。当你按下菜单,或者点击窗口时,窗口需要运 行这个消息处理函数。函数 WindowProc 声明如下:

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg,
							WPARAM wParam,
							LPARAM lParam);
  • hwnd 是当前窗口的句柄。
  • uMsg 是系统发过来的消息。
  • wParam 是消息参数。
  • lParam 是消息参数。

函数 DefWindowProc 声明如下:

LRESULT DefWindowProc(HWND hWnd, UINT Msg,
					  WPARAM wParam,
					  LPARAM lParam);

这个函数参数跟上面那个函数是一样的。只不过,它是处理所有默认的消息。

调用这两个函数的实例如下:

 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 {
	 int wmId, wmEvent;
	 PAINTSTRUCT ps;
	 HDC hdc;
	
	 switch (message)
	 {
	 case WM_COMMAND:
		wmId	= LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// 菜单选项命令响应:
		switch (wmId)
		{
		case IDM_ABOUT:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EX IT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	 case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		//
		EndPaint(hWnd, &ps);
		break;
	 case WM_DESTROY:
		PostQuitMessage(0);
		break;
	 default:
		return DefWindowProc(hWnd, message, wParam, lParam);
 	}
 	return 0;
}
  • 第 1行定义消息处理函数。
  • 第 7行开始根据不同的消息作处理。
  • 第 22行和第34 行都是调用 DefWindowProc 函数来处理未处理的消息。

有了窗口消息处理函数,就可以响应不同的消息,实现各种各样的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值