wince sdk WinMain为函数的入口函数
#define dim(i) (sizeof(i))/sizeof(i[0])
struct MsgUnit
{
UINT message;
long (*fun)(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
};
int WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
{
g_hInstance=hInstance;
WNDCLASS ws;//1创建窗体类
ws.cbClsExtra=0;
ws.cbWndExtra=0;
ws.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH);
ws.hCursor=NULL;
ws.hIcon=NULL;
ws.hInstance=hInstance;
ws.lpfnWndProc=WndProcAA;
ws.lpszClassName=TEXT("Hello");
ws.lpszMenuName=NULL;
ws.style=CS_VREDRAW|CS_HREDRAW;
if(!RegisterClass(&ws)) return -1;//2注册窗体类
HWND hWnd =CreateWindow(TEXT("Hello"),TEXT("myfirst"),WS_VISIBLE | WS_BORDER|WS_CAPTION| WS_MINIMIZEBOX|WS_SYSMENU|WS_MAXIMIZEBOX,20,
30,200,200,NULL,NULL,hInstance,NULL);//创建窗体
UpdateWindow(hWnd);//更新窗体
ShowWindow(hWnd,SW_SHOWNORMAL);//显示窗体
MSG msg;
//获取消息并发送
while(::GetMessage(&msg,hWnd,0,0))//WM_CLOSE为假
{
::TranslateMessage(&msg);//翻译消息
::DispatchMessage(&msg);//传递消息
}
return 1;
}
在Windows下,return 的实际执行过程是:
先析构main函数内的局部对象。
返回至调用main的函数。
调用exit函数,由exit函数调用doexit函数,在doexit函数中完成对全局对象的析构。
最后调用ExitProcess结束进程。
回调函数:
LRESULT CALLBACK WndProcAA(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
for(int i=0;i<dim(MsgProcs);i++)
{
if(uMsg==MsgProcs[i].message)
{
MsgProcs[i].fun(hwnd,uMsg,wParam,lParam);
}
}
return ::DefWindowProc(hwnd,uMsg,wParam,lParam);
}