Понедельник, Май 25, 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";
HWND hWndButton;
#define BTN1 1
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;
    hWndButton=CreateWindow("BUTTON","BUTTON",WS_VISIBLE|WS_CHILD,
        210,20,80,20,hWnd,reinterpret_cast<HMENU>(BTN1),hInstance,NULL);
    if(!hWndButton)
    {
        MessageBox(NULL,"Кнопка не создана","Ошибка 1",MB_OK);
        exit(1);
    }
    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;
    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case BTN1:
            if(!MessageBeep(MB_OK))
            {
                MessageBox(NULL,"Ошибка MessageBeep","Ошибка 5",MB_OK);
                exit(5);
            }
            MessageBox(NULL,"Нажата кнопка","Info",MB_OK);
        }
        break;

    default:
        return DefWindowProc(hwnd,message,wParam,lParam);
    }
    return static_cast< LRESULT >( 0 );
}



НАЗАД                                                                         ДАЛЬШЕ


Back to Top