win32 编程由简入繁之一:用windows SDK 做一个简单窗口程序

实例下载

1. WinMain 是入口函数,是windows操作系统加载程序的程序执行入口点,这点要知道。

2. RegisterClass注册窗口类,Window SDK提供的API ,一些基本的API要记住,关于Window SDK提供的API,就是window 提供给我们的实现特定功能可执行代码的入口,当执行API时,执行将跳转到系统,执行完毕,再回到你写的程序中来。

3.CreateWindow,创建窗口的Window 的API,得到窗口句柄,这个句柄很重要,操作系统靠这个句柄来操作窗口数据。至于自己画窗口,自己管理自己的消息栈,当然也可以。不过Window SDK提供了现成的接口。

4.ShowWindow,Window 的API。

5.UpdateWindow ,Window 的API。

经过以上几个步骤,一个窗体建好了。接下来处理窗口消息:

1.GetMessage ,Window 的API,取消息栈里的消息。

2.TranslateMessage,Window 的API,解析得到的消息。

3.DispatchMessage,Window 的API,把消息发送给他的接收窗口。

消息的定义,包括句柄、消息代号、参数、时间等:

typedef struct tagMSG {
    HWND        hwnd;
    UINT        message;
    WPARAM      wParam;
    LPARAM      lParam;
    DWORD       time;
    POINT       pt;
#ifdef _MAC
    DWORD       lPrivate;
#endif
}

最后写窗口的消息处理过程的函数,该函数是回调函数,一定要地址明确(加载就知道,而不是执行时知道)

switch(msg)
 {
 case WM_DESTROY:
  PostQuitMessage(0);
  break;
 case WM_CREATE:
  {
   bopen = CreateWindow("Button","Open Window 2",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,5,5,150,20,hwnd,(HMENU)BOPEN1,g_hInst,0);
  }
  break;
 case WM_COMMAND:
  {
   switch(HIWORD(wParam))
   {
   case BN_CLICKED:
    switch(LOWORD(wParam))
    {
    case BOPEN1:
     ShowWindow(other,SW_SHOW);
     break;
    }
    break;
   }
  }
  break;
 default: return DefWindowProc(hwnd,msg,wParam,lParam);
 }
最后别忘了执行DefWindowProc,把你没有处理的消息全部丢给这个Window 的API。

其他就不说了,关于消息要多看,windows执行一个点击,就会发生很多很多的消息互动,你只要管理你需要管理的这部分。所有的消息都是一个窗体到另一个窗体,屏幕可以看做一个大窗体,windows一向如此,抽象化,然后高度统一。

posted on 2011-04-19 13:43  袁婉轩  阅读(117)  评论(0编辑  收藏  举报

导航