VC 界面编程总结
2006-09-26 15:52
[前言:]拥有美丽的外观,软件就成功了一半。界面由控件、工具栏、菜单、窗体等元素
组成,对他们进行美化就能得到一个美丽的界面。
让控件更醒目在 ComboBox 中改变列表框的宽度
我们经常会使用到组合框,而组合框是是有 2 种功能的--下拉和列表。一般情况
下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框
的宽度变大,一便让我们能更好的看我们要选的东西。
为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一
个的 WM_CTLCOLOR 的消息句柄,或者使用 CComboBox 的继承类,而且在其中添加
下面的代码:
HBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor)
{
HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);
switch (nctlcolor) {
case ctlcolor_edit:
break;
case ctlcolor_listbox:
if (listwidth > 0) {
// new width of a listbox is defined
CRect rect;
pwnd->GetWindowRect(&rect);
if (rect.Width() != listwidth) {
rect.right = rect.left + listwidth;
pwnd->MoveWindow(&rect);
}
}
break;
}
// todo: return a different brush if the default is not desired
return hbr;
}
这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框
中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫
描列表框中的条目,还得计算其中文本的长度(通过 pdc),这样你如果再刷新
列表框的话,才能一条目中比较长的来显示。
上面的方法是通过 WM_CTLCOLOR 消息来实现的,后来才知道在 MFC 的
CComboBox 类中有一个函数也可以实现同样的功能,就是: