在开发项目时,下拉框一般用于获取列表数据并显示,便于用户选择,但是对于长度较长的选项,一般后面的文字难以看到,对于较老的开发语言,不能实现悬浮显示的功能,现在记录一下两个修改方式:

目录

一、vb6修改comboBox下拉框显示区宽度

二、c++ MFC修改Combo-box Control下拉框显示区宽度

一、vb6修改comboBox下拉框显示区宽度

使用api函数SendMessage函数初始化下拉框宽度

展示:

实现:

在模块中引入api函数:

Public Declare Function SendMessage _
    Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _
    ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

初始化或者窗体加载时,初始化宽度:

SendMessage CombPN.hwnd, &H160, 300, 0 '宽度单位为像素,设置成300

二、c++ MFC修改Combo-box Control下拉框显示区宽度

在mfc中,对下拉框添加事件处理,在事件处理函数中设置宽度即可

展示:

步骤1:

便于操作,为下拉框组件添加一个对象:CComboBox my_combox;

步骤2:

为下拉框添加一个事件,类向导 -> 下拉框IDC_COMBO1 -> 消息找到CBN_DROPDOWN,双击写函数名称即可,点击应用,确定-> 在自定义函数名称中加入以下代码:

int DEL_RECT_WIDTH = 70;	///下拉框预留宽度

void Coutging_checkDlg::OnCbnDropdownCombo1()	//下拉框事件处理
{
	// TODO: 在此添加控件通知处理程序代码
	CClientDC dc(this);
	int nWitdh = 10;
	int nSaveDC = dc.SaveDC();

	//获取字体信息,
	dc.SelectObject(GetFont());

	//计算最大的显示长度
	for (int i = 0; i < my_combox.GetCount(); i++)
	{
		CString strLable = _T("");
		my_combox.GetLBText(i, strLable);

		nWitdh = max(nWitdh, dc.GetTextExtent(strLable).cx);
	}

	//多增加的冗余宽度
	nWitdh += DEL_RECT_WIDTH + 5;	//DEL_RECT_WIDTH:预留宽度

	//设置下拉列表宽度
	my_combox.SetDroppedWidth(nWitdh);
	//恢复实际dc
	dc.RestoreDC(nSaveDC);
}

这样就结束了,如果有误,欢迎指导出来,很乐意改善,就这样啦,谢谢!!正在努力进步

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐