DialogBox(hInstance, TEXT("AboutBox"), hwnd, AboutDlgProc);




/**** main.c ****/

#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 hI,HINSTANCE hPrevI,PSTR szCL,int iCS) {
    static TCHAR szAppName[] = TEXT("About3");
    MSG          msg;
    HWND         hwnd;
    WNDCLASS     wc;

    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hI;
    wc.hIcon         = LoadIcon(hI, szAppName);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName  = szAppName;
    wc.lpszClassName = szAppName;

    if(!RegisterClass(&wc)) {
        MessageBox(
            NULL,
            TEXT("Requires Windows NT!"),
            szAppName,
            MB_ICONERROR
        );
        return 0;
    }
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = EllipPushWndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hI;
    wc.hIcon         = NULL;
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = TEXT("EllipPush");

    RegisterClass(&wc);

    hwnd = CreateWindow(
        szAppName,TEXT("DialogBox"),WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,CW_USEDEFAULT,500,300,
        NULL, NULL, hI, NULL
    );
    ShowWindow(hwnd, iCS);
    UpdateWindow(hwnd);

    while(GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage (&msg);
        FreeConsole();
    }
    return msg.wParam;
}

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

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

LRESULT CALLBACK EllipPushWndProc(HWND hwnd, UINT msg, WPARAM wP, LPARAM lP) {
    TCHAR       szText[40];
    HBRUSH      hBrush;
    HDC         hdc;
    PAINTSTRUCT ps;
    RECT        rect;

    switch(msg) {
        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(wP != VK_SPACE)
                break;
        case WM_LBUTTONUP:
            SendMessage(
                GetParent(hwnd),
                WM_COMMAND,
                GetWindowLong(hwnd, GWL_ID),
                (LPARAM) hwnd
            );
            return 0;
    }
    return DefWindowProc(hwnd, msg, wP, lP);
}



/**** resource.h ****/

#define IDM_SOBRE                   40001
#define IDC_STATIC                  1



/**** sobre.rc ****/

#include "resource.h"
#include "afxres.h"

ABOUTBOX DIALOG DISCARDABLE  32, 32, 180, 100
STYLE DS_MODALFRAME | WS_POPUP
FONT 12, "MS Sans Serif"
BEGIN
    CONTROL "OK",           IDOK,"EllipPush",WS_GROUP|WS_TABSTOP,73,79, 32,14
    ICON    "About3",       IDC_STATIC,                           7, 7, 20,20
    CTEXT   "Referências..",IDC_STATIC,                          40,12,100, 8
    CTEXT   "Daniel 11",    IDC_STATIC,                           7,40,166, 8
    CTEXT   "Apocalipse 17",IDC_STATIC,                           7,52,166, 8
END

ABOUT3 MENU DISCARDABLE
BEGIN
    POPUP "&Help"
    BEGIN
        MENUITEM "Sobre...",  IDM_SOBRE
    END
    POPUP "&Teste"
    BEGIN
        MENUITEM "Teste2",            2
        MENUITEM "Teste3",            3
        MENUITEM "Teste4",            4
    END
END

ABOUT3              ICON    DISCARDABLE     "icone.ico"

Comentários