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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2023, 13:54   #1
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию Элемент управления Scrollbar.

Здравствуйте! Если у меня имеется несколько scrollbar-ов и я хочу чтобы фон каждого из них был разного цвета, то как этого добиться? Я делал так:
Код:
case WM_CTLCOLORSCROLLBAR:
	{
		HDC hdc = (HDC)wParam;
		static COLORREF crBk;
		if ((HWND)lParam == hScrollRed)
		{
			crBk = RGB(255, 0, 0);
			SetBkColor(hdc, crBk);
		}
		else if ((HWND)lParam == hScrollGreen)
		{
			crBk = RGB(0, 255, 0);
			SetBkColor(hdc, RGB(0, 255, 0));
		}
		else if ((HWND)lParam == hScrollBlue)
		{
			crBk = RGB(0, 0, 255);
			SetBkColor(hdc, RGB(0, 0, 255));
		}
		//SetTextColor(hdc, RGB(124, 85, 0));
		if (!hScroll)
		{
			hScroll = CreateSolidBrush(crBk);
			//hScroll = GetSysColorBrush(COLOR_HOTLIGHT);
		}
		return (INT_PTR)hScroll;
	}
Но фон красится одним цветом, красным, не могу сообразить, почему? Хотя с одной стороны ясно, что после первой обработки этого сообщения дескриптор hScroll уже не NULL и в блок создания новой кисти не попадаем. С другой стороны, если создать сразу несколько кистей с нужными цветами, то как их вернуть, возвращаем то одну кисть... Может быть нужно делать так:
Код:
case WM_INITDIALOG:
{
	hBrushRed = CreateSolidBrush(RGB(255, 0, 0));
	hBrushGreen = CreateSolidBrush(RGB(0, 255, 0));
	hBrushBlue = CreateSolidBrush(RGB(0, 0, 255));
	return TRUE;
}

case WM_CTLCOLORSCROLLBAR:
{
	HDC hdc = (HDC)wParam;
	static COLORREF crBk;
	
	if ((HWND)lParam == hScrollRed)
	{
		crBk = hBrushRed;
	}
	if ((HWND)lParam == hScrollGreen)
	{
		crBk = hBrushGreen;
	}
	if ((HWND)lParam == hScrollBlue)
	{
		crBk = hBrushBlue;
	}
	//SetTextColor(hdc, RGB(124, 85, 0));
	
	return (INT_PTR)crBk;
}
case WM_COMMAND:
{
	switch(LOWORD(wParam))
	{
		case IDCANCEL:
		{
			if(hBrushRed)
			{
				DeleteObject(hBrushRed);
				hBrushRed = NULL;
			}
			if(hBrushGreen)
			{
				DeleteObject(hBrushGreen);
				hBrushGreen = NULL;
			}
			if(hBrushBlue)
			{
				DeleteObject(hBrushBlue);
				hBrushBlue = NULL;
			}
			EndDialog(hDlg, TRUE);
			return TRUE;
		}
	}
	return FALSE;
}
apofioz вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элемент управления флажок! polysster Microsoft Office Excel 1 28.08.2013 09:59
Элемент управления savra C# (си шарп) 2 31.07.2012 20:40
Элемент управления TreeView yaqi ASP.NET 1 22.03.2012 18:54
Элемент управления Timer Almirka Microsoft Office Word 0 05.03.2012 09:29
Элемент управления ListBox Syuf Общие вопросы C/C++ 2 26.06.2010 13:24