《Windows程序设计》读书笔记之窗口与消息

 

Windows程序的本质:基于消息,事件驱动(Message Based,Event Driven)
一般情况下,一个Win32程序应包含以下几个步骤:
(1)注册窗口类
(2)创建窗口
(3)显示窗口
(4)消息循环
(5)窗口过程


一、注册窗口类
1.窗口类:WNDCLASS

typedef struct _WNDCLASS {
    UINT    style;
    WNDPROC lpfnWndProc; //窗口过程函数
    int     cbClsExtra;
    int     cbWndExtra;
    HANDLE  hInstance;
    HICON   hIcon;
    HCURSOR hCursor;
    HBRUSH  hbrBackground;
    LPCTSTR lpszMenuName;
    LPCTSTR lpszClassName; //窗口类名称
} WNDCLASS;

注:

(1)WNDCLASS共10个字段,其中第2个和最后一个字段最重要
(2)基于同一窗口类可创建多个窗口

 

2.注册窗口类:
ATOM RegisterClass(
  CONST WNDCLASS *lpWndClass   // address of structure with class data                     
);

例:RegisterClass(&wndclass);

 

二、创建窗口:CreateWindow

HWND CreateWindow(
  LPCTSTR lpClassName,  // pointer to registered class name
  LPCTSTR lpWindowName, // pointer to window name
  DWORD dwStyle,        // window style
  int x,                // horizontal position of window
  int y,                // vertical position of window
  int nWidth,           // window width
  int nHeight,          // window height
  HWND hWndParent,      // handle to parent or owner window
  HMENU hMenu,          // handle to menu or child-window identifier
  HANDLE hInstance,     // handle to application instance
  LPVOID lpParam        // pointer to window-creation data
);

注:

1.CreateWindow共11个参数
2.窗口类和创建窗口的区别
     窗口类:定义了窗口的一般特征
     创建窗口:指定窗口更详细的信息,如窗口标题,大小。
3.CreateWindow只创建窗口,但并不显示窗口:CreateWindow调用之后,Windows已经分配了内存,用于保存在CreateWindow中指定的窗口信息。
     
三、显示窗口
1.ShowWindow:


2.UpdateWindow:向窗口过程函数发送一WM_PAINT消息。

 

四、消息循环
while(GetMessage(&msg, NULL, 0, 0)) 
{
    TranslateMessage(&msg);
    DispatchMessage(&msg) ;    
}

typedef struct tagMSG {     // msg
    HWND   hwnd;    
    UINT   message;
    WPARAM wParam;
    LPARAM lParam;
    DWORD  time;
    POINT  pt;
} MSG;

 

注:
1.GetMessage:只要从消息队列中取出消息的message字段不为WM_QUIT(其值为0x0012),GetMessage就传回一个非零值。WM_QUIT消息将导致GetMessage传回0。

2.TranslateMessage (&msg) ;
  将msg结构传给Windows,进行一些键盘消息转换。

3.DispatchMessage (&msg) ;
  将msg结构回传给Windows。然后,Windows将该消息发送给适当的窗口过程函数,让它进行处理。即Windows将调用窗口窗口过程函数


五、窗口过程
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
注:
1.CALLBACK:Windows程序员设计定义函数,但由Windows负责调用
2.基于同一个窗口类创建的多个窗口,共同使用一个窗口过程函数,即窗口过程函数处理基于同一个窗口类创建的多个窗口的消息.

3.Windows给程序发送消息:Windows通过调用窗口过程函数来给窗口发送消息,窗口过程函数对此消息进行处理,然后将控制返回给Windows.

4.窗口过程函数在处理消息时,必须传回0。窗口过程函数不予处理的所有消息应该被传给Windows默认窗口过程函数:DefWindowProc。从DefWindowProc传回的值必须由窗口过程函数WndProc传回.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值