Как исправить ширину столбца CMFCPropertyListCtrl? - PullRequest
0 голосов
/ 12 октября 2018

Я настроил ширину столбца CMFCPropertyListCtrl, переопределив тот же класс.
Код:

class CMyPropertyGridCtrl : public CMFCPropertyGridCtrl
{
public:
    void SetFirstColumnWidth(int width)
    {
        m_nLeftColumnWidth = width;
        AdjustLayout();
    }
};

И в OnSize() метод класса, где pChannelListCtrl объявлен как член данных, я вызвал этот метод.Я хочу исправить второй столбец с размером 50.
Код:

int iWidth = pChannelListCtrl.GetLeftColumnWidth();
pChannelListCtrl.SetFirstColumnWidth(iWidth + (iWidth - 50));

Здесь его отображение, как и ожидалось. (Второй столбец с размером 50).
Проблема: Я хочу сохранить размер второго столбца фиксированным.Но вот его изменяемый размер.

Подскажите, пожалуйста, как мне изменить размер столбца.

Спасибо,
Абдулла

1 Ответ

0 голосов
/ 12 октября 2018

Переопределить 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, чтобы обнаружить изменения, запрошенные пользователем.

...