71上位机VC MFC组合框多行多列 查询 复选框效果
71上位机VC MFC组合框多行多列 查询 复选框效果
功能展示
VC提供的组合框功能单一,有时我们想实现组合框的查询功能,想让组合框显示多行多列,或是显示勾选效果,那就必须得自己使用代码逐一完成。我们当前例程就深度封装了这些功能,效果如图 要点提示 当前例程主要讲解一经过深度封装的组合的使用,在使用时,有几个注意的知识点;因为我们当前例程是通过自绘方法,在DrawItem()函数内部实现组合框多行多列和打勾效果的,所以组合框得带有自绘属性,也就是在组合框控件上右键属性-类型-OWNER-DRAW选择fixed和has string; 另外 类型请选择 drop list,才能够显示多列,不然组合框里仅能显示一列 实现功能 1.新建基于对话框的应用程序 2.将当前例程中CFunComboBox类的两个文件FUNCOMBOBX.CPP,FUNCOMBOBX.H,复制到自己的工程根目录下,且添加到工程当中。
3.在主对话框中实现查询功能:添加一编辑框,关联内容改变触发函数,添加一组合框关联我们自定义的组合框变量m_SearchCombo,并给它初始化些文本内容,相关函数如下 - void CGkbc8Dlg::OnChangeEdit1()
- {CString rString;
- CWnd::GetDlgItem(IDC_EDIT1)->GetWindowText( rString );
- m_SearchCombo.SelectString(rString);
- UpdateData(FALSE);
- }
复制代码- void CGkbc8Dlg::OnInitSearchComboBox()
- {m_SearchCombo.FormatList(4,DT_LEFT,FALSE,EDGE,0); //初始化四列
- CString str;
- for (int row=0;row<10;row++)// 添加五行,直充组合框
- {
- for (int col=0;col<4;col++)
- {
- str.Format("第%d列-%d行",col,row);
- if (col==3)
- switch(row)
- {case 0:str = "g"; break; case 1:str = "k"; break; case 2:
- str = "b"; case 3:str = "c"; break;
- case 4:str = "8"; break;
- case 5:str = "工"; break; case 6:str = "控";
- break; case 7:str = "编"; break;
- case 8:str = "程"; break;
- case 9:str = "吧"; break;
- } m_SearchCombo.AddItem(str,col,row);
- }
- }
- m_SearchCombo.SetCurSel(0);//should be called first
- }
- <div style="text-align: center;"><span style="font-size: large; line-height: 1.5;">4.实现组合框多列隐藏功能,添加一组合框关联变量 CFunComboBox m_HideComboColumn;,再初始化添加些文本</span></div>void CGkbc8Dlg::OnInitHideColumn()
- {m_HideComboColumn.ResetContent(1,DT_LEFT,FALSE,NORMAL,1);
- CString str;
- for (int row=0;row<250;row++)
- {
- for (int col=0;col<4;col++)
- {
- str.Format("Column:%d ,row:%d",col,row);
- m_HideComboColumn.AddItem(str,col,row);
- }
- }
- m_HideComboColumn.SetCurSel(0);
- }
复制代码7.最重要一点是将以上全部组合框的属性设置成drop-list; owner-draw:fixed 且 has string;
我们来演示下整个功能实现过程
|