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一向如此,抽象化,然后高度统一。