Windows编程第一课:纯手工创建一个窗体

第一节 创建应用程序主窗体

1 创建消息处理函数

LRESULT CALLBACK fWinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg){
	case WM_CLOSE: //处理关闭按钮消息
		DestroyWindow(hWnd); //销毁窗口
		break;
	case WM_DESTROY:
		PostQuitMessage(0); //发送退出消息
		break;
	}
	//将不处理的函数交给系统默认处理
	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}		

这个函数不用自己调用,赋值给窗体后会自动调用这个函数

关键是第二个参数,这个参数是获取到的消息标识

本例只处理两个消息:

(1) 当按下窗体右上角的关闭按钮时的消息: WM_CLOSE

(2) 当窗体进行真正销毁时:WM_DESTROY

消息队列只有在收到:WM_QUIT GetMessage()函数才会返回false值.因此必须要有一个行为能够发送这个消息.

此例中,我们在接到受到销毁窗口时发送这个消息:PostQuitMessage(0)

本例中消息处理函数:

LRESULT CALLBACK fWinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg){
	case WM_CLOSE: //处理关闭按钮消息
		DestroyWindow(hWnd); //销毁窗口
		break;
	case WM_DESTROY:
		PostQuitMessage(0); //发送退出消息
		break;
	}
	//将不处理的函数交给系统默认处理
	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}		

返回值类型为: LRESULT

限定词CALLBACK作用同WINAPI 用来设定参数的入栈方式(从右往左,以及参数的管理者:调用者)

第一个参数: 窗体句柄

第二个参数: 消息事件标识ID

第三个参数: 附加消息

第四个参数: 附加消息

返回值: 系统消息处理函数(对于不处理的消息,交回给系统处理,并返回调用结果的返回值

2 创建窗体结构体实例并设置相关属性

2.1 窗体结构体: WNDCLASS
WNDCLASS wc;
2.2 设置窗体实例属性

​ 所有属性都要设置

typedef struct tagWNDCLASS {
  UINT      style;
  WNDPROC   lpfnWndProc;
  int       cbClsExtra;
  int       cbWndExtra;
  HINSTANCE hInstance;
  HICON     hIcon;
  HCURSOR   hCursor;
  HBRUSH    hbrBackground;
  LPCTSTR   lpszMenuName;
  LPCTSTR   lpszClassName;
} WNDCLASS, *PWNDCLASS;
2.2.1 窗体显示风格
UINT style

style的值为下列值的组合

描述
CS_DBLCLKS 接受双击事件的窗体
CS_HREDRAW 调整大小后自动重绘的窗体
CS_NOCLOSE 禁用窗口菜单上的关闭按钮
CS_PARENTDC
CS_VREDRAW 客户区移动或大小调整后重绘
CS_SAVEBITS 保存被窗体挡住部分的图像,以便恢复

​ 可以上以上风格的任意组合,用(|) 连接即可

本例中设置为:

wc.style = CS_VREDRAW | CS_HREDRAW;
2.2.2 消息处理函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的章老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值