STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION



#include <windows.h>
#include "resource.h"

static char font[50] = "Verdana";

static HFONT tamanhoDaFonte;

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

HWND hDlgModeless;

int WINAPI WinMain(HINSTANCE hI, HINSTANCE hPI, PSTR szCL, int iCS) {

    static TCHAR szAppName[] = TEXT("Cores");
    HWND         hwnd;
    MSG          msg;
    WNDCLASS     wndclass;

    wndclass.style         = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc   = WndProc;
    wndclass.cbClsExtra    = 0;
    wndclass.cbWndExtra    = 0;
    wndclass.hInstance     = hI;
    wndclass.hIcon         = LoadIcon(hI, IDI_ICON);
    wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = CreateSolidBrush(0L);
    wndclass.lpszMenuName  = NULL;
    wndclass.lpszClassName = szAppName;

    if(!RegisterClass(&wndclass)) {
        MessageBox(NULL,TEXT("Erro!"),szAppName,MB_ICONERROR);
        return 0;
    }

    hwnd = CreateWindow(
        szAppName,"Change Color",WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
        NULL, NULL, hI, NULL
    );

    ShowWindow(hwnd, iCS);
    UpdateWindow(hwnd);

    hDlgModeless=CreateDialog(hI,TEXT("ColorScrDlg"),hwnd,ColorScrDlg);

    while(GetMessage(&msg, NULL, 0, 0)) {
        if(hDlgModeless==0 || !IsDialogMessage(hDlgModeless,&msg)) {
            TranslateMessage(&msg);
            DispatchMessage (&msg);
            FreeConsole();
        }
    }
    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wP,LPARAM lParam) {
    HDC         contexto;
    PAINTSTRUCT ps;
    static TCHAR gns[] = "Gênesis 6:5";
    switch(msg) {
        case WM_PAINT:
            contexto = BeginPaint(hwnd, &ps);

            tamanhoDaFonte = CreateFontA(
                89, 0, 0, 0, FW_EXTRABOLD,
                1, 0, 0, 0, 0,
                0, 0, 0, font
            );

            SelectObject(contexto, tamanhoDaFonte);
            SetTextColor(contexto, RGB(50, 0, 255));
            TextOut(contexto, 10, 220, gns, strlen(gns));
            EndPaint(hwnd, &ps);
            return 0;
        case WM_DESTROY:
            DeleteObject(
                (HGDIOBJ) SetClassLong(
                    hwnd,
                    -10,
                    (LONG) GetStockObject(0)
                )
            );
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd, msg, wP, lParam);
}

BOOL CALLBACK ColorScrDlg(HWND hDlg, UINT msg, WPARAM wP, LPARAM lParam) {
    static int iColor[3];
    HWND       hwndParent, hCtrl;
    int        iCtrlID, iIndex;
    switch(msg) {
        case WM_INITDIALOG:
            for(iCtrlID = 10; iCtrlID<13; iCtrlID++) {
                hCtrl = GetDlgItem(hDlg, iCtrlID);
                SetScrollRange(hCtrl, SB_CTL, 0, 255, FALSE);
                SetScrollPos(hCtrl, SB_CTL, 0, FALSE);
            }
            return TRUE;
        case WM_VSCROLL:
            hCtrl   = (HWND) lParam;
            iCtrlID = GetWindowLong(hCtrl, GWL_ID);
            iIndex  = iCtrlID - 10;
            hwndParent = GetParent(hDlg);
            switch(LOWORD(wP)) {
                case SB_PAGEDOWN:
                    iColor[iIndex] += 15;
                case SB_LINEDOWN:
                    iColor[iIndex] = min(255, iColor[iIndex] + 1);
                    break;
                case SB_PAGEUP:
                    iColor[iIndex] -= 15;
                case SB_LINEUP:
                    iColor[iIndex] = max(0,   iColor[iIndex] - 1);
                    break;
                case SB_TOP:
                    iColor[iIndex] = 0;
                    break;
                case SB_BOTTOM:
                    iColor[iIndex] = 255;
                    break;
                case SB_THUMBPOSITION:
                case SB_THUMBTRACK:
                    iColor[iIndex] = HIWORD(wP);
                    break;
                default:
                    return FALSE;
            }
            SetScrollPos(hCtrl, SB_CTL,      iColor[iIndex], TRUE);
            SetDlgItemInt(hDlg, iCtrlID + 3, iColor[iIndex], FALSE);
            DeleteObject(
                (HGDIOBJ) SetClassLong(
                    hwndParent,
                    GCL_HBRBACKGROUND,
                    (LONG) CreateSolidBrush(
                        RGB(
                            iColor[0],
                            iColor[1],
                            iColor[2]
                        )
                    )
                )
            ); /** DeleteObject */
            InvalidateRect(hwndParent, NULL, TRUE);
            return TRUE;
        }
        return FALSE;
}




/********************Arquivo: resource.h********************/

#define IDC_STATIC 8
#define IDI_ICON   9



/********************Arquivo: resource.rc********************/

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

IDI_ICON ICON "project1.ico"


COLORSCRDLG DIALOG DISCARDABLE  16, 16, 120, 141
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
CAPTION "Change Color"
FONT 8, "MS Sans Serif"
BEGIN
    CTEXT           "&Red",           IDC_STATIC,8,8,24,8,NOT WS_GROUP
    SCROLLBAR       10,8,20,24,100,   SBS_VERT | WS_TABSTOP
    CTEXT           "0",13,8,124,24,8,NOT WS_GROUP
    CTEXT           "&Green",         IDC_STATIC,48,8,24,8,NOT WS_GROUP
    SCROLLBAR       11,48,20,24,100,  SBS_VERT | WS_TABSTOP
    CTEXT           "0",14,48,124,24,8,NOT WS_GROUP
    CTEXT           "&Blue",           IDC_STATIC,89,8,24,8,NOT WS_GROUP
    SCROLLBAR       12,89,20,24,100,   SBS_VERT | WS_TABSTOP
    CTEXT           "0",15,89,124,24,8,NOT WS_GROUP
END

Comentários