//Arquivo: main.c
#include <windows.h>
#include "resource.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK ColorScrDlg(HWND, UINT, WPARAM, LPARAM);
HWND hDlgModeless;
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hPrevInstance, PSTR szCmdLine, 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(NULL, IDI_APPLICATION);
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, TEXT("Cores"), 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);
}
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) {
switch(msg) {
case WM_DESTROY:
DeleteObject((HGDIOBJ)SetClassLong(hwnd,-10,(LONG)GetStockObject(0)));
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
BOOL CALLBACK ColorScrDlg(HWND hDlg, UINT msg, WPARAM wParam, 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 (wParam)) {
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(wParam);
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]))
)
);
InvalidateRect(hwndParent, NULL, TRUE);
return TRUE;
}
return FALSE;
}
//Arquivo: resource.h
#define IDC_STATIC 8
//Arquivo: resource.rc
#include "resource.h"
#include "afxres.h"
COLORSCRDLG DIALOG DISCARDABLE 16, 16, 120, 141
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
CAPTION "Color Scroll Scrollbars"
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
Postar um comentário