6

CMFCPropertyGridCtrl次のようなタイプのオブジェクトにプロパティを追加しています。

myPropertyListCtrl.AddProperty(
    new CMFCPropertyGridProperty(
        _T("Name"),
        foo.GetName())
);

その結果、2 番目の列のみが表示され、"Name" を含む最初の列は表示されません。

  • 見つけましCMFCPropertyGridCtrl::GetPropertyColumnWidth()たが、対応する方法がないようSet...です...
  • NewControls列のサイズ変更が完全に自動化されているように見えるサンプルを見ました。ただし、コードに関連する違いは見つかりませんでした。

私は何が欠けていますか?

4

4 に答える 4

9

m_nLeftColumnWidth「名前」列の幅を保持する責任は、クラスのprotectedメンバーです。CMFCPropertyGridCtrlから派生する独自のクラスを作成し、CMFCPropertyGridCtrl操作できるようにしm_nLeftColumnWidthます。

于 2010-08-12T12:10:48.710 に答える
9

m_nLeftColumnWidth は、CMFCPropertyGridCtrl の ctor で最初は 0 に設定されていることに注意してください。設定されている他の数少ない場所の 1 つは、OnSize() メソッド (ref. AfxPropertyGridCtrl.cpp、VS2010 の 2783 行目) で、グリッドの幅の半分に設定されています。これは理想的ではなく、クラスをオーバーライドして明示的に設定することによって記述されたカスタマイズされた値でもありませんが、十分な場合があります。

その場合は、CMFCPropertyGridCtrl::OnSize() 保護されたメソッドをトリガーするだけです。CDockablePane などのサイズ変更可能なウィンドウで使用すると、OnSize() が自動的に呼び出されます。ただし、CDialog では、WM_SIZE メッセージを送信するなど、明示的にトリガーする必要があります。

CRect rect;
myPropGrid.GetWindowRect(&rect);
myPropGrid.PostMessage(WM_SIZE, 0, MAKELONG(rect.Width(),rect.Height()));
于 2012-11-20T23:22:20.127 に答える
5

「セット」が存在しない理由は、ヘッダー コントロールに任されているためです。以下は、MFC を介して処理する方法と、ウィンドウ メッセージを投稿する方法です。

HDITEM hdItem;
hdItem.mask = HDI_WIDTH; // indicating cxy is width
hdItem.cxy = 300; // whatever you want the property name column width to be
PropListCtrl.GetHeaderCtrl().SetItem(0, &hdItem);
于 2015-08-14T16:45:35.847 に答える
4
class CServerPropertyGridCtrl : public CMFCPropertyGridCtrl
{
public:
    void SetLeftColumnWidth(int cx)
    {
        m_nLeftColumnWidth = cx;
        AdjustLayout();
    }
};
于 2011-06-16T22:11:46.963 に答える