一、概述
Windows程序具有相对固定的结构,对编写者而言,不需要书写整个过程,大部分过程由系统完成。
程序中只要按一定的格式填写系统留给客户的那一小部分。
所需要完成的有:
窗口类的定义、窗口的建立、消息函数的书写、消息循环。
二、消息处理函数
Windows程序是事件驱动的,对于一个窗口,它的大部分例行维护是由系统维护的。没个窗口都有一个消息处理函数。
在消息处理函数中,对传入的消息进行处理。系统内还有它自己的缺省消息处理函数。
客户写一个消息处理函数,在窗口建立前,将消息处理函数与窗口关联。这样,每当有消息产生时,就会去调用这个消息处理函数。
通常情况下,客户都不会处理全部的消息,而是只处理自己感兴趣的消息,其他的,则送回到系统的缺省消息处理函数中去。
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ switch (message) { case case } return DefWindowProc (hwnd, message, wParam, lParam) ;}三、窗口的建立
#include "stdafx.h"#include//一、消息处理函数//参数:窗口句柄,消息,消息参数,消息参数LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){//处理感兴趣的消息switch (message){case WM_DESTROY://当用户关闭窗口,窗口销毁,程序需结束,发退出消息,以退出消息循环PostQuitMessage (0) ;return 0 ;}//其他消息交给由系统提供的缺省处理函数return ::DefWindowProc (hwnd, message, wParam, lParam) ;}//二、应用程序主函数//参数:实例句柄、前一个实例的句柄、命令行参数、窗口显示方式int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){//1.注册窗口类static TCHAR szAppName = TEXT ("HelloWin") ;//窗口类名称//定制"窗口类"结构WNDCLASS wndclass ;wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc = WndProc ;//关联消息处理函数 wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;//实例句柄wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;//图标wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;//光标wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);//画刷wndclass.lpszMenuName = NULL ;wndclass.lpszClassName = szAppName;//类名称//注册if (!RegisterClass (&wndclass)){MessageBox (NULL, TEXT ("RegisterClass Fail!"), szAppName, MB_ICONERROR) ;return 0 ;}//建立窗口HWND hwnd ;hwnd = CreateWindow (szAppName,//窗口类名称TEXT ("The Hello Program"),//窗口标题 WS_OVERLAPPEDWINDOW,//窗口风格CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,//实例句柄NULL);ShowWindow (hwnd, iCmdShow) ;UpdateWindow (hwnd) ;//消息循环MSG msg ;while (GetMessage (&msg, NULL, 0, 0))//从消息队列中取消息 {TranslateMessage (&msg) ;//转换消息DispatchMessage (&msg) ;//派发消息}return msg.wParam ;}