Переопределить CMFCPropertyGridCtrl::SetLeftColumnWidth
.
Элемент управления заголовка для сетки доступен с помощью CMFCPropertyGridCtrl::GetHeaderCtrl()
При желании можно отключить элемент управления заголовка, чтобы предотвратить изменение размера GetHeaderCtrl().EnableWindow(FALSE);
class CMyPropertyGridCtrl : public CMFCPropertyGridCtrl
{
public:
CMyPropertyGridCtrl()
{
m_nLeftColumnWidth = 50;
}
void make_fixed_header()
{
HDITEM hdItem = { 0 };
hdItem.mask = HDI_FORMAT;
GetHeaderCtrl().GetItem(0, &hdItem);
hdItem.fmt |= HDF_FIXEDWIDTH;
GetHeaderCtrl().SetItem(0, &hdItem);
}
void SetLeftColumnWidth(int cx)
{
m_nLeftColumnWidth = cx;
AdjustLayout();
}
void OnSize(UINT f, int cx, int cy)
{
EndEditItem();
if (cx > 50)
m_nLeftColumnWidth = cx - 50; //<- 2nd column will be 50 pixels
AdjustLayout();
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMyPropertyGridCtrl, CMFCPropertyGridCtrl)
ON_WM_SIZE()
END_MESSAGE_MAP()
Использовать HDF_FIXEDWIDTH
исправить столбец для контроля заголовка.После вызова родительского окна эти функции после создания элемента управления:
grid.SetLeftColumnWidth(50);
grid.make_fixed_header();
CMyPropertyGridCtrl::SetLeftColumnWidth
не будет определять, когда пользователь изменяет размер столбца.Переопределите CMyPropertyGridCtrl::OnHeaderItemChanged
, чтобы обнаружить изменения, запрошенные пользователем.