而且你看我2楼的图中,那个“青莲 马年快乐”的选项,共有四个,前三个在一块,最后一个和它们是分离的,这也就说明,这个组合框没有sort属性。要是有的话就会排在一起了。我现在怀疑组合框是不是本身就是这个特性,不允许有名字相同的选项?如果有,在打开下拉列表时,就会显示选中的是第一个?
解决方案 »
- 局部区域刷新问题
- 基于对话框的程序,在对话框上创建了一个窗口,如何使这窗口能够滚动
- HOOK API 后原来替换API函数的函数不能用
- 要仿一个.exe程序的界面,有办法直接从exe提取出界面资源加入我的工程吗?
- 请问大虾:在那里可下载installshield Professional 7及其东方语言包
- Ctrl+Z这个组合键的ASCII是 26,我在vc上面怎么实现他
- 关于数据库中的日期和VC的CTime的问题
- OLE剪切板的问题——请高手指点!
- 单击图象列表中的图标,如何得到此图标在图象列表中的位置值(在线等候)
- 谁能告诉我CUTFTP的注册时间放在什么位置?
- 新婚完毕,30而立,该有所作为了
- MFC项目制作非C++语言调用的DLL
不要 着急 下 结论。
我也觉得是这样:就是组合框在打开下拉列表时,是用编辑框里面的字符串,然后查看,找到第一个,就认为是它了。但这在有同名选项时会出现问题。你说的SetCurSel()好象是MFC里的类成员函数。我用的是sdk方式,好象用不了。我也觉得郁闷,其实组合框中有两种设置当前选项的方式,一种是发送CB_SELECTSTRING消息,这个消息把当前选项设置成某个字符串,要是这个消息出现上述问题,还情有可原。但是还有一个消息,叫CB_SETCURSEL,这个消息是把当前选项设置成某个索引值,这样就算有同名选项,也不应该错。事实上,也没有错,我用CB_GETCURSEL消息获取当前选项的索引值,发现已经设置正确了,就是打开下拉列表时,显示的不正确而已。不知是怎么回事?如果真的组合框在打开下拉列表时,只是根据编辑框里的字符串来找到第一个,就当它是选中的,这个也太了,不科学,会给同名选项带来麻烦。
switch(LOWORD(wParam))
{
case IDC_COMBO5:
if(HIWORD(wParam) == CBN_SELENDOK)//选择了"纵向扩展方式"
{
int index = SendDlgItemMessage(hDlg, IDC_COMBO5, CB_GETCURSEL, 0, 0);
pLay->VerExpandMode = index;
InvalidateRect(GetDlgItem(hDlg, IDC_BUTTON8), NULL, FALSE);
UpdateWindow(GetDlgItem(hDlg, IDC_BUTTON8));
}
return TRUE;
}
case WM_INITDIALOG:
SendDlgItemMessage(hDlg, IDC_COMBO5, CB_ADDSTRING, 0, (LPARAM)"拉伸");
SendDlgItemMessage(hDlg, IDC_COMBO5, CB_ADDSTRING, 0, (LPARAM)"平铺");
SendDlgItemMessage(hDlg, IDC_COMBO5, CB_ADDSTRING, 0, (LPARAM)"固定");
SendDlgItemMessage(hDlg, IDC_COMBO5, CB_ADDSTRING, 0, (LPARAM)"固定");代码我只选取一部分,还是在我的程序里选的。就是在对话框的初始化部分,加入四个选项“拉伸”,“平铺”,“固定”,“固定”。
然后就是在选择了一个新选项的时候,修改系统某数据,并刷新一个自绘按钮( IDC_BUTTON8)。结果不管选择哪个“固定”,然后打开下拉列表,发现被选中的都是第一个“固定”。
从功能上讲, 我不知道LZ为何要实现这种功能? 一般选择后显示在选框中的内容就足够了, 如果是一样的文本, 用户也无法知道选择哪个.
如果非要有这个现象, 我能想到的只有重绘ComboBox了.