Win32窗口創建過程


編寫窗口程序的步驟:
    1 定義WinMain函數
    2 定義窗口處理函數–自己定義處理消息
    3 注冊窗口類(往OS寫入數據)
    4 創建窗口 (在內存中創建窗口)
    5 顯示窗口(根據內存中對於窗口的描述信息,在顯示器中繪制窗口)
    6 消息循環(提取/翻譯/派發)
    7 消息處理

#include "stdafx.h"
HINSTANCE g_hInstance = 0;
//窗口處理函數
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg,
                                                 WPARAM wParam, LPARAM lParam )
{
    switch( uMsg )
    {
        case WM_DESTROY:
            PostQuitMessage( 0 );//可以使GetMessage返回0??
            break;
    }
    return DefWindowProc( hWnd, uMsg, wParam, lParam );
}
//注冊窗口類
BOOL Register( LPSTR lpClassName, WNDPROC wndProc )
{
    WNDCLASSEX wce = { 0 };
    wce.cbSize = sizeof( wce );
    wce.cbClsExtra = 0;
    wce.cbWndExtra = 0;
    wce.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wce.hCursor = NULL;
    wce.hIcon = NULL;
    wce.hIconSm = NULL;
    wce.hInstance = g_hInstance;
    wce.lpfnWndProc = wndProc;
    wce.lpszClassName = lpClassName;
    wce.lpszMenuName = NULL;
    wce.style = CS_HREDRAW | CS_VREDRAW;
    ATOM nAtom = RegisterClassEx( &wce );
    if( nAtom==0 )
        return FALSE;
    return TRUE;
}
//創建主窗口
HWND CreateMain( LPSTR lpClassName, LPSTR lpWndName )
{
    HWND hWnd = CreateWindowEx( 0, lpClassName, lpWndName,
                                WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
                                CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
                                NULL, NULL, g_hInstance, NULL );
    return hWnd;
}
//顯示窗口
void Display( HWND hWnd )
{
    ShowWindow( hWnd, SW_SHOW );
    UpdateWindow( hWnd );
}
//消息循環
void Message( )
{
    MSG nMsg = { 0 };
    while( GetMessage(&nMsg, NULL, 0, 0) )
    {
        TranslateMessage( &nMsg );
        DispatchMessage( &nMsg );
    }
}
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    g_hInstance = hInstance;
    BOOL nRet = Register( "Main", WndProc );
    if( nRet == FALSE )
    {
        MessageBox( NULL, "注冊失敗", "Infor", MB_OK );
        return 0;
    }
    HWND hWnd = CreateMain( "Main", "window" );
    Display( hWnd );
    Message( );
    return 0;
}


免責聲明!

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



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