精华内容
下载资源
问答
  • 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
  • Quote:我正在尝试将超过百万条记录追加到listBox。...没有解决方案可以在列表框中快速添加一百万行。您必须找到另一种满足需求的方法。想想在Facebook或google上搜索时追加的内容:您开始输入内容...
  • 本例程讲解了如何快速将数据库的数据快速添加到超级列表框
  • VC6.0 MFC 列表框 列表控件 添加 修改 删除

    千次阅读 多人点赞 2020-06-28 15:46:24
    2、添加记录,如下图所示。 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、删除记录,如下图所示。
    在这里插入图片描述

    展开全文
  • 画板绘制列表框,画控件,画板拦截,图片尺寸转换,取文本占用像素,宽度至文本长度,画滚动条,置个人资料,被选中高度,未选中高度,被选中颜色,对接,画头像,画星星,画月亮,画太阳,画好友,画组,记录,添加好友到组,添加组到组...
  • 列表框和组合框 列表框是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 做的。

    更多属性可以看微软的内容介绍:

    https://docs.microsoft.com/zh-cn/windows/win32/api/commctrl/ns-commctrl-nmlvcustomdraw?redirectedfrom=MSDN

    这个代码只是设置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
    第一步:向界面中添加列表框控件”,用鼠标拖进来   第二步:设置列表框的属性,在样式,选择“报告“----默认情况下是图标,这样是不会显示表格的,所以这里需要选择报告形式 第三步:创建列表框...
  • "> <el-table-column type="selection" header-align="center" align="center" width="50" :selectable="selectable"></el-table-column> </el-table> 处理函数 //把选中的那条记录的name属性放到namelist ...
  • 在窗体上添加控件后,往往还需要在设计视图,对所添加的控件属性进行某些设置。 (1)添加文本框 例 添加文本框控件,用来分别显示当前系统日期、显示密码、显示当前记录的汇总。操作步骤如下: 1)打开数据库,...
  • 基于vue3的搜索,包含存储和删除历史记录以及搜索建议列表,用户可以在配置选择是否需要历史记录。 展示 下载 npm install bm_search_input -S 引入 import bm_search_input from 'bm_search_input' Vue....
  • 用循环在列表中添加元素for循环+将数据存储在列表方法一方法二 最近在进行数据处理,需要通过计算得到数据,再将数据用来绘图,其中还要取出个别数据进行处理。因此数据与数据之间存在嵌套,为了更好地调用数据,...
  • CMFCToolBar 添加下拉列表框

    千次阅读 2013-01-25 20:54:04
    1、经过一个下午的各种纠结和不放弃,最终还是捣鼓出来了这个东西,记录下来,以备查看。 在网上查到了两种方法呢,然后自己试验了下,在vs2010下都可以正确运行。 第一种方法:是来自于 这里:...
  • <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 应用程序,经常要用到...列表框能够在一个可翻滚的窗口列出
  • 1.添加新品牌 2.删除品牌 3.根据条件筛选品牌 1.x 版本的filterBy指令,在2.x已经被废除: filterBy - 指令 &amp;lt;tr v-for=&quot;item in list | filterBy searchName in 'name'&quot...
  • vuecheckbox复选框数据回显,给复选框添加选中操作 记性不好,所以记录下来也供自己今后查看 前端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数据库和组合-数据源数据列使用。 视频链接: 79 组合框列表项目加载EDB数据库 .版本 2 .支持库 spec .程序集 窗口程序集_启动窗口 .子程序 __启动窗口_...
  • 最近在开发的时候,需要使用下拉的效果,但是之前并没有进行书写过,今天做一个简单的demo,来记录一下微信小程序开发的下拉框效果。 微信小程序和jquery最大的区别就是是否操作dom, 微信小程序无需操作dom,可以...
  • Excel VBA ListBox列表框添加和删除问题

    万次阅读 2008-04-04 23:30:00
    Excel 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入门案例:查询数据库所有记录步骤1:创建数据库和表步骤2:创建springboot工程并引入依赖(1) 创建springboot工程(2) 创建User实体类(3) 引入mybatis-plus和mysql的依赖步骤4:配置数据库信.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 204,532
精华内容 81,812
关键字:

列表框中添加记录