在每个选项卡中,控件将图标和标签居中,将图标放在标签的左侧。在WinApi中,您可以通过指定TCS_FORCEICONLEFT样式将图标强制到左侧,使标签居中。您可以使用TCS_FORCELABELLEFT样式左对齐图标和标签。
我怎样才能在c#中做同样的事情? 有类似question,但这些解决方案对我不起作用,despyte我使用爱德华的建议。 在从TabControl派生的类中(我需要可拖动的选项卡,但现在拖动选项卡时,其标签的对齐方式中断,因为我将SizeMode设置为Fixed以获得相同宽度并正确拖动的选项卡):
[DllImport("user32.dll", EntryPoint = "SetWindowLong", CharSet = CharSet.Auto)]
protected static extern bool SetWindowLong32(IntPtr ptr, int index, int value);
[DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", CharSet = CharSet.Auto)]
protected static extern bool SetWindowLongPtr64(IntPtr ptr, int index, int value);
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
protected static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
private const int GWL_STYLE = -16;
private const int TCS_FORCELABELLEFT = 0x20;
protected static bool SetWindowLong(IntPtr ptr, int index, int value)
{
if (IntPtr.Size == 4)
{
return SetWindowLong32(ptr, index, value);
}
return SetWindowLongPtr64(ptr, index, value);
}
并在TabControl构造函数中:
SetWindowLong(Handle, GWL_STYLE, TCS_FORCELABELLEFT);
var SWP_FRAMECHANGED = 0x20;
var SWP_NOMOVE = 0x2;
var SWP_NOSIZE = 0x1;
var SWP_NOZORDER = 0x4;
SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
我知道可以使用所有者绘制的模式,但我不知道如何使用系统样式只更改必要的元素。
答案 0 :(得分:0)
如果您只想致电SetWindowLong
,请尝试
[DllImport("user32.dll")]
static extern bool SetWindowLong(IntPtr ptr, int index, int value);
如果您的目标是32位/ 64位平台,this SO answer可能会对如何正确调用该函数提供一些启示。