Windows程序设计基础(1)

本文详细介绍了窗口程序创建的步骤,包括窗口类的创建与注册、窗口的创建与显示,以及消息循环与窗口过程的处理机制。同时,还深入探讨了WM_PAINT与WM_DESTROY两种关键消息的作用与触发条件。

窗口程序创建的过程

  • 创建窗口类
WNDCLASS wndclass;
  • 注册窗口类
RegisterClass(&wndclass);
  • 创建窗口
hwnd = CreateWindow(...);
  • 显示窗口
ShowWindow(hwnd,iCmdShow);
  • 更新窗口
UpdateWindow(hwnd);  //产生第一条WM_PATINT消息
  • 消息循环
while(GetMessage(&msg,NULL.0.0))  //获取消息,只要消息类型不为WM_QUIT,返回值是非零值
{
    TranslateMessgae(&msg);     //翻译消息
    DispatchMessage(&msg);      //分发消息到窗口过程
}
  • 窗口过程
    窗口过程在处理消息时,必须返回0。窗口过程不予处理的所有消息应该被DefWindowProc函数处理
LRESULT CALLBACK WinProctor(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
SendMessage(...);//程序可以直接调用自己的窗口过程

总结:窗口过程与一个窗口类相关联,窗口类是程序调用RegisterClass注册的。基于该类创建的窗口使用这个窗口过程来处理窗口的所有消息。Windows通过调用窗口过程来给窗口发送一个消息

窗口消息

  • WM_PAINT
    该消息使得客户区域重绘,以下几种情况会导致客户区域重绘,即产生WM_PAINT消息。
    1、UpdateWindow(hwnd);
    2、放大或者是缩小窗口(窗口类风格具有CS_HREDRAW,CS_VREDRAW)。
    3、窗口最小化后,再复原。
    4、窗口被其他窗口覆盖后,再复原。
    5、使用ScrollWindow或ScrollDC函数滚动客户区的一部分。
    6、使用InvalidateRect或InvalidateRgn函数显示产生WM_PAINT消息。

  • WM_DESTROY
    该消息使得窗口清除关闭。一般在获取该消息后,添加PostQuitMessage(0); 即,在消息队列中添加一条WM_QUIT消息。上文提到,消息循环中当遇到WM_QUIT消息后,就退出循环,结束程序。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值