Возможно тут мне смогут подсказать. Хочу понять как работают вкладки. Добавляю tabcontol таким образом
Код:
#include <windows.h>
#include <commctrl.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
TCHAR WinName[] = "MainFrame";
HWND htabcontrol;
HWND button;
int APIENTRY WinMain(HINSTANCE This, HINSTANCE Prev, LPTSTR cmd, int mode)
{
HWND hWnd; // Дескриптор главного окна программы
MSG msg; // Структура для хранения сообщения
WNDCLASS wc; // Класс окна
wc.hInstance = This;
wc.lpszClassName = WinName; // Имя класса окна
wc.lpfnWndProc = WndProc; // Функция окна
wc.style = CS_HREDRAW | CS_VREDRAW; // Стиль окна
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // Стандартная иконка
wc.hCursor = LoadCursor(NULL,IDC_ARROW); // Стандартный курсор
wc.lpszMenuName = NULL; // Нет меню
wc.cbClsExtra = 0; // Нет дополнительных данных класса
wc.cbWndExtra = 0; // Нет дополнительных данных окна
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); // Заполнение окна белым цветом
if(!RegisterClass(&wc)) return 0; // Регистрация класса окна
hWnd = CreateWindow(WinName, "Каркас Windows-приложения", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, NULL, This, NULL);
ShowWindow(hWnd, mode);
htabcontrol = CreateWindow(WC_TABCONTROL, NULL, WS_CHILD | WS_VISIBLE, 222, 222,
280, 282, hWnd, NULL, This, NULL);
button = CreateWindow("button", "Button 1", WS_CHILD | WS_VISIBLE, 300, 300,
70, 20, hWnd, NULL, This, NULL);
TC_ITEM tabitem;
tabitem.mask = TCIF_TEXT;
tabitem.pszText = "Tab 1";
SendMessage(htabcontrol, TCM_INSERTITEM, 0, LPARAM(&tabitem));
tabitem.pszText = "Tab 2";
SendMessage(htabcontrol, TCM_INSERTITEM, 1, LPARAM(&tabitem));
// Цикл обработки сообщений
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);// Функция трансляции кодов нажатой клавиши
DispatchMessage(&msg); // Посылает сообщение функции WndProc()
}
return 0;
}
// Оконная функция вызывается операционной системой
// и получает сообщения из очереди для данного приложения
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{ // Обработчик сообщений
switch(message)
{
case WM_DESTROY : PostQuitMessage(0);
break;
default : return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Однако вид кнопок и эдитбоксов выглядит устаревшим. Нашел, что дизайн можно исправить с помощью манифеста. Только теперь фон вкладок становится белым, что мне не очень нравится. Для изменения фона везде предлагают использовать функцию
Код:
EnableThemeDialogTexture(hwnd, ETDT_ENABLETAB);
но в моем случае ничего не меняется (может неверно использую). Как изменить фон вкладок, избегая ручную перерисовку самого контрола?