用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; 
}; 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM