Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2016, 18:08   #1
Maray
Форумчанин
 
Регистрация: 03.01.2015
Сообщений: 160
Лампочка Работа со ScrollBar

Добрый день!

Помогите, пожалуйста. Создала Slider.

Код:
CreateWindowEx(0, TEXT("scrollbar"), NULL, WS_CHILD | WS_VISIBLE, 270, 260, 200, 40, hwnd, (HMENU)IDC_SCROLLBAR, lpCreateStruct->hInstance, NULL);
Помогите, пожалуйста организовать работу с ним. Мне для примера. Любая работа. Например, пусть под scrollBar находится текстовое поле, и при движении scrollbar вправо будет увеличиваться число от 0 до 100
Maray вне форума Ответить с цитированием
Старый 20.10.2016, 16:57   #2
Maray
Форумчанин
 
Регистрация: 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);
}
Изображения
Тип файла: jpg Безымянный.jpg (18.5 Кб, 130 просмотров)
Maray вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со SCrollBar LelikAK Общие вопросы Delphi 1 25.02.2011 23:33
ScrollBar, vs 6.0 Gmyh Общие вопросы C/C++ 1 21.12.2010 12:52
scrollbar grater83 Общие вопросы Delphi 2 08.10.2009 12:00
scrollbar street-walker Общие вопросы Delphi 4 29.04.2009 23:45
Работа со ScrollBar raccooni Общие вопросы C/C++ 0 12.12.2008 12:26