Как изменять фон диалоговых окон?
Я недавно начал кодить на Visual C++, и
буквально сразу же столкнулся с проблемой использования цветов (не тех, которые продают на базаре :D ).
Так вот мой вопрос заключается в том, как изменить фон диалогового окна.
За советы буду крайне признателен.
St@vr/
Здесь clrCtlBk - цвет фона, clrCtlText - цвет текста. Оба параметра должны иметь тип COLORREF, то есть цвет в формате True Color (32 бита - по восемь на красный, зеленый, синий и восемь не используемых). Его можно получить с помощью RGB(Red, Green, Blue). SetDialogBkColor() без параметров устанавливает цвет фона 0xC0C0C0 (светло-серый) и цвет текста 0x000000 (черный).
Каким образом при записи данных в файл переходить
на новую строку для дольнейшей записи.
Заранее благодарен, St@vr.
LRESULT CALLBACK Main(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static HBRUSH hBrush;
HDC hdc;
// инициализация диалога в обработчика
case WM_INITDIALOG:
{
LOGBRUSH lb;
memset(&lb, 0, sizeof(LOGBRUSH));
lb.lbStyle = BS_SOLID;
lb.lbColor = RGB(248,248,248); // цвет окна
hBrush = CreateBrushIndirect(lb);
}
.
.
.
case WM_CTLCOLORDLG:
{
if (hBrush != NULL)
{
SetBkColor((HDC)wParam, RGB(0,0,0));
return (BOOL)hBrush;
}
}:)
Уважаемые, рискну задать ещё один вопрос.
Каким образом при записи данных в файл переходить
на новую строку для дольнейшей записи.
Заранее благодарен, St@vr.
Точно так же как и при работе с консолью:
fprintf(pFile, "\n");
CWinApp::SetDialogBkColor(clrCtlBk, clrCtlText)
Здесь clrCtlBk - цвет фона, clrCtlText - цвет текста. Оба параметра должны иметь тип COLORREF, то есть цвет в формате True Color (32 бита - по восемь на красный, зеленый, синий и восемь не используемых). Его можно получить с помощью RGB(Red, Green, Blue). SetDialogBkColor() без параметров устанавливает цвет фона 0xC0C0C0 (светло-серый) и цвет текста 0x000000 (черный).
Спасибо за помощь.
НО
Не всё так гладко, по-моему, как кажется.
Во-первых, для тех кому интересна эта тема могу уточнить, что для приложений Base Dialog
объявлять функцию
CWinApp::SetDialogBkColor(clrCtlBk, clrCtlText)
следует в функции InitInstance класса CNameApp (где Name - имя программы).
Делается это примерно так :
COLORREF clrCtlBk;
COLORREF clrCtlText;
SetDialogBkColor(/*COLORREF*/ clrCtlBk = RGB(255, 100, 50),/*COLORREF*/ clrCtlText = RGB(0, 0, 128)); // Set dialog background color to gray
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
НО, НО, НО
Как я уже сказал для Base Dialog всё работает без Бэ, а вот что делать если я создаю
Single Document и подключаю диалоговое окно к менюшке. Как я только не пробовал подключать
эту функцию в созданном классе для далогового окна, всё время выдаёт ошибку.
Одна из моих попыток:
BOOL CRegistrationDialog::OnInitDialog()
{
CWinApp gob;
COLORREF clrCtlBk;
COLORREF clrCtlText;
gob.SetDialogBkColor(/*COLORREF*/ clrCtlBk = RGB(255, 100, 50),/*COLORREF*/ clrCtlText = RGB(0, 0, 128)); // Set dialog background color to gray
gob.LoadStdProfileSettings(); // Load standard INI file options (including MRU)
CDialog::OnInitDialog();
return TRUE;
}
А компилятор парит мне следующее:
error C2248: 'SetDialogBkColor' : cannot access protected member declared in class 'CWinApp'
see declaration of 'SetDialogBkColor'
error C2248: 'LoadStdProfileSettings' : cannot access protected member declared in class 'CWinApp'
see declaration of 'LoadStdProfileSettings'
Кто в курсе, помогите разобраться.
CBrush m_br;
В конструкторе создай кисть:
m_br.CreateSolidBrush( RGB(255, 100, 50));
В твоём классе диалога - реакция на
WM_CTLCOLOR (создай обработчик с помощью
Class Wizard).
В обработчике верни твою кисть:
return (HBRUSH)m_br;