Windows程序设计基础(1)

窗口程序创建的过程

  • 创建窗口类
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消息后,就退出循环,结束程序。

你可能感兴趣的:(Windows编程)