Пятница, Ноябрь 27, 2020

Простое окно Win32

#include<Windows.h>

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParan,LPARAM lParam);
BOOL InitApplication(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE hInstance,int nCmdShow);
LPCSTR szClassName="win";
LPCSTR szTitle="Изучаю Windows";

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstanece,LPSTR lpCmdLine,int nCmdShow)
{
    
    if(!hPrevInstanece)
    {
        if(!InitApplication(hInstance))
            return FALSE;
    }
    if(!InitInstance(hInstance,nCmdShow))
        return FALSE;
    MSG msg;
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return static_cast< int >( msg.wParam );;
}
BOOL InitApplication(HINSTANCE hInstance)
{
    WNDCLASS wc;
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = static_cast< WNDPROC >( WndProc );
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon( NULL, IDI_ASTERISK );
    wc.hCursor       = LoadCursor( NULL, IDC_CROSS );
    wc.hbrBackground = reinterpret_cast< HBRUSH >( COLOR_WINDOW+1 );
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = szClassName;

    
    return RegisterClass( &wc );
}
BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)
{
    HWND hWnd;
    hWnd=CreateWindow(szClassName,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
    if(!hWnd)
        return FALSE;
    if(ShowWindow(hWnd,nCmdShow))
        return FALSE;
    if(!UpdateWindow(hWnd))
        return FALSE;
    return TRUE;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT ps;
    
    switch(message)
    {
    case WM_PAINT:
        hDC=BeginPaint(hwnd,&ps);
        if(!hDC)
        {
            MessageBox(NULL,"Контекст не получен","Ошибка",MB_OK);
            exit(2);
        }
        if ( !TextOut( hDC, 0, 0, "Пример вывода текста в окно",
             27 ) )
        {
            MessageBox( NULL, "Неверное использование TextOut",
                        "Ошибка 4", MB_OK );
            exit( 4 );
        }

        if ( !EndPaint( hwnd, &ps ) )
        {
            MessageBox( NULL, "Контекст устройства не освобожден",
                        "Ошибка 13", MB_OK );
            exit( 13 );
        }
        break;
    case WM_KEYDOWN :
        
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    
    default:
        return DefWindowProc(hwnd,message,wParam,lParam);
    }

    return static_cast< LRESULT >( 0 );
}



НАЗАД                                                                         ДАЛЬШЕ


Back to Top