Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как изменять фон диалоговых окон?

3.1K
05 апреля 2003 года
St@vr
6 / / 05.04.2003
Уважаемые господа!

Я недавно начал кодить на Visual C++, и
буквально сразу же столкнулся с проблемой использования цветов (не тех, которые продают на базаре :D ).

Так вот мой вопрос заключается в том, как изменить фон диалогового окна.

За советы буду крайне признателен.


St@vr/
4.0K
06 апреля 2003 года
alexAPI
3 / / 06.04.2003
Смотря под что кодим, MFC или Win32Api ?
461
06 апреля 2003 года
gerard
102 / / 20.12.1999
CWinApp::SetDialogBkColor(clrCtlBk, clrCtlText)

Здесь clrCtlBk - цвет фона, clrCtlText - цвет текста. Оба параметра должны иметь тип COLORREF, то есть цвет в формате True Color (32 бита - по восемь на красный, зеленый, синий и восемь не используемых). Его можно получить с помощью RGB(Red, Green, Blue). SetDialogBkColor() без параметров устанавливает цвет фона 0xC0C0C0 (светло-серый) и цвет текста 0x000000 (черный).
3.1K
06 апреля 2003 года
St@vr
6 / / 05.04.2003
Уважаемые, рискну задать ещё один вопрос.

Каким образом при записи данных в файл переходить
на новую строку для дольнейшей записи.

Заранее благодарен, St@vr.
4.0K
06 апреля 2003 года
alexAPI
3 / / 06.04.2003
По поводу цвета окон:
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;
}

}:)
2.9K
07 апреля 2003 года
koks
19 / / 01.04.2003
Цитата:
Originally posted by St@vr
Уважаемые, рискну задать ещё один вопрос.

Каким образом при записи данных в файл переходить
на новую строку для дольнейшей записи.

Заранее благодарен, St@vr.



Точно так же как и при работе с консолью:
fprintf(pFile, "\n");

3.1K
07 апреля 2003 года
St@vr
6 / / 05.04.2003
Цитата:
Originally posted by gerard
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'

Кто в курсе, помогите разобраться.

3.9K
08 апреля 2003 года
Leonid
6 / / 07.04.2003
В твоём классе диалога добавь переменную:
CBrush m_br;
В конструкторе создай кисть:
m_br.CreateSolidBrush( RGB(255, 100, 50));
В твоём классе диалога - реакция на
WM_CTLCOLOR (создай обработчик с помощью
Class Wizard).
В обработчике верни твою кисть:
return (HBRUSH)m_br;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог