Linguagem C - ABOUTBOX DIALOG DISCARDABLE 32, 32, 180, 100

Linguagem C - ABOUTBOX DIALOG DISCARDABLE 32, 32, 180, 100
#include <windows.h>
#include "resource.h"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL    CALLBACK AboutDlgProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK EllipPushWndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCL,int iCmdShow) {
    static TCHAR szAppName[] = TEXT("About3");
    MSG          msg;
    HWND         hwnd;
    WNDCLASS     wndclass;
    wndclass.style         = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc   = WndProc;
    wndclass.cbClsExtra    = 0;
    wndclass.cbWndExtra    = 0;
    wndclass.hInstance     = hInstance;
    wndclass.hIcon         = LoadIcon(hInstance, szAppName);
    wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName  = szAppName;
    wndclass.lpszClassName = szAppName;
    if(!RegisterClass(&wndclass)) {
        MessageBox(NULL,TEXT("Requires Windows NT!"),szAppName,MB_ICONERROR);
        return 0;
    }
    wndclass.style         = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc   = EllipPushWndProc;
    wndclass.cbClsExtra    = 0;
    wndclass.cbWndExtra    = 0;
    wndclass.hInstance     = hInstance;
    wndclass.hIcon         = NULL;
    wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);
    wndclass.lpszMenuName  = NULL;
    wndclass.lpszClassName = TEXT("EllipPush");
    RegisterClass(&wndclass);

    hwnd = CreateWindow(
        szAppName,TEXT("About Box"),WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,CW_USEDEFAULT,500,300,
        NULL, NULL, hInstance, NULL
    );
    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);
    while(GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage (&msg);
    }
    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) {
    static HINSTANCE hInstance;
    switch(message) {
        case WM_CREATE:
            hInstance = ((LPCREATESTRUCT) lParam)->hInstance;
            return 0;
        case WM_COMMAND:
            switch(LOWORD(wParam)) {
                case IDM_APP_ABOUT:
                    DialogBox(hInstance,TEXT("AboutBox"), hwnd, AboutDlgProc);
                    return 0;
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}

BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam) {
    switch(message) {
        case WM_INITDIALOG:
            return TRUE;
        case WM_COMMAND:
            switch(LOWORD(wParam)) {
                case IDOK:
                    EndDialog(hDlg, 0);
                    return TRUE;
            }
            break;
    }
    return FALSE;
}

LRESULT CALLBACK EllipPushWndProc(HWND hwnd, UINT message,
                                  WPARAM wParam, LPARAM lParam) {
    TCHAR       szText[40];
    HBRUSH      hBrush;
    HDC         hdc;
    PAINTSTRUCT ps;
    RECT        rect;
    switch(message) {
        case WM_PAINT:
            GetClientRect(hwnd, &rect);
            GetWindowText(hwnd, szText, sizeof(szText));

            hdc = BeginPaint(hwnd,&ps);

            hBrush = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
            hBrush = (HBRUSH)SelectObject(hdc, hBrush);
            SetBkColor(hdc, GetSysColor(COLOR_WINDOW));
            SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT));

            Ellipse(hdc, rect.left,rect.top,rect.right,rect.bottom);
            DrawText(hdc,szText, -1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
            DeleteObject(SelectObject(hdc, hBrush));
            EndPaint(hwnd, &ps);
            return 0;
        case WM_KEYUP:
            if(wParam != VK_SPACE)
                break;
        case WM_LBUTTONUP:
            SendMessage(GetParent(hwnd),WM_COMMAND,GetWindowLong(hwnd, GWL_ID),(LPARAM) hwnd);
            return 0;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}

Comentários