Message 消息机制代码

2013-10-03 23:26:47   3496
‍Message 消息机制
MSG的结构如下所示: //是一个消息结构体
  typedef struct tagMSG
  {
  HWND hwnd,     //HWND是一个数据类型 窗口句柄
  UINT message; //UINT无符号整型 是message的类型   message是一种整数的表示方式 Windows接收到的消息通过宏(WM_xxxx)来传递个message的 message是整型 数值不好记 所以传递给message的都是WM_xxxx宏来表示一个具体的消息
  WAPARAM wParam;//WAPARAM实际是一个整数(整型) 指示了一个消息的附加参数
  LPARAM lParam; //LPARAM实际也是一个整数(整型) 。 。 。 。 。 。 。 。 
  DWORD time;    //32位的一个整数 指消息被传递出去的时间
  POINT pt;      //POINT是一个点的结构体 实际上是定义了一个x,y坐标 点是pt 当消息被投递的时候 光标在屏幕上的一个位置
  }MSG;
/*=================================================================================================================================================================================================================================*/
Windows程序的入口函数 WinMain函数
int WINAPI WinMain(
      HINSTANCE hInstance,     //指一个应用程序的句柄 这个句柄叫实例句柄   指当前运行的一个实例句柄
      HINSTANCE hPrevInstance, //也是一个句柄 指先前一个实例的句柄 基于Win32的程序 此参数总为空NULL 
      LPSTR lpCmdLine,         //凡LP开头都为指针类型 LPSTR指向字符串地址的一个指针 lpCmdLine程序运行时的命令行参数
      int iCmdShow             // 程序运行时的显示方式,如最大化、最小化、隐藏显示等
     )

=================================================================================================================================
创建窗口的四个步骤SDK,1设计窗口类,2注册窗口类,3创建窗口,4显示及更新窗口
1设计窗口就是设计一个窗口类 也是一个结构体
窗口类WNDCLASS
                设计窗口类
typcdcf struct_WNDCLASS{
UINT    style;         //style指定一个类的类型 参照MSDN 或附件1 类的类型
WNDPROC lpfnWndProc;   //WNDPROC窗口过程一个类型 lpfnWndProc接收一个函数指针,指定窗口的一个回调函数
int     cbClsExtra;    //通常用不到一般设为 0
int     cbWndExtra;    //。。。。。。。。。 0
HANDLE hInstance;     //代表当前应用程序实例号
HICON   hIcon;         //图标句柄 用 LoadIcon()函数赋值 参照MSDN 或附件2 LoadIcon的图标标识符
HCURSOR hCursor;       //光标句柄 用 LoadCursor()函数赋值 参照MSDN或附件3 LoadCursor()
HBRUSH hbrBackground; //画笔句柄 用 GetStockObject()函数赋值 参照MSDN或附件4 GetStockObject()的库存对象标识符
LPCTSTR lpszMenuName; //设置一个窗口菜单 无菜单设置为 NULL 
LPCTSTR lpszClassName; //为整个一个窗口起个名字 注意:并不是标题栏的名字 例:wndclass.lpszClassName="bailang";
}WNDCLASS;
2注册窗口类 
RegisterClass(&窗口类名);
3创建窗口
HWND hwnd; //定义窗口句柄 用这个窗口句柄来存储窗口标识
通过CreateWindow函数实现

              CreateWindow()函数的原型:
     HWND CreateWindow(
   LPCTSTR lpClassName, //这是你所创建的窗口的基础类名——例如“WINCLASS-1”
   LPCTSTR lpWindowName,//窗口标题栏的名字
   DWORD dwStyle,       //说明窗口外观和行为的通用窗口标志 参照附件5 dwStyle的通用类型值
   int x,               //x,y——这是该窗口左上角位置的像素坐标。如果你无所谓,可使用CW_USEDEFAULT,这将由Windows来决定
   int y,               //同上 若X为CW_USEDEFAULT 那么Y将被忽略
   int nWidth,          //nWidth,nHeight——这是以像素表示的窗口宽度和高度。如果你无所谓,可使用CW_USEDEFAULT,这将由Window来决定
   int nHeight,         //同上 若nWidth为CW_USEDEFAULT 那么nHeight将被忽略
   HWND hWndParent,     //假如父窗口存在,这是指向父窗口的句柄。如果没有父窗口,值为NULL
   HMENU hMenu,         //这是指向菜单的句柄。下一章中将详细介绍,现在将其赋值NULL
   HINSTANCE hInstance, //这是应用程序实例,这里从WinMain()中使用实例
   LPVOID lpParam       //高级特征,设置为NULL
      );
4显示窗口 
   ShowWindow(hwnd,SW_SHOWNORMAL); //显示窗口的状态 参照 附件6 ShowWindow 指定窗口的显示状态
   UpdateWindow();                 //更新窗口
/*======================================================================================================*/
消息循环
MSG msg;     //MSG结构体定义了一个消息结构体的一个变量
while(GetMessage(&msg,NULL,0,0)) //GetMessage从消息队列中获取消息 参照附件7 GetMessage原型
{
   TranslateMessage(&msg);   //转换、翻译消息 对取到的消息对进行转换 然后将转换后的消息投递到消息队列中 再有GetMessage获取消息
   DispatchMessage(&msg);    //将收到的消息传递出去给OS 然后OS再调用回调函数lpfnWndProc(窗口过程函数)
}
回调函数的原型
LRESULT CALLBACK WindowProc(   
    WHND hwnd,        //window handle of sender
    UINT msg,         //the message id
    WPARAM wparam,    //further defines message
    LPARAM lparam     //further defines message
);
//这4个参数和MSG的结构前4个参数是一样的
‍