Форумчанин
Регистрация: 03.01.2015
Сообщений: 160
|
Поискала в Интернете, нашла пример и переделала под себя. Но не до конца. Помогите, пожалуйста.
Нужно убрать с формы справа черную часть, и поставить Scroll в правую сторону, чтобы он находился там.
Код:
#include <windows.h>
#include <stdlib.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ScrollProc(HWND, UINT, WPARAM, LPARAM);
WNDPROC fnOldScr;
HWND hwndScrol, hwndLabel, hwndValue, hwndRect;
int color, iFocus;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hwnd;
int i=1;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof (wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = CreateSolidBrush(0L);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = TEXT("Colors1");
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wndclass);
hwnd = CreateWindow(TEXT("Colors1"), TEXT("Color Scroll"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
hwndRect = CreateWindow(TEXT("static"), NULL,
WS_CHILD | WS_VISIBLE | SS_WHITERECT,
0, 0, 0, 0,
hwnd, (HMENU)9, hInstance, NULL);
hwndScrol = CreateWindow(TEXT("scrollbar"), NULL,
WS_CHILD | WS_VISIBLE | WS_TABSTOP | SBS_VERT,
0, 0, 0, 0,
hwnd, (HMENU)i, hInstance, NULL);
hwndValue = CreateWindow(TEXT("static"), TEXT("0"),
WS_CHILD | WS_VISIBLE | SS_CENTER,
0, 0, 0, 0,
hwnd, (HMENU)(i + 6), hInstance, NULL);
fnOldScr = (WNDPROC)SetWindowLong(hwndScrol, GWL_WNDPROC,
(LONG)ScrollProc);
SetScrollRange(hwndScrol, SB_CTL, 0, 255, FALSE);
SetScrollPos(hwndScrol, SB_CTL, 0, FALSE);
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
static HBRUSH hBrush, hBrushStatic;
static int cyChar;
static RECT rcColor;
char szbuffer[10];
int i=1, cxClient, cyClient;
switch (iMsg)
{
case WM_CREATE:
hBrushStatic = CreateSolidBrush(
GetSysColor(COLOR_BTNHIGHLIGHT));
cyChar = HIWORD(GetDialogBaseUnits());
return 0;
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
SetRect(&rcColor, cxClient / 2, 0, cxClient, cyClient);
MoveWindow(hwndRect, 0, 0, cxClient / 2, cyClient, TRUE);
MoveWindow(hwndScrol,
(2 * i + 1) * cxClient / 14, 2 * cyChar,
cxClient / 14, cyClient - 4 * cyChar, TRUE);
MoveWindow(hwndLabel,
(4 * i + 1) * cxClient / 28, cyChar / 2,
cxClient / 7, cyChar, TRUE);
MoveWindow(hwndValue,
(4 * i + 1) * cxClient / 28, cyClient - 3 * cyChar / 2,
cxClient / 7, cyChar, TRUE);
SetFocus(hwnd);
return 0;
case WM_SETFOCUS:
SetFocus(hwndScrol);
return 0;
case WM_VSCROLL:
i = GetWindowLong((HWND)lParam, GWL_ID);
switch (LOWORD(wParam))
{
case SB_PAGEDOWN:
color += 15;
// fall through
case SB_LINEDOWN:
color = min(255, color + 1);
break;
case SB_PAGEUP:
color -= 15;
// fall through
case SB_LINEUP:
color = max(0, color - 1);
break;
case SB_TOP:
color = 0;
break;
case SB_BOTTOM:
color = 255;
break;
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
color = HIWORD(wParam);
break;
default:
break;
}
wchar_t s[100];
SetScrollPos(hwndScrol, SB_CTL, color, TRUE);
_itow_s(color, s, 10);
SetWindowText(hwndValue, s);
InvalidateRect(hwnd, &rcColor, TRUE);
return 0;
break;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
LRESULT CALLBACK ScrollProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
int i = GetWindowLong(hwnd, GWL_ID);
switch (iMsg)
{
case WM_KEYDOWN:
if (wParam == VK_TAB)
SetFocus(hwndScrol);
break;
case WM_SETFOCUS:
iFocus = i;
break;
}
return CallWindowProc(fnOldScr, hwnd, iMsg, wParam, lParam);
}
|