-
2019-09-10 13:14:41
在我们进行mfc 编程时,我们需要用到列表框显示各层或各物体的参数设置,同时也希望能编辑其参数。我以前在网上查找,用了CComboListCtrl,这需要3个cpp 和 h 文件,用起来还不容易。
最近看到一个文章 https://blog.csdn.net/qingyang8513/article/details/50986455 ,这个直接用 listctrl 和 一个Edit 控件,很简单。所以我也测试一下,并记录在此。
运行效果如下,点击一处列表框里内容即可编辑,但我剪辑图时剪辑不到编辑状态。
我的运行环境是vc2010,下面开始讲解过程:
重点内容:
1)List Control控件NM_DCLICK消息响应事件;
2)Edit Control的KillFocus消息响应;
3)Edit Control的动态显示及隐藏;
4)List Control获取指定行和列的编号,并获取指定行和列的内容及修改赋值。
操作:
1、创建基于对话框的MFC应用程序,删除原有的静态文本;
2、添加一个List Control控件和一个Edit Control控件,并分别关联控制变量m_ListTem和m_EditTest(List Control控件适当调整大小,Edit Control大小不用调整);
3、初始化对话框函数OnInitDialog中实现List Control控件和Edit Control控件的初始化, InitList(); UpdateList();
代码如下:
BOOL CListCtrlTestDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here InitList(); UpdateList(); return TRUE; // return TRUE unless you set the focus to a control } void CListCtrlTestDlg::InitList(void) { Clayer layer={"zhang",1.3,15.6,88}; m_layer.push_back(layer); Clayer layer1={"Li",22.3,25.6,288}; m_layer.push_back(layer1); Clayer layer2={"Wang",32.33,35.6,388}; m_layer.push_back(layer2); m_EditTest.ShowWindow(SW_HIDE); CRect rect; m_ListTem.GetClientRect(&rect); int iLength = rect.Width(); m_ListTem.SetExtendedStyle(m_ListTem.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); m_ListTem.InsertColumn(0, _T("编号"), LVCFMT_CENTER, 40); m_ListTem.InsertColumn(1, _T("名字"), LVCFMT_CENTER, 80); m_ListTem.InsertColumn(2, _T("x"), LVCFMT_CENTER, (iLength - 120)/3); m_ListTem.InsertColumn(3, _T("y"), LVCFMT_CENTER, (iLength - 120)/3); m_ListTem.InsertColumn(4, _T("旋转角度"), LVCFMT_CENTER, (iLength - 120)/3); } void CListCtrlTestDlg::UpdateList(void) { CString index,x,y,z,name,count,rotate,blocks; while(m_ListTem.GetItemCount()>0) m_ListTem.DeleteItem(0); for(int i=0;i<m_layer.size();i++) { index.Format("%d",i); Clayer& layer=m_layer[i]; name=layer.name; x.Format("%.2f",layer.x); y.Format("%.2f",layer.y); count.Format("%d",layer.count); m_ListTem.InsertItem(i,index); m_ListTem.SetItemText(i,1,name); m_ListTem.SetItemText(i,2,x); m_ListTem.SetItemText(i,3,y); m_ListTem.SetItemText(i,4,count); } }
在h 文件中定义层参数结构,并定义层参数向量m_layer.
typedef struct {CString name;float x;float y;int count;} Clayer;
std::vector<Clayer> m_layer;
有上面,上面代码才不报错。这里完成了初始显示,应该可以得到开头的效果,但不能编辑。
动态编辑的核心
4、对话框头文件中添加int型变量m_Row和m_Col,用于保存双击时选中的行和列号,并初始化为-1(未选中状态);
5、为List Control控件添加NM_DBLCLK消息响应,并添加代码如下:
void CListCtrlTestDlg::OnDblclkList2(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: Add your control notification handler code here CRect rc; CString strTemp; NM_LISTVIEW *pNMListView = (NM_LISTVIEW *)pNMHDR; m_Row = pNMListView->iItem; m_Col = pNMListView->iSubItem; if (pNMListView->iItem == -1) //选择空白处 return; if (m_Col != 0) // 选择子项 { m_ListTem.GetSubItemRect(m_Row, m_Col, LVIR_LABEL, rc); m_EditTest.SetParent(&m_ListTem); m_EditTest.MoveWindow(rc); m_EditTest.SetWindowText(m_ListTem.GetItemText(m_Row, m_Col)); m_EditTest.ShowWindow(SW_SHOW); m_EditTest.SetFocus();//设置Edit焦点 m_EditTest.ShowCaret();//显示光标 m_EditTest.SetSel(0, -1);//全选 } *pResult = 0; }
6、为Edit Control控件添加EN_KILLFOCUS消息响应,并添加代码如下:
void CListCtrlTestDlg::OnKillfocusEdit1() { // TODO: Add your control notification handler code here CString str; m_EditTest.GetWindowText(str); m_ListTem.SetItemText(m_Row, m_Col, str); //这里其实应该保存编辑结果,简化了,实际程序要有改变参数 m_EditTest.ShowWindow(SW_HIDE); }
现在可以编译运行并测试程序了,应该就是我们开头的结果。
改进
输入完数据后,一般希望回车,就生效,可实际情况是要离开才生效,有点操作不方便。
编辑框怎么相应回车呢?
类精灵CListCtrlTestDlg里转到 Virtual function,点击添加 PreTranslateMessage
编辑PreTranslateMessage函数如下:
BOOL CListCtrlTestDlg::PreTranslateMessage(MSG* pMsg) { if (WM_KEYDOWN ==pMsg->message && VK_RETURN == pMsg->wParam) { if (m_EditTest.IsWindowVisible()) { m_EditTest.ShowWindow(SW_HIDE); return TRUE; } } return CDialogEx::PreTranslateMessage(pMsg); }
这段代码的含义是:在按下回车键时, 如果编辑框是可见的,就让编辑框不显示。编辑框不显示就触发EN_KILLFOCUS消息。达到回车就保存的目的。
更多相关内容 -
VBA_为列表框添加列表项的方法.rar
2021-04-10 14:21:46VBA_为列表框添加列表项的方法.rar -
javascript-如何使用javascript从json对象向列表框添加超过millon的记录?
2021-04-04 07:44:16Quote:我正在尝试将超过百万条记录追加到listBox。...没有解决方案可以在列表框中快速添加一百万行。您必须找到另一种满足需求的方法。想想在Facebook或google上搜索时追加的内容:您开始输入内容... -
易语言-60万条数据用超级列表框快速(小于1秒)显示
2021-06-29 16:20:27本例程讲解了如何快速将数据库中的数据快速添加到超级列表框 -
VC6.0 MFC 列表框 列表控件 添加 修改 删除
2020-06-28 15:46:242、添加记录,如下图所示。 3、修改记录,如下图所示。 4、删除记录,如下图所示。 二、实现步骤 1、新建一个工程,如下图所示。 2、建立菜单,并给菜单做一个消息响应函数,如下图所示。 3、接下来在对话框...VC6.0 MFC 列表框 列表控件 添加 修改 删除
写在前面:列表框是很常用,并且很重要的一个控件,那么接下来,就跟随我的脚步,去探索它的奥秘吧!
一、未卜先知
1、编译运行后,点击“学生档案信息”,界面如下图所示。
2、添加记录,如下图所示。
3、修改记录,如下图所示。
4、删除记录,如下图所示。
二、实现步骤1、新建一个工程,如下图所示。
2、建立菜单,并给菜单做一个消息响应函数,如下图所示。
3、接下来在对话框中进行相应操作,具体步骤如下图所示。
4、建立类向导,取类名“CDlgStuInfo”,如下图所示。
5、接下来,我们通过编程添加一些数据。首先在CdlgStuInfo中右击添加消息响应句柄,如下图所示。
6、在OnInitDialog() 中添加代码,如下。BOOL CDlgStuInfo::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here DWORD dwStyle; dwStyle = m_listCtrl.GetExtendedStyle(); dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_ONECLICKACTIVATE; m_listCtrl.SetExtendedStyle(dwStyle); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
记得要把头文件:#include "DlgStuInfo.h"对话框类嵌入进去!
7、在OnMStuInfo()中添加代码,如下。
void CChapterView::OnMStuInfo() { // TODO: Add your command handler code here CDlgStuInfo dlg_stuInfo; dlg_stuInfo.DoModal(); }
8、此时,运行结果如下图所示。
9、在第6步的基础上,继续往OnInitDialog() 中添加代码,如下。BOOL CDlgStuInfo::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here DWORD dwStyle; dwStyle = m_listCtrl.GetExtendedStyle(); dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_ONECLICKACTIVATE; m_listCtrl.SetExtendedStyle(dwStyle); //设置显示风格 m_listCtrl.InsertColumn(0,"学号",LVCFMT_CENTER,100); //第一个参数是字段的编号 m_listCtrl.InsertColumn(1,"姓名",LVCFMT_CENTER,100); //第二个参数是字段的名字 m_listCtrl.InsertColumn(2,"性别",LVCFMT_CENTER,100); //第三个参数是字段的显示风格 m_listCtrl.InsertColumn(3,"专业",LVCFMT_CENTER,100); //第四个参数是字段的宽度 m_listCtrl.InsertColumn(4,"班级",LVCFMT_CENTER,100); //设置表格字段名 m_listCtrl.InsertItem(0,"0001"); //0即表格中的第一行 m_listCtrl.SetItemText(0,1,"张三"); m_listCtrl.SetItemText(0,2,"男"); m_listCtrl.SetItemText(0,3,"电子信息"); m_listCtrl.SetItemText(0,4,"202001"); //在表格中添加数据,插入一行记录 m_listCtrl.InsertItem(1,"0002"); m_listCtrl.SetItemText(1,1,"李丽"); m_listCtrl.SetItemText(1,2,"女"); m_listCtrl.SetItemText(1,3,"计算机"); m_listCtrl.SetItemText(1,4,"202002"); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
10、新建一个对话框,具体如下图所示。
11、紧接着建立它所对应的类,如下图所示。
12、双击“添加记录”按钮,把“添加一条学生记录信息”这个对话框给调出来,如下图所示。
13、把“添加一条学生记录信息”对话框的头文件:#include "Dlg_StuInfoAppe.h"嵌入进来。然后在OnBTNAppe()中编程。void CDlgStuInfo::OnBTNAppe() { // TODO: Add your control notification handler code here CDlg_StuInfoAppe dlg_stuInfoAppe; dlg_stuInfoAppe.DoModal(); }
14、接下来怎么把一条新的学生信息通过“添加一条学生记录信息”对话框加到上一个 “学生档案信息”对话框的列表中去,这是我们的目的。
15、在对应部分添加如下代码:
CString m_sNo,m_sName,m_sSex,m_sDept,m_sClass;
class CDlgStuInfo : public CDialog { // Construction public: CDlgStuInfo(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CDlgStuInfo) enum { IDD = IDD_DlgStuInfo }; CListCtrl m_listCtrl; //}}AFX_DATA CString m_sNo,m_sName,m_sSex,m_sDept,m_sClass; int m_listSelPos; //获取当前被选中的位置 // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CDlgStuInfo) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CDlgStuInfo) virtual BOOL OnInitDialog(); afx_msg void OnBTNAppe(); afx_msg void OnBTNModi(); afx_msg void OnClickList1(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnBTNDele(); //}}AFX_MSG DECLARE_MESSAGE_MAP() };
16、点击“确定”按钮后接收添加的信息到上一个 (学生档案信息)对话框的列表中去,代码如下。
void CDlgStuInfo::OnBTNAppe() { // TODO: Add your control notification handler code here CDlg_StuInfoAppe dlg_stuInfoAppe; if(IDOK == dlg_stuInfoAppe.DoModal()) { m_sNo = dlg_stuInfoAppe.m_sNo; m_sName = dlg_stuInfoAppe.m_sName; m_sSex = dlg_stuInfoAppe.m_sSex; m_sDept = dlg_stuInfoAppe.m_sDept; m_sClass = dlg_stuInfoAppe.m_sClass; //把添加记录对话框中的数据传过来,保存到基础信息对话框中 int pos; //添加的位置 pos = m_listCtrl.GetItemCount(); m_listCtrl.InsertItem(pos,m_sNo); m_listCtrl.SetItemText(pos,1,m_sName); m_listCtrl.SetItemText(pos,2,m_sSex); m_listCtrl.SetItemText(pos,3,m_sDept); m_listCtrl.SetItemText(pos,4,m_sClass); //把获取进来的数据插进去 } }
17、双击“修改记录”按钮,把“修改记录信息”这个对话框给调出来(同12)。
18、把“修改记录信息”对话框的头文件:#include "Dlg_StuInfoModi.h"嵌入进来。然后在OnBTNModi()中编程(同13)。
void CDlgStuInfo::OnBTNModi() { // TODO: Add your control notification handler code here CDlg_StuInfoModi dlg_stuInfoModi; dlg_stuInfoModi.DoModal(); }
19、接下来怎么把 “修改记录信息”对话框中要修改的记录更新到上一个 “学生档案信息”对话框的列表中去,这是我们的目的(同14)。
20、我们回到IDD_DlgStuInfo对话框,选中对话框,右击选择“事件…”,在弹出的事件句柄中选择“NM_CLICK”,如下图所示。
void CDlgStuInfo::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here m_listSelPos = m_listCtrl.GetSelectionMark(); //获取当前被选行的信息,传送到编辑对话框中去 *pResult = 0; }
21、添加代码如下(类似16)。
void CDlgStuInfo::OnBTNModi() { // TODO: Add your control notification handler code here CDlg_StuInfoModi dlg_stuInfoModi; dlg_stuInfoModi.m_sNo = m_listCtrl.GetItemText(m_listSelPos,0); //获取当前记录的显示的文本 dlg_stuInfoModi.m_sName = m_listCtrl.GetItemText(m_listSelPos,1); dlg_stuInfoModi.m_sSex = m_listCtrl.GetItemText(m_listSelPos,2); dlg_stuInfoModi.m_sDept = m_listCtrl.GetItemText(m_listSelPos,3); dlg_stuInfoModi.m_sClass = m_listCtrl.GetItemText(m_listSelPos,4); if(IDOK == dlg_stuInfoModi.DoModal()) { //把新数据传送给浏览对话框,实现信息的修改 UpdateData(true); //把对话框中的信息更新到内存中去 m_listCtrl.SetItemText(m_listSelPos,0,dlg_stuInfoModi.m_sNo); m_listCtrl.SetItemText(m_listSelPos,1,dlg_stuInfoModi.m_sName); m_listCtrl.SetItemText(m_listSelPos,2,dlg_stuInfoModi.m_sSex); m_listCtrl.SetItemText(m_listSelPos,3,dlg_stuInfoModi.m_sDept); m_listCtrl.SetItemText(m_listSelPos,4,dlg_stuInfoModi.m_sClass); } }
22、“删除记录”类似,不再叙述。这里仅将该部分代码附上,如下。
void CDlgStuInfo::OnBTNDele() { // TODO: Add your control notification handler code here CString str; str.Format("确认删除第 %d 行",m_listSelPos + 1); if(IDYES == AfxMessageBox(str,MB_YESNO|MB_ICONQUESTION)) { m_listCtrl.DeleteItem(m_listSelPos); } }
三、执行结果
1、编译运行后,点击“学生档案信息”,界面如下图所示。
2、添加记录,如下图所示。
3、修改记录,如下图所示。
4、删除记录,如下图所示。
-
易语言画板绘制列表框
2020-07-22 17:00:46画板绘制列表框,画控件,画板拦截,图片尺寸转换,取文本占用像素,宽度至文本长度,画滚动条,置个人资料,被选中高度,未选中高度,被选中颜色,对接,画头像,画星星,画月亮,画太阳,画好友,画组,记录,添加好友到组,添加组到组... -
MFC界面编程基础(13):列表框和组合框
2018-12-27 20:09:17列表框和组合框 列表框是CListBox类的对象,组合框是CComboBox的对象。 列表框 属性设置 列表框的重要属性有: Selection 该属性决定用户的选择方式,缺省值为 Single 。属性值有: ①:Single ── 单项...上一篇:MFC界面编程基础(12):组框、单选按钮和复选框 下一篇:MFC界面编程基础(14):滚动条 列表框和组合框
列表框是CListBox类的对象,组合框是CComboBox的对象。
列表框
- 属性设置
列表框的重要属性有: - Selection
该属性决定用户的选择方式,缺省值为 Single 。属性值有:
①:Single ── 单项选择
②:Multiple ── 多项选择,但是忽略 Ctrl 和 Alt 键。
③:Extended ── 允许使用 Ctrl 和 Alt 进行多项选择
④:None ── 禁止选择
- Sort
当该属性被设置为True后,列表框中的选项按字母顺序排列。
- 常用成员函数
- 添加项目
格式: int AddString( LPCTSTR lpszItem );
例如:语句 m_l. AddString(" 陈蓉 ") ; 把“陈蓉”添加到了列表框 m_l 中。 - 删除项目
格式: int DeleteString( UINT nIndex );
说明: nIndex 表示被删除项目在列表框中的位置,对于第一个选项nIndex应为 0 。
例如:语句 m_l. DeleteString (4) ;删除列表框中的第 5 个项目。 - 获取当前被选定的项目的序号
格式: int GetCurSel( ) const;
例如:语句int I=m_l.GetCurSel(); 将使I 获得 m_l 列表框中当前选定的项目的序号。 - 获取列表框中指定的项目
格式 1 : int GetText( int nIndex, LPTSTR lpszBuffer ) const;
格式 2 : void GetText( int nIndex, CString& rString ) const;
说明 :将列表框中第 nIndex 个选项的文本送到 lpszBuffer 或 rString 中。
例如:假定有说明语句 char s1[20]; CString s2;则语句 m_l.GetText(4, s1); 和 m_l. GetText(4, s2); 把第 5 项内容分别送到 s1 和 s2 中。
【例】
编写一个能对列表框进行项目添加、修改和删除操作的应用程序,如图所示。“添加”按钮的功能是将文本框中的内容添加到列表框,“删除”按钮的功能是删除列表框中选定的选项。如果要修改列表框,则首先选定选项,然后单击“修改”按钮,所选的选项显示在文本框中,当在文本框中修改完之后再单击“修改确定”按钮更新列表框。
- 界面设计
首先创建一个对话框应用程序框架,然后放置按钮。列表框和命令按钮按表连接变量,其余控件不需要连接变量。
- 初始化
列表框的选项在对话框的初始化函数中用 AddString 函数添加。
BOOL CTESTDlg::OnInitDialog() { ┆ // TODO: Add extra initialization here m_l.AddString(" 大学计算机基础 "); m_l.AddString("C/C++ 程序设计 "); m_l.AddString("VB 程序设计 "); m_l.AddString(" 软件技术基础 "); ┆ }
- 消息处理函数
………………………………………………………… void CTESTDlg::OnButton1() // 选择“添加”后执行的函数 { // TODO: Add your control notification handler code here UpdateData(TRUE); m_l.AddString(m_e); m_e=""; UpdateData(FALSE); } ………………………………………………………… void CTESTDlg::OnButton2() // 选择“删除”后执行的函数 { // TODO: Add your control notification handler code here int n=m_l.GetCurSel(); m_l.DeleteString(n); } ………………………………………………………… void CTESTDlg::OnButton3() // 选择“修改”后执行的函数 { // 将选定的项目送编辑框供修改 // TODO: Add your control notification handler code here CString s; int n=m_l.GetCurSel(); m_l.GetText(n,s); m_e=s; UpdateData(FALSE); } ………………………………………………………… void CTESTDlg::OnButton4() // 选择“确定修改”后执行的函数 { // 将修改后的项目送回列表框中,替换原项目,实现修改。 // TODO: Add your control notification handler code here UpdateData(TRUE); int n=m_l.GetCurSel(); m_l.DeleteString(n); m_l.InsertString(n,m_e); m_e=""; UpdateData(FALSE); } …………………………………………………………
组合框
-
属性设置
-
种类( Type )
该属性用于指定组合框的类型,共有三个选择: Simple 、 Dropdown 和 Droplist ,默认值为 Dropdown 。
-
键入列表框项( Enter listbox items )
在列表框的属性窗口有一个“ Data ”属性,这是在设计阶段输入选项的地方,如图所示。输入每一项都需要用分号分隔
-
常用成员函数
编辑框和列表框的成员函数几乎都可以用于组合框,但是列表框的成员函数 GetText() 在组合框中的是 GetLBText() 。 -
int GetLBText( int nIndex, LPTSTR lpszText ) const;
-
void GetLBText( int nIndex, CString& rString ) const;
说明 :使用 GetLBText 函数可以将组合框中的第 nIndex 个项目的文本送入 lpszText 或 rString 中。 -
组合框发出的消息
-
CBN_SELECTCHANGE :组合框的列表框中的选项改变时发送。
-
CBN_EDITCHANGE :组合框的编辑框中文本改变时发出。
【例】
设计一个如图所示的对话框。如果单击“确定”按钮,则用 MessageBox 显示如图所示的信息框。
- 首先创建一个对话框程序框架,然后放置各控件,进行属性设置,组合框的选项在设计阶段直接输入,按表连接变量,其余控件不需要连接变量。
- 消息处理函数
void CTESTDlg::OnButton1() { // TODO: Add your control notification handler code here UpdateData(TRUE); CString s; s=" 品牌 :"; s=s+m_c; s=s+"\n"; s=s+" 数量 :"; s=s+m_e; MessageBox(s); }
上一篇:MFC界面编程基础(12):组框、单选按钮和复选框 下一篇:MFC界面编程基础(14):滚动条 - 属性设置
-
mfc 列表框行颜色设置方法
2019-09-11 14:04:15指定改变CListCtrl中某一行的颜色,比如说刚添加进去的一行,让它改变颜色,这样记录多了,容易看到自己刚刚加入的行,方便操作可查看,也可以让添加和...新建一个mfc 对话框工程,并添加列表框控件,添加一些数据...指定改变CListCtrl中某一行的颜色,比如说刚添加进去的一行,让它改变颜色,这样记录多了,容易看到自己刚刚加入的行,方便操作可查看,也可以让添加和修改的记录显示不一样的颜色,方便的多了,VC自带的没有这种功能。
虽然说自带没有这个功能,但可以用NU_CUSTOMDRAW
我的环境是vc2010, 听说vc6 没有,需要手动添加。
新建一个mfc 对话框工程,并添加列表框控件,添加一些数据,让他能正常显示一个列表框的表格。这个时候还不能设置行颜色。
添加改变颜色的事件
打开MFC Class Wizard ,用如下方式添加列表框(我的是IDC_LIST2)的NU_CUSTOMDRAW事件,
然后把代码加入如下:
void CListCtrlTestDlg::OnCustomdrawList2(NMHDR *pNMHDR, LRESULT *pResult) { //LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR); // TODO: Add your control notification handler code here //pNMCD->clrTextBk = RGB(51, 153, 255); //pNMCD->clrText = RGB(255, 255, 255); //*pResult = 0; LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR; *pResult = 0; //return ; switch(lplvcd->nmcd.dwDrawStage) { case CDDS_PREPAINT : *pResult = CDRF_NOTIFYITEMDRAW; break; case CDDS_ITEMPREPAINT: *pResult =CDRF_NOTIFYSUBITEMDRAW; break; case CDDS_SUBITEM | CDDS_ITEMPREPAINT: if(lplvcd->nmcd.dwItemSpec==0) { lplvcd->clrTextBk = RGB(255,0,0); //红色 } if(lplvcd->nmcd.dwItemSpec==1) { lplvcd->clrTextBk = RGB(0,255,0); //绿色 } if(lplvcd->nmcd.dwItemSpec==2) { lplvcd->clrTextBk = RGB(0,0,255); //蓝色 } if(lplvcd->nmcd.dwItemSpec==3) { lplvcd->clrTextBk = RGB(255,255,0); //黄色 } if(lplvcd->nmcd.dwItemSpec==4) { lplvcd->clrTextBk = RGB(160,32,240); //紫色 } if(lplvcd->nmcd.dwItemSpec==5) { lplvcd->clrTextBk = RGB(0,255,255); //青色 } if(lplvcd->nmcd.dwItemSpec==6) { lplvcd->clrTextBk = RGB(255,97,0); //橙色 } if(lplvcd->nmcd.dwItemSpec==7) { lplvcd->clrTextBk = RGB(0,255,127); //嫩绿色 } if((lplvcd->nmcd.dwItemSpec)>7) { lplvcd->clrTextBk = RGB(0,0,0); //黑色 } *pResult = CDRF_NEWFONT; break; } }
编译运行结果如下:
代码解说:
开始我看到一文,事件产生的代码如下:
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: Add your control notification handler code here后面好像会报错,改为文章代码才好,这个代码是别人用vc6 做的。
更多属性可以看微软的内容介绍:
这个代码只是设置0,1,2,3,4,5,6,7行的颜色,其他行都为黑色。当然只是演示功能的需要。
这里customdraw有几个阶段。
switch(lplvcd->nmcd.dwDrawStage) 就是判断阶段,只是在
case CDDS_SUBITEM | CDDS_ITEMPREPAINT: 才设置背景颜色。
其他阶段不要做。
-
列表框控件(listbox)消息
2017-03-15 10:21:37列表框主要用于输入,它允许用户从所列出的表项中进行单项或多项选择,被选择的项呈高亮度显示... 应用程序用CreateWindowEx创建列表框控件时,可根据控件的用途在下表中选择部份常数来设定其风格属性(style)。 常 -
MFC中创建列表框&&及添加表格的方法
2014-06-23 21:50:58第一步:向界面中添加“列表框控件”,用鼠标拖进来 第二步:设置列表框的属性,在样式中,选择“报告“----默认情况下是图标,这样是不会显示表格的,所以这里需要选择报告形式 第三步:创建列表框... -
element-ui添加复选框并把选中的列表中的数据传入后台
2020-05-28 16:49:10"> <el-table-column type="selection" header-align="center" align="center" width="50" :selectable="selectable"></el-table-column> </el-table> 处理函数 //把选中的那条记录的name属性放到namelist中 ... -
6.5(二) 窗体中控件及其应用添加控件(上)
2021-12-09 14:44:48在窗体上添加控件后,往往还需要在设计视图中,对所添加的控件属性进行某些设置。 (1)添加文本框 例 添加文本框控件,用来分别显示当前系统日期、显示密码、显示当前记录的汇总。操作步骤如下: 1)打开数据库,... -
vue搜索框(包含存储和删除历史记录以及搜索建议列表)
2019-08-31 19:05:54基于vue3的搜索框,包含存储和删除历史记录以及搜索建议列表,用户可以在配置中选择是否需要历史记录。 展示 下载 npm install bm_search_input -S 引入 import bm_search_input from 'bm_search_input' Vue.... -
【python学习】-用循环在列表中添加元素(避免最后列表元素都是只跟最后一个添加的一样)
2021-10-03 19:48:19用循环在列表中添加元素for循环+将数据存储在列表方法一方法二 最近在进行数据处理,需要通过计算得到数据,再将数据用来绘图,其中还要取出个别数据进行处理。因此数据与数据之间存在嵌套,为了更好地调用数据,... -
CMFCToolBar 添加下拉列表框
2013-01-25 20:54:041、经过一个下午的各种纠结和不放弃,最终还是捣鼓出来了这个东西,记录下来,以备查看。 在网上查到了两种方法呢,然后自己试验了下,在vs2010下都可以正确运行。 第一种方法:是来自于 这里:... -
报表设计及列表框应用
2005-12-02 10:36:26<BR> 3)如何删除列表框中的记录 <BR>2、报表设计 <BR> 1)如何设计多列报表 <BR> 2)如何做分类汇总的报表 下面是窗体上一些控件作用的说明: <BR>"材料类别":所有材料型的列表 <BR>"已选材料":所有对应当前... -
MFC可编辑列表框控件功能实现
2016-08-28 21:29:10本文介绍了MFC中列表框控件扩展方法:可编辑功能的实现。 -
Delphi列表框组件(TListBox)详解
2016-09-02 14:36:06列表框组件(TListBox) 此组件为一个标准的Windows 列表框组件,它用于显示一系列的列表,用户可以选择、加入、删除或修改其中的项目。 ...在Windows 应用程序中,经常要用到...列表框能够在一个可翻滚的窗口中列出 -
Vue学习记录--实现列表的添加删除以及查找功能
2019-02-17 18:36:031.添加新品牌 2.删除品牌 3.根据条件筛选品牌 1.x 版本中的filterBy指令,在2.x中已经被废除: filterBy - 指令 &lt;tr v-for="item in list | filterBy searchName in 'name'"... -
vue中checkbox复选框数据回显,给复选框添加选中操作
2020-03-19 17:44:03vue中checkbox复选框数据回显,给复选框添加选中操作 记性不好,所以记录下来也供自己今后查看 前端html及js 主要用到的就是vue里面的v-model指令。 本质上<input :value="test" />就是<input @input=... -
【React】自定义带历史记录的搜索框
2021-08-06 16:05:08* @desc 自定义带历史记录的搜索框 * @author wangjun * @date 2021-07-23 */ import React, { Component } from 'react'; import { Input, Button } from 'antd'; import styles from './index.l -
易语言组合框列表项目加载EDB数据库及数据源数据列
2020-07-08 09:11:46本课视频录制了易语言组合框列表项目加载EDB数据库和组合框-数据源数据列使用。 视频链接: 79 组合框列表项目加载EDB数据库 .版本 2 .支持库 spec .程序集 窗口程序集_启动窗口 .子程序 __启动窗口_... -
使用微信小程序做一个简易的下拉框,无动画效果,纯原生写法(下拉列表框)
2021-05-15 13:18:44最近在开发的时候,需要使用下拉的效果,但是之前并没有进行书写过,今天做一个简单的demo,来记录一下微信小程序开发的下拉框效果。 微信小程序和jquery最大的区别就是是否操作dom, 微信小程序无需操作dom,可以... -
Excel VBA ListBox列表框添加和删除问题
2008-04-04 23:30:00Excel VBA 窗体中有两个ListBox,需要做的操作:从一个列表框中选择列表值向另一个列表添加值,以及从已选择的值中删除选择的列表值。 例:ListBox列表 被选框lbData, 选择框lbSelectedData,列表框中显示三列。-... -
列表框、组合框
2010-04-08 15:54:00如果项目总数超过了列表框可显示的项目数,列表框会自动添加滚动条,可以方便用户以滚动的方式来选择列表框列表框的常用属性·listcount属性:用于返回列表框中的所有选项的个数,该属性只能在程序代码中调用和设置... -
关于js动态向下拉列表中添加数据
2015-09-25 14:00:22至于为什么是两层的括号,外层就不说了,因为是evel函数的,里面的自己看别人的记录就是为了"隔离的",因为json串是{}这样的形式,在evel里就被看成是 开始和结束了,而且里面是空的:eg: alert(eval("{}"); // ... -
MyBatis-Plus入门案例:查询数据库中所有记录
2021-04-01 10:21:26文章目录MyBatis-Plus入门案例:查询数据库中所有记录步骤1:创建数据库和表步骤2:创建springboot工程并引入依赖(1) 创建springboot工程(2) 创建User实体类(3) 引入mybatis-plus和mysql的依赖步骤4:配置数据库信.