Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ и WinAPI

Войти
Регистрация
Восстановить пароль
 
BeginerMan
49 / 48 / 5
Регистрация: 17.11.2012
Сообщений: 427
#1

Рисовать на Tab Control - C++ WinAPI

20.11.2016, 13:21. Просмотров 239. Ответов 4
Метки нет (Все метки)

Всем здрасьте !

У меня есть окно (hWnd) и есть TabControl(hTab), причём у Tab прописан родитель hWnd и стиль WS_CHILD, а ещё он растянут на всё окно.
У моего TabControl 3 вкладки.

Дальше у меня проблемы.
Мне надо во все 3 вкладки разный текст вписать.
В WM_PAINT я пишу:

C++
1
2
3
hdc = BeginPaint(hWnd, &ps);
DrawText();
EndPaint(hWnd, &ps);
Но так не пойдёт, т.к. текст нарисуется в главное окно, а мой TabControl будет перекрывать эту надпись.
Решил в BeginPaint() и EndPaint() засунуть hTab.
Так текст появился, но почему-то пропадают сверху вкладки, до тех пор, пока я не жмякну на них.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2016, 13:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рисовать на Tab Control (C++ WinAPI):

WinApi C++ Tab Control in Visual Studio - C++ WinAPI
Может кто-нибуть показать пример использования TabControl in winapi c++ Visual Studio 10/11 ? Желательно используя редактор диалогов,...

Tab Control - GWL_STYLE/GWL_EXSTYLE и Manifest файл - C++ WinAPI
Добрый день. Мой вопрос состоит в следующем: есть 2 разных контрола (ОСХ-ы) - на один из них Manifest файл влияет, на другой не влияет....

Edit Control, убрать звук при нажатии Tab - C++ WinAPI
Ну собственно сабж... Как убрать бряконье при нажатие на таб в простом однострочном редакторе? Сразу говорю у меня не диалоговое окно,...

Поймать TAB в edit - C++ WinAPI
Как поймать нажатие tab в edit? В главном окне ловится, в edit почему то нет. Прошу пояснить.

Рисовать по всему экрану - C++ WinAPI
Необходимо перемещать фигуру по всему экрану. Пытался сделать так void Draw::Down(){ HWND hWndD = GetDesktopWindow(); x++; ...

Рисовать линии курсором - C++ WinAPI
Вообщем такое задание, мол рисовать линии курсором, только не так,чтоб нарисовать одну линию и все,а чтоб каждая новая линия выходила из...

4
GoshaM
58 / 58 / 16
Регистрация: 02.06.2016
Сообщений: 140
20.11.2016, 16:40 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
LRESULT CALLBACK SubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam,
                              LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
{
    switch (uMsg)
    {
    case WM_PAINT:
    {
        DefSubclassProc(hWnd, uMsg, wParam, lParam);
        HDC hdc = GetDC(hWnd);
        //рисуем здесь
        ReleaseDC(hWnd, hdc);
    }
    return TRUE;
 
    }
    return DefSubclassProc(hWnd, uMsg, wParam, lParam);
}
 
...
 
SetWindowSubclass(hwndTab, SubclassProc, 0, 0);
1
BeginerMan
49 / 48 / 5
Регистрация: 17.11.2012
Сообщений: 427
20.11.2016, 17:39  [ТС] #3
GoshaM,
Спасибо ! Скоро протестирую.
0
GoshaM
58 / 58 / 16
Регистрация: 02.06.2016
Сообщений: 140
20.11.2016, 18:23 #4
Еще забыл, в TCN_SELCHANGE добавьте InvalidateRect(hwndTab, &rct, TRUE);, где rct тот же что и в DrawText
0
BeginerMan
49 / 48 / 5
Регистрация: 17.11.2012
Сообщений: 427
20.11.2016, 20:21  [ТС] #5
Я прописал InvalidateRect() для моего главного окна, теперь нормально переходит по вкладкам, но сверху вкладок до сих пор нет

Добавлено через 6 минут
Так, сейчас всё хорошо работает !!!

А чем отличается реализации закраски окна с помощью Begin/End Paint и Get/ReleaseDC ????

У меня с Begin/End Вкладки сверху пропадают(с хэндлом Таба), а с Get/ReleaseDC нормально всё.

Добавлено через 38 минут
А ещё !

У Таба WM_PAINT приходит даже тогда, когда вкладка просто под фокусом, из-за этого надпись становится более жирной и некрасивой.
Где ещё может происходить вызов WM_PAINT у моего Таба ??
0
20.11.2016, 20:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2016, 20:21
Привет! Вот еще темы с ответами:

Как рисовать в видеокарту? - C++
Привем всем! Представим, что запущена какая-либо игра, могу ли я рисовать поверх изображения игры, то есть прямо в видеокарту?

Рисовать на рабочем столи, API - C++ WinAPI
Доброго всем... Народ пожалуста, срочно нужна помощь начинющему. Пишу на VC++2008, проблема состоит: необходимо чтобы после нажатия...

Рисовать в Win32 как в Paint - C++ WinAPI
Как можно нарисовать прямоугольник и другие фигуры так чтобы было видно уже нарисованые фигуры через те что будут рисоватся.Тоесть надо их...

Замена MainLoop, кнопка TAB не работает - C++ WinAPI
Здравствуйте. Речь идёт о компиляторе на другом языке, где все функции связанные с GUI проживают в разных DLL-ках Run-Time. Но возможности...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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