PropertySheet color static text
От: Велимир Россия  
Дата: 19.11.10 09:31
Оценка:
Доброго времени суток!

Использую PropertySheet() для создания визарда.
флаги PROPSHEETHEADER:
  psh->dwFlags = PSH_WIZARD97 | PSH_WATERMARK | PSH_HEADER | PSH_USECALLBACK | PSH_USEICONID;

Последняя страница страница имеет следующие флаги:
  psp->dwFlags = PSP_HIDEHEADER | PSP_USETITLE;

Соответственно — слева страницы будет картинка.

Пытаюсь изменить цвет static text:

LRESULT Success_page::page_proc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
  //...
  if ( message == WM_CTLCOLORSTATIC )
  {
    if( (HWND)lParam == GetDlgItem( hwnd, IDC_WARNING_TEXT ) )
    {
      SetTextColor( (HDC)wParam, RGB(192,32,32) );
      SetBkMode( (HDC)wParam, TRANSPARENT );
      return (LRESULT)GetStockObject( NULL_BRUSH );
    }
  }
  //...
}

В результате получаю — http://files.rsdn.ru/65034/propertysheet.png

Как можно добиться белого фона?
Спасибо.
Re: PropertySheet color static text
От: econt Украина http://cprime.110mb.com
Дата: 19.11.10 10:03
Оценка:
Здравствуйте, Велимир, Вы писали:

В>    if( (HWND)lParam == GetDlgItem( hwnd, IDC_WARNING_TEXT ) )
В>    {
В>      SetTextColor( (HDC)wParam, RGB(192,32,32) );
В>      SetBkMode( (HDC)wParam, TRANSPARENT );
В>      return (LRESULT)GetStockObject( NULL_BRUSH );
В>    }
В>  }
В>  //...
В>}
В>

В>Как можно добиться белого фона?
В>Спасибо.

SetBkMode( (HDC)wParam, TRANSPARENT ); — прозрачный фон.

Вам нужно OPAQUE вместо TRANSPARENT.
И цвет фона можно установить с помощью SetBkColor()
Мне никогда не нравилась MFC. (c) Charles Petzold
Re[2]: PropertySheet color static text
От: Велимир Россия  
Дата: 19.11.10 10:45
Оценка:
Здравствуйте, econt, Вы писали:
E>SetBkMode( (HDC)wParam, TRANSPARENT ); — прозрачный фон.

E>Вам нужно OPAQUE вместо TRANSPARENT.

E>И цвет фона можно установить с помощью SetBkColor()

пробовал. В таком случае:

SetTextColor( (HDC)wParam, RGB(192,32,32) );
SetBkMode( (HDC)wParam, OPAQUE  );
SetBkColor( (HDC)wParam, RGB( 255, 255, 255 ) );
        
return (LRESULT)GetStockObject( WHITE_BRUSH );


получается вот что — http://files.rsdn.ru/65034/white-area.png
Красится только часть текста. Но не все поле static text'a
Re[3]: PropertySheet color static text
От: econt Украина http://cprime.110mb.com
Дата: 19.11.10 10:58
Оценка:
Здравствуйте, Велимир, Вы писали:

В>пробовал. В таком случае:

В>Красится только часть текста. Но не все поле static text'a

Посмотрите http://cprime.110mb.com/lesson/0103/3-6.php Может быть поможет.
Фон нужно менять при обработке сообщения WM_ERASEBKGND. Но обрабатывать его нужно внутри оконной процедуры окна STATIC.
Мне никогда не нравилась MFC. (c) Charles Petzold
Re[3]: PropertySheet color static text
От: Carc Россия http://www.amlpages.com/home.php
Дата: 19.11.10 12:18
Оценка:
Здравствуйте, Велимир, Вы писали:

В>Здравствуйте, econt, Вы писали:

E>>SetBkMode( (HDC)wParam, TRANSPARENT ); — прозрачный фон.

E>>Вам нужно OPAQUE вместо TRANSPARENT.

E>>И цвет фона можно установить с помощью SetBkColor()

В>пробовал. В таком случае:


В>
В>SetTextColor( (HDC)wParam, RGB(192,32,32) );
В>SetBkMode( (HDC)wParam, OPAQUE  );
В>SetBkColor( (HDC)wParam, RGB( 255, 255, 255 ) );
        
В>return (LRESULT)GetStockObject( WHITE_BRUSH );
В>


В>получается вот что — http://files.rsdn.ru/65034/white-area.png

В>Красится только часть текста. Но не все поле static text'a
Верните системную кисть

return (LRESULT)GetSysColorBrush(SYSCOLOR_WINDOW);


Только с константами там надо поиграться, может и не SYSCOLOR_WINDOW, а что-то другое — на память не скажу точно.
Aml Pages Home
Re[4]: PropertySheet color static text
От: Велимир Россия  
Дата: 03.05.11 06:59
Оценка:
Здравствуйте, econt, Вы писали:

E>Посмотрите http://cprime.110mb.com/lesson/0103/3-6.php Может быть поможет.

E>Фон нужно менять при обработке сообщения WM_ERASEBKGND. Но обрабатывать его нужно внутри оконной процедуры окна STATIC.

WM_ERASEBKGND совсем не приходит, такое ощущение, что это особенность работы PropertySheet. Т.к. слева от диалога он же как — то выводит картинку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.