使用WindowsAPI,创建SysTabControl32控件:
#include <windows.h>
#include <commctrl.h>
#pragma comment(lib, "comctl32.lib")
HINSTANCE hInst;
HWND hwndTab; // 标签控件句柄
HWND hwndTab1, hwndTab2, hwndTab3; // 各标签页内容的句柄
void CreateTabItemContents(HWND hwndParent)
{
// 创建标签页面的内容控件
hwndTab1 = CreateWindow(
L"STATIC", L"Content for Tab 1",
WS_CHILD | WS_VISIBLE | SS_CENTER,
0, 100, 300, 100,
hwndParent, nullptr, hInst, nullptr);
hwndTab2 = CreateWindow(
L"STATIC", L"Content for Tab 2",
WS_CHILD | SS_CENTER,
0, 100, 300, 100,
hwndParent, nullptr, hInst, nullptr);
hwndTab3 = CreateWindow(
L"STATIC", L"Content for Tab 3",
WS_CHILD | SS_CENTER,
0, 100, 300, 100,
hwndParent, nullptr, hInst, nullptr);
}
void ShowTabContent(int tabIdx)
{
ShowWindow(hwndTab1, tabIdx == 0 ? SW_SHOW : SW_HIDE);
ShowWindow(hwndTab2, tabIdx == 1 ? SW_SHOW : SW_HIDE);
ShowWindow(hwndTab3, tabIdx == 2 ? SW_SHOW : SW_HIDE);
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_CREATE:
{
// 创建标签控件
hwndTab = CreateWindowEx(
0, WC_TABCONTROL, L"", WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE,
10, 10, 360, 200, hwnd, (HMENU)1, hInst, NULL);
TCITEM tie = { 0 };
tie.mask = TCIF_TEXT;
TCHAR tabNames[4][10] = { L"Tab 1", L"Tab 2", L"Tab 3" };
for (int i = 0; i < 3; ++i)
{
tie.pszText = tabNames[i];
SendMessage(hwndTab, TCM_INSERTITEM, i, (LPARAM)(&tie));
}
CreateTabItemContents(hwnd);
ShowTabContent(0); // 默认显示第一个标签内容
}
break;
case WM_NOTIFY:
{
NMHDR* nmhdr = (NMHDR*)lParam;
if (nmhdr->hwndFrom == hwndTab && nmhdr->code == TCN_SELCHANGE)
{
// 当选定的标签改变时
int selectedTab = TabCtrl_GetCurSel(hwndTab);
ShowTabContent(selectedTab);
}
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
INITCOMMONCONTROLSEX icex;
icex.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&icex);
hInst = hInstance;
WNDCLASS wc = {};
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.lpszClassName = L"SysTabControl32 Control";
wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
if (!RegisterClass(&wc))
{
MessageBox(NULL, L"Window registration failed!", L"Error", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
HWND hwnd = CreateWindowEx(
0, L"SysTabControl32 Control", L"SysTabControl32",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 360, 300,
nullptr, nullptr, hInstance, nullptr);
if (hwnd == NULL)
{
MessageBox(NULL, L"Window creation failed!", L"Error", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return static_cast<int>(msg.wParam);
}
效果图:

没有回复内容