gpt4 book ai didi

c - TabControl 在显示溢出箭头时剪裁客户区

转载 作者:太空宇宙 更新时间:2023-11-04 04:56:34 25 4
gpt4 key购买 nike

此错误仅出现在 XP 上的通用控件 v6(启用主题)(似乎适用于 7 和 2008)。我想知道是否其他人可能已经看到了这个 bug 功能。

当您有一个包含许多选项卡的单行 TabControl 时,如果没有足够的空间来显示所有选项卡,则会出现一对箭头。这一切都很好,只是客户区也被裁剪了,这一点都不好。

我错过了什么吗?我玩过 tabcontrol 的窗口样式,但到目前为止运气不好。

为了说明这一点,实际上最好在实际中看到它:

#define UNICODE
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>

LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);

HWND htab, hbut;

int WINAPI WinMain (HINSTANCE instance,
HINSTANCE previnst,
LPSTR args,
int wndState)
{
int i;
MSG messages;
WNDCLASSEX wincl = {
.hInstance = instance, .lpszClassName = L"WindowsApp",
.lpfnWndProc = WindowProcedure, .style = CS_DBLCLKS, .cbSize = sizeof wincl,
.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1)
};

InitCommonControls();

wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor(NULL, IDC_ARROW);

if (!RegisterClassEx (&wincl))
return 0;

HWND hwnd = CreateWindow(L"WindowsApp", L"Windows App", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, instance, NULL);

htab = CreateWindowEx(WS_EX_CONTROLPARENT, WC_TABCONTROL,
L"MyTab", WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE, 10, 10, 514, 325, hwnd,
(HMENU) 10, instance, NULL);

hbut = CreateWindow(
WC_BUTTON, L"My nice button that is clipped", WS_CHILD | WS_VISIBLE | WS_TABSTOP,
10, 30, 494, 285, htab, (HMENU) IDOK, instance, NULL
);

for (i = 0; i < 10; i ++)
{
WCHAR myBuf[100];
TCITEM tc = {.mask = TCIF_TEXT, .pszText = myBuf};
wsprintf(myBuf, L"My super tab %d", i + 1);
TabCtrl_InsertItem(htab, i, &tc);
}

SendMessage(hbut, WM_SETFONT, (LPARAM) GetStockObject(DEFAULT_GUI_FONT), FALSE);
SendMessage(htab, WM_SETFONT, (LPARAM) GetStockObject(DEFAULT_GUI_FONT), FALSE);

ShowWindow(hwnd, wndState);

while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
}

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
RECT r;
switch (message) {
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_SIZE:
GetClientRect(hwnd, &r);
MoveWindow(htab, 10, 10, r.right-20, r.bottom - 20, TRUE);
MoveWindow(hbut, 10, 30, r.right-40, r.bottom - 60, TRUE);
break;
case WM_COMMAND:
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}

最佳答案

不幸的是我无法测试它(我有 Win7)但根据 http://msdn.microsoft.com/en-us/library/hh298367%28v=VS.85%29.aspx您需要在选项卡控件和父窗口上有剪辑 sibling 。您也可以尝试使用选项卡控件的调整矩形消息来获取按钮的位置。

关于c - TabControl 在显示溢出箭头时剪裁客户区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6753567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com