for*_*idt 4 c++ mfc mfc-feature-pack
我正在向类型对象添加属性,CMFCPropertyGridCtrl如下所示:
myPropertyListCtrl.AddProperty(
new CMFCPropertyGridProperty(
_T("Name"),
foo.GetName())
);
Run Code Online (Sandbox Code Playgroud)
结果是只有第二列可见,但不是第一列应该包含"名称".
CMFCPropertyGridCtrl::GetPropertyColumnWidth()但似乎没有相应的Set...方法......NewControls样本,其中列大小似乎是全自动的.但是,我找不到与我的代码相关的差异.我错过了什么?
请注意,m_nLeftColumnWidth最初在CMFCPropertyGridCtrl的ctor中设置为0.设置它的少数几个地方之一是OnSize()方法(参考文献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()));
Run Code Online (Sandbox Code Playgroud)
m_nLeftColumnWidth负责持有"名称"列的宽度是该类的protected成员CMFCPropertyGridCtrl.创建自己的类,源自CMFCPropertyGridCtrl,您将能够操纵m_nLeftColumnWidth.
小智 5
“set”不存在的原因是因为它留给了标题控件。下面是通过 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4400 次 |
| 最近记录: |