今天正式開始了win32 SDK非模態化的編程,不使用資源添加來寫窗口,算是一次新的修煉吧,即使學的有些晚,但是想要更加詳細的瞭解windows各種消息機制還得從最基本的API瞭解,這對以後無論是何種編程,對MFC的封裝使用都會有更大的幫助,下面是一個非模態的窗口建立。
#include "windows.h"
HINSTANCE g_Instance;
LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wapram,LPARAM lparam)
{
switch(uMsg)
{
case WM_DESTROY:{
PostQuitMessage(0);
}break;
}
return DefWindowProc(hwnd,uMsg,wapram,lparam);
}
BOOL CALLBACK Registe(LPCTSTR pszName)
{
WNDCLASSEX wce;
wce.cbSize = sizeof(wce);
wce.style = CS_HREDRAW|CS_VREDRAW;
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hbrBackground = HBRUSH (COLOR_BTNFACE + 1);
wce.hIconSm = NULL;
wce.hInstance = g_Instance;
wce.lpfnWndProc = WndProc;
wce.lpszClassName = pszName;
wce.lpszMenuName = NULL;
ATOM nAtom = RegisterClassEx(&wce);
if (nAtom == 0)
{
return FALSE;
}
return TRUE;
}
HWND CALLBACK CreateWnd(LPCTSTR pszName)
{
HWND hwnd = CreateWindow(pszName,L"MyWnd",WS_OVERLAPPEDWINDOW,0,0,400,500,NULL,NULL,g_Instance,NULL);
if (hwnd == NULL)
{
return NULL;
}
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
return hwnd;
}
void MessageInfo(HWND hwnd)
{
MSG msg = {0};
while(GetMessage(&msg,hwnd,NULL,NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
g_Instance = hInstance;
Registe(L"EDIT");
HWND hwnd = CreateWnd(L"EDIT");
MessageInfo(hwnd);
return 0;
}