第三章 Windows and Messages

首先是设计窗口类,填写WNDCLASS 结构体内的各种选项吧;

接着是注册窗口类,RegisterClass(&wndcls);

再来就是创建窗口:

hwnd = CreateWindow (szAppName, // window class name
TEXT ("The Hello Program"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters


这里特别讲下//program instance handle这个参数指明了你创建的窗口从属于哪一个实例的。

这里还要注意的地方就是CreateWindow函数会产生WM_CREATE消息并且这个消息并不是进队列消息,WM_CREATE消息会跳过消息队列,直接交由过程函数处理,这就是为什么Message loop在CreateWindow函数后面的一个理由吧。

第一个收到的message就是WM_CREATE,在调用CreateWindow时就发送了WM_CREATE,Windows调用适当的过程函数处理,用CreateWindow第一个参数就作为WinProc的第一个参数,WM_CREATE做WinProc的第二个参数,由WinProc处理这个消息,处理完返回Windows,再返回CreateWindow

 

紧接着是ShowWindow(hwnd,iCmdShow);

最后UpdateWindow(hwnd);

 

接着是最重要的消息循环,每一个实例系统都分配一个消息队列,这个消息队列是这个实例所有窗口公用的:. This message queue stores messages to all the windows a program might create.

GetMessage(&msg,NULL,0,0)是从消息队列里取出消息并放到msg里面,只有取到WM_QUIT消息才会返回0.

GetMessage从消息队列中获取消息填充msg,再把msg发回Windows,Windows要么进行
Translate要么把msg派送到适当的过程函数中,调用过程函数处理完成之后返回给Windows
这时程序仍然处于DispatchMessage()函数中,当这个函数完了就继续获取下一个信息。

 

 

按关闭按钮会发送WM_SYSCOMMAND(DefWindowProc处理,返回WM_CLOSE),WM_CLOSE又由DefWindowProc处理,调用
DestroyWindow()函数来销毁窗口,这个函数会返回WM_DESTROY,由WinProc处理,PostQuitMessage()来结束消息循环。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值