用windowsapi来建立一个窗口

#include <iostream> 
#include <Windows.h> 
  
HINSTANCE g_hInstace = 0; 
LRESULT CALLBACK WindowProc(HWND hWnd, 
                            UINT nMsg, 
                            WPARAM wParam, 
                            LPARAM lParam) 
{ 
    switch(nMsg) 
    { 
        case WM_QUIT: 
            PostQuitMessage(0); 
            break; 
    } 
    return DefWindowProc(hWnd,nMsg,wParam,lParam); 
} 
  
BOOL RegisterWnd(LPCWSTR lpszClassName,WNDPROC WndProc) 
{ 
    WNDCLASSEX wcx={0}; 
    wcx.cbSize=sizeof(WNDCLASSEX); 
    wcx.cbClsExtra=0;//int cbClsExtra 给类而外预留的空间默认设为0 当你需要的时候自然会明白它的用处。  
    wcx.cbWndExtra=0;//int cbWndExtra 同上  
    wcx.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); 
    wcx.hCursor=NULL;//HCURSOR hCursor  该窗口光标形式的句柄 
    wcx.hIcon=NULL;//HICON hIcon  该窗口的图标的句柄 
    wcx.hIconSm=NULL;//HICON hIconSm这个图标显示的是窗口在任务栏处显示的图标。 
    wcx.hInstance=g_hInstace;//HINSTANCE hInstance    该窗口的句柄 
  
    //WNDPROC lpfnWndProc 这个应该是该结构中最重要的一个成员,类型WNDPROC的实质是一个指向函数的长整类型的指针。   
    //也就是说我们定义一个窗口,当鼠标在该窗口上操作,或键盘按键时,该窗口收到了这个消息。此时他的lpfnWndProc指向一个回调函数, 
    //(回调函数见下方讲解)该窗口将参数送到回调函数,由回调函数执行动作,之后则可以对动作作出相应。 
    wcx.lpfnWndProc=WndProc; 
  
    wcx.lpszClassName=lpszClassName;//LPCTSTR lpszClassName该类的名字。即给该类起一个名字。 
    wcx.lpszMenuName=NULL; 
    wcx.style=CS_HREDRAW | CS_VREDRAW;//定义窗口的风格,style 虽然是一个无符号整数,但是他的取值,是系统定义好的一组宏变量 
    ATOM nAtom=RegisterClassEx(&wcx);//该函数注册在随后调用CreateWindow函数和CreateWindowEx函数中使用的窗口类。 
    if(0 == nAtom) 
        return FALSE; 
    return TRUE; 
  
} 
  
HWND CreateWnd(LPCWSTR lpszClassName,LPCWSTR lpszWindowsName) 
{ 
    HWND hWnd=CreateWindowEx(WS_EX_CLIENTEDGE, 
                             lpszClassName, 
                             lpszWindowsName, 
                             WS_OVERLAPPEDWINDOW, 
                             CW_USEDEFAULT, 
                             CW_USEDEFAULT, 
                             CW_USEDEFAULT, 
                             CW_USEDEFAULT,  
                             NULL, 
                             NULL, 
                             g_hInstace, 
                             NULL); 
    return hWnd; 
} 
  
void DisplayWnd(HWND hWnd) 
{ 
    ShowWindow(hWnd,SW_NORMAL); 
    UpdateWindow(hWnd); 
} 
  
void Message() 
{ 
    MSG nMsg={0}; 
    while(GetMessage(&nMsg,NULL,0,0)) 
    { 
        TranslateMessage(&nMsg); 
        DispatchMessage(&nMsg); 
    } 
} 
int WINAPI WinMain(HINSTANCE hInstance, 
                     HINSTANCE hPrevInstance, 
                     LPSTR     lpCmdLine, 
                     int       nCmdShow) 
{ 
     // TODO: Place code here. 
    if(!RegisterWnd(TEXT("WinMain"),WindowProc)) 
    { 
        MessageBox(NULL,TEXT("创建窗口失败"),TEXT("Warning"),MB_YESNOCANCEL); 
        return 0; 
    } 
  
    HWND hWnd = CreateWnd(TEXT("WinMain"),TEXT("主窗口")); 
    DisplayWnd(hWnd); 
    Message(); 
  
    return 0; 
} 
  
  
int main() 
{ 
    //HINSTANCE hInstance=HINSTANCE(100); 
    //WinMain(hInstance,hInstance,NULL,1); 
    WinMain(g_hInstace,g_hInstace,NULL,1); 
    //WinMain(NULL,NULL,NULL,0); 
    return 0; 
}; 
原文地址:https://www.cnblogs.com/hongjiumu/p/3525500.html