На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> Изменить цвет текста на кнопке. , Почему не получается изменить цвет текста на кнопке?
    Доброго времени суток!
    Почему не получается изменить цвет текста на кнопке?
    Скрытый текст
    Я новичек :)


    ExpandedWrap disabled
      case WM_COMMAND:{
       
      if(wParam == IDB_Button){
       wchar_t szFace[] = L"Georgia";
       HFONT hFont = CreateFontW(
       30,
       0,
       0,
       0,
       FW_BLACK,
       FALSE,
       FALSE,
       FALSE,
       RUSSIAN_CHARSET,
       OUT_DEFAULT_PRECIS,
       CLIP_DEFAULT_PRECIS,
       CLEARTYPE_QUALITY,
       DEFAULT_PITCH || FF_DONTCARE,
       szFace
       );
       
       HDC hDCbtn = GetDC((HWND)lParam);
       SetTextColor(hDCbtn, RGB(0, 100, 255));
       SendMessage(hBtn2, WM_CTLCOLORBTN, (WPARAM)hFont, TRUE);
       SendMessage(hBtn2, WM_SETFONT, (WPARAM)hFont, TRUE);
       
       }
       
      break;
      }
      sc2proton, для раскраски контролов используется это:
      WM_COLOR..xx
      Их несколько разных.
      Сразу надо задавать 3 цветовых параметра - цвет текста, цвет фона текста и цвет фона контрола.
      Всё это хозяйство точно по докам работало до winXP, дальше разработчики Виндуса
      начали хреначить. Некоторые возможности изменения цветов контролов исчезли.
      Для каких контролов какие цвета так можно устойчиво менять я уже не помню.
      ---
      Чтобы гарантировано поменять цвет надписи для любого контрола надо менять его поведение, т.е.
      модифицировать его оконную процедуру.
      Сообщение отредактировано: ЫукпШ -
        Что то не фурычит не с одним из них WM_CTLCOLORBTN, WM_DRAWITEM, WM_CTLCOLORSTATIC

        case WM_CTLCOLORBTN:{
        HDC hdcButton = (HDC)wParam;
        HWND hwndButton = (HWND)lParam;
        SetTextColor(hdcButton, RGB(255,0,0));
        SetBkMode(hdcButton, TRANSPARENT);
        return (LRESULT)CreateSolidBrush(RGB(0,0,255));
        }

        Не работает!
        Сообщение отредактировано: sc2proton -
          Цитата sc2proton @
          Что то не фурычит не с одним из них WM_CTLCOLORBTN, WM_DRAWITEM, WM_CTLCOLORSTATIC

          Не повезло.
          Саб-классинг надо делать.
          приблизительно так
          После обработки WM_PAINT оригинальной оконной процедуры
          тоже обработаем это сообщение - напишем нужным цветом по контролу.
          я такое делал, это точно работало.
          Сообщение отредактировано: ЫукпШ -
            Цитата sc2proton @
            Что то не фурычит не с одним из них WM_CTLCOLORBTN...


            https://docs.microsoft.com/en-us/windows/wi.../wm-ctlcolorbtn

            Ясно же написано:

            Цитата
            The WM_CTLCOLORBTN message is sent to the parent window of a button before drawing the button. The parent window can change the button's text and background colors. However, only owner-drawn buttons respond to the parent window processing this message.

            Сделай owner-draw кнопку и будет работать.

            И там же дальше:
            Цитата
            By default, the DefWindowProc function selects the default system colors for the button. Buttons with the BS_PUSHBUTTON, BS_DEFPUSHBUTTON, or BS_PUSHLIKE styles do not use the returned brush. Buttons with these styles are always drawn with the default system colors. Drawing push buttons requires several different brushes-face, highlight, and shadow-but the WM_CTLCOLORBTN message allows only one brush to be returned. To provide a custom appearance for push buttons, use an owner-drawn button.


            И ссылка как это сделать:
            https://docs.microsoft.com/en-us/windows/wi...-controls-intro
              В общем я так понял в предопределенной кнопке нельзя красить текст, только свою писать?
                Цитата sc2proton @
                В общем я так понял в предопределенной кнопке нельзя красить текст, только свою писать?

                Так я же сказал тебе, как это сделать.
                Если писать свою кнопку (так или иначе)
                не будет отображаться визуальный стиль Виндуса.
                ---
                Можно вообще использовать "обычное" окно подходящего стиля в качестве
                кнопки. Как это делает "Борланд" (в некоторых свои классах).
                Однако при собственном рисовании не будут воспроизводиться
                характерные визуальные стили.
                  Я понял что я ничего не понял :)
                  Всем спасибо за ответы!
                    Цитата sc2proton @
                    Я понял что я ничего не понял :)

                    Почитай эту книгу
                    Для начинающих очень полезно.
                      Спасибо ЫукпШ
                        И правда книга очень приятно и легко читается, еще раз благодарю ЫукпШ.
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0314 ]   [ 17 queries used ]   [ Generated: 25.04.24, 02:12 GMT ]