_paletteSet.Dock = DockSides.Left; //Строчка работает нормально, палитра прикрепляется на левую сторону экрана.
Config.Data.DockSideAddBlock = (int)_paletteSet.Dock; //Значение = 61440, что соответствует сумме всех 4 направлений из перечисления DockSides, а должно быть = 4096, если я все правильно понимаю...
Если посмотреть при помощи ILSpy свойство Dock, то именно так оно и работает, т.е. не указывает к какой стороне прикреплено, а к каким сторонам может быть прикреплено:
// Acmgd, Version=24.1.0.0, Culture=neutral, PublicKeyToken=null
// Autodesk.AutoCAD.Windows.PaletteSet
using System;
using System.Runtime.CompilerServices;
public unsafe DockSides Dock
{
get
{
return (global::<Module>.CAdUiDockControlBar.IsFloating((global::CAdUiDockControlBar*)GetImpObj()) == 0) ? (DockSides.Left | DockSides.Top | DockSides.Right | DockSides.Bottom) : DockSides.None;
}
set
{
//IL_0029: Expected I, but got I8
System.Runtime.CompilerServices.Unsafe.SkipInit(out global::CRect cRect);
*(int*)(&cRect) = 0;
System.Runtime.CompilerServices.Unsafe.As<global::CRect, int>(ref System.Runtime.CompilerServices.Unsafe.AddByteOffset(ref cRect, 4)) = 0;
System.Runtime.CompilerServices.Unsafe.As<global::CRect, int>(ref System.Runtime.CompilerServices.Unsafe.AddByteOffset(ref cRect,) = 0;
System.Runtime.CompilerServices.Unsafe.As<global::CRect, int>(ref System.Runtime.CompilerServices.Unsafe.AddByteOffset(ref cRect, 12)) = 0;
global::<Module>.GetWindowRect((HWND__*)(*(ulong*)((long)(IntPtr)GetImpObj() + 64)), (global::tagRECT*)(&cRect));
if ((value & (DockSides.Left | DockSides.Top | DockSides.Right | DockSides.Bottom)) != 0)
{
uint num = 0u;
switch (value)
{
case DockSides.Bottom:
num = 59422u;
break;
case DockSides.Right:
num = 59421u;
break;
case DockSides.Top:
num = 59419u;
break;
case DockSides.Left:
num = 59420u;
break;
}
global::<Module>.CAdUiDockControlBar.DockControlBar((global::CAdUiDockControlBar*)GetImpObj(), num, (global::tagRECT*)(&cRect));
}
else
{
global::<Module>.Autodesk.AutoCAD.Windows.AcMgPaletteSet.FloatControlBar(GetImpObj());
}
}
}
В ObjectARX есть метод CAdUiDockControlBar::GetDockStyle, который позволяет узнать допустимые значения:
Value | Meaning |
0 | No flags - the control bar will not dock |
CBRS_ALIGN_TOP | Allows docking at the top of the client area |
CBRS_ALIGN_BOTTOM | Allows docking at the bottom of the client area |
CBRS_ALIGN_LEFT | Allows docking on the left side of the client area |
CBRS_ALIGN_RIGHT | Allows docking on the right side of the client area |
CBRS_ALIGN_ANY | Allows docking on any side of the client area |
CBRS_FLOAT_MULTI | Allows multiple control bars to be floated in a single mini-frame window |
В .NET я такого не нашел.