Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
PavelT100
0 / 0 / 0
Регистрация: 21.10.2008
Сообщений: 62
#1

Какое сообщение надо обработать для отрисовки фона TabCtrl? - C++

16.08.2011, 15:02. Просмотров 893. Ответов 3
Метки нет (Все метки)

Для отрисовки фона STATIC контролов надо обрабатывать сообщение WM_CTLCOLORSTATIC, для кнопок WM_CTLCOLORBTN.
А какое сообщение надо обработать для отрисовки фона TabCtrl ?
Я проверил все сообщения от WM_CTLCOLORMSGBOX до MN_GETHMENU — ничего не получается.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2011, 15:02     Какое сообщение надо обработать для отрисовки фона TabCtrl?
Посмотрите здесь:

какое сообщение для ComboBox-а обрабатывать? - C++
Здравствуйте. У меня есть диалоговое окно и в нем ComboBox. При выборе одного из элементов этого ComboBox-а мне необходимо автоматически...

За какое минимальное время роботы смогут обработать данное количество деталей? - C++
Всем добрый вечер. Есть такая задача: На некотором заводе решили модернизировать производство и закупили для этого роботов. Так как для...

когда вводится нуль,то программа не работает,нужно добавитть еще какое-то условие для нуля ,но я не знаю какое - C++
В массиве целых чисел найти количество чисел с наименьшим ко-личеством цифр. Например, в массиве {123, 34, 56, 1000, 20, 55000, 777, 11}...

Как захватить динамически память, не зная заранее, какое количество памяти надо? - C++
задание Считайте все записи из файла "6.dat". Для чтения каждой отдельной записи осуществите динамический захват памяти. Предполагается,...

Написать шаблонную функцию для универсальной отрисовки данных, содержащихся в объектах, засунутых в вектор - C++
Существует базовый класс и два класса наследника от него. Хочу сделать функцию для универсальной отрисовки данных содержащихся в объектах,...

Отловить момент логина юзера в NT/2000, какое сообщение? - C++
Нужно поймать момент когда пользователь логинится, блокирует станцию Какие сообщения при этом посылаются системой?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PavelT100
0 / 0 / 0
Регистрация: 21.10.2008
Сообщений: 62
17.08.2011, 09:58  [ТС]     Какое сообщение надо обработать для отрисовки фона TabCtrl? #2
Вот что я сделал:
создал TabCtrl со стилями WS_VISIBLE|TCS_SINGLELINE|0x0040|TCS_FOCUSNEVER|TCS_OWNERDRAWFIXED и идентификатором idsOng1

В функции родительского MDI окна (контрол у меня находтится в MDI окне) обрабатываю сообщение WM_DRAWITEM:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    case WM_DRAWITEM:
        if(msg.wParam == idsOng1)
        {
        TMDIChild::Go(msg); // это наши заморочки - это значит что выполняется стандартный обработчик
         LPDRAWITEMSTRUCT lpDrawItem = (LPDRAWITEMSTRUCT) msg.lParam;
        RECT rect = lpDrawItem->rcItem;
        rect.top += ::GetSystemMetrics(SM_CYEDGE);
 
            SetBkMode(lpDrawItem->hDC, TRANSPARENT);
            FillRect(lpDrawItem->hDC, &rect, gD.Brush(clrWindow)); //вот это выполняется и закрашивает 
//нужным цветом, но к сожалению только закладку, а не все поле таба где расположены конторлы
 
        SetBkColor(lpDrawItem->hDC, ini.rgb(clrWindow)); //а вот это не вполняется даже при отмене предыдущей функции, а вот почему ?
        return;
        }
Что я делаю не правильно ? Почему не работает SetBkColor и как заставить изменять цвет фона для всего таба, а не только для закладки ?
John Paramol
Сообщений: n/a
18.08.2011, 11:21     Какое сообщение надо обработать для отрисовки фона TabCtrl? #3
А что вы ждете от SetBkColor?
Понимаю, очень напоминает TurboПаскаль или TurboСи там какой-нибудь,
WINAPI-шная функция только устанавливает новое значение BkColor,
и больше никаких действий (типа заливки) не выполняет.
А насчет всего поля, незнаю, попробуйте InvalidateRect, что ли.
Скорее всего надо ловить иное message.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2011, 12:33     Какое сообщение надо обработать для отрисовки фона TabCtrl?
Еще ссылки по теме:

Какое сообщение появляется при нажатии на Forward As Attachment (OE)? - C++
Здравствуйте. Мне нужно отловить нажатие на Forward As Attachment в Outlook Express, это если правой кнопкой по письму и выбрать там...

Как отследить какое сообщение посылает менюшка при выборе пункта? - C++
Помогите пожалуста советом или исходником (что намного лучше). Кратка предъистория: Создал иконку в Systray-е, создал менюшку...

Сравнить уравнения и вывесети какое больше и какое меньше - C++
А= 0,35 Х=0,21 вот что получилось в начале: #include <iostream> #include <math.h> using namespace std; int main() ...

Работает для целых чисел, надо чтоб работало для действительных, не добавляя библиотек - C++
#include <stdio.h> #include <conio.h> #include <math.h> #include <iostream.h> void vod(int **C, const int n) { clrscr(); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
PavelT100
0 / 0 / 0
Регистрация: 21.10.2008
Сообщений: 62
18.08.2011, 12:33  [ТС]     Какое сообщение надо обработать для отрисовки фона TabCtrl? #4
Согласен. Конечно, SetBkColor только устанавливает значение и больше ничего не делает, но этого было вролне достаточно для Static - ов при обработке сообщения WM_CTLCOLORSTATIC. Все остальное оно само делало. Здесь я SetBkColor применил исключительно из ностальгии по WM_CTLCOLORSTATIC. У меня собственно и вопрос заключается в том, какое иное надо отлавливать сообщение ? InvalidateRect не подохдит по двум причинам, во-первых если его ставить при обработке WM_DRAWITEM, то картинка постоянно будет моргать, все время будет перерисовыватся, а во-вторых, несмотря даже на моргание, фон не поменяется.
Вопрос то у меня вообщем -то должен быть простой, неужели никто с ним не сталкивался ? Получается, что в основной области закладки таба нельзя ничего рисовать. Обратися к этой области через WM_DRAWITEM нельзя, только к области язычка где выводятся надписи.
Yandex
Объявления
18.08.2011, 12:33     Какое сообщение надо обработать для отрисовки фона TabCtrl?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru