CMFCPropertyGridCtrl控件的列宽和行高

CMFCPropertyGridCtrl控件的列宽和行高

列宽

MFC在静态创建CMFCPropertyGridCtrl控件时,Property列的初始宽度很小,而Value列很宽,以至于Property列的文本会被Value列“挡住”,而动态创建该控件时,Property列和Value列宽度却又是等分的。静态创建如何使列也等分呢?
在这里插入图片描述

在这里插入图片描述

方法一:

	HDITEM hdItem;
	hdItem.mask = HDI_WIDTH;
	hdItem.cxy = m_pgcCtrl.GetListRect().Width()/2;	//近似等分的效果,可以设置自己喜欢的宽度
	m_pgcCtrl.GetHeaderCtrl().SetItem(0, &hdItem);

直接设置标头0的宽度

方法二:

CRect rect;
m_pgcCtrl.GetClientRect(&rect);
m_pgcCtrl.SendMessage(WM_SIZE, (WPARAM)SIZE_RESTORED, MAKELPARAM(rect.Width(), rect.Height()));

首先得说明一下,MFC控件静态创建过程貌似没有产生WM_SIZE消息,而动态创建则会产生WM_SIZE,就是说静态创建比动态创建少了OnSize()的执行内容,先来看看CMFCPropertyGridCtrl的OnSize()做了什么

void CMFCPropertyGridCtrl::OnSize(UINT nType, int cx, int cy)
{
	CWnd::OnSize(nType, cx, cy);

	EndEditItem();

	m_nLeftColumnWidth = cx / 2;
	AdjustLayout();
}

m_nLeftColumnWidth 变量保存着左侧列的宽度(Property列),在画列的分割线的时候,CMFCPropertyGridCtrl以这个变量来确定分割线的位置,包括在方法一中,设置标头0的宽度最终也会影响到m_nLeftColumnWidth的值。这里m_nLeftColumnWidth直接被设置成了整个控件宽度的一半。

所以尽管使用方法一自定义了宽度,只要控件产生了WM_SIZE消息,列宽度都会恢复成等分状态。

行高

保存行高的变量是 m_nRowHeight,除了初始化m_nRowHeight = 0,涉及赋值的代码只有这一处:

	TEXTMETRIC tm;
	dc.GetTextMetrics(&tm);
	m_nRowHeight = tm.tmHeight + 4;

可见行高只与文本高度有关,直接通过设置字体改变它。

	m_fontProperty.CreatePointFont(180, _T("楷体"));
	m_pgcCtrl.SetFont(&m_fontProperty);

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Qt中,可以通过设置QTreeView的视图选项来设置树视图的行高。以下是设置行高的方法: 1. 设置 可以通过设置QHeaderView的resizeSection()函数来设置某一度,例如: ```cpp QTreeView *treeView = new QTreeView; treeView->header()->resizeSection(0, 100); // 设置第一度为100像素 ``` 也可以通过设置QHeaderView的setDefaultSectionSize()函数来设置所有的默认度,例如: ```cpp QTreeView *treeView = new QTreeView; treeView->header()->setDefaultSectionSize(100); // 设置所有的默认度为100像素 ``` 2. 设置行高 可以通过设置QTreeView的视图选项来设置树视图的行高,例如: ```cpp QTreeView *treeView = new QTreeView; treeView->setUniformRowHeights(true); // 设置所有行的高度相同 treeView->setRowHeight(0, 30); // 设置第一行的高度为30像素 ``` 或者在自定义树模型中重写sizeHint()函数,返回自定义的QSize对象,设置指定行的高度,例如: ```cpp QSize MyTreeModel::sizeHint(const QModelIndex &index, const QStyleOptionViewItem &option, const QSize &size) const { QSize result = QAbstractItemModel::sizeHint(index, option, size); if (index.row() == 0) result.setHeight(30); // 设置第一行的高度为30像素 return result; } ``` 注意:在自定义树模型中重写sizeHint()函数时,需要同时重写data()函数,设置DisplayRole的数据,否则可能会出现行高无法设置的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值