MFC中ListBox文本数据选择

时间: 2024-05-02 11:18:46 浏览: 12
在MFC中,ListBox控件可以通过以下方法选择文本数据: 1. 使用SetCurSel方法选择文本数据:该方法可以根据ListBox中的索引值来选择文本数据。例如,要选择ListBox中的第三个文本数据,可以使用以下代码: ``` m_ListBox.SetCurSel(2); ``` 2. 使用SelectString方法选择文本数据:该方法可以根据文本数据的值来选择文本数据。例如,要选择ListBox中的文本数据“Apple”,可以使用以下代码: ``` m_ListBox.SelectString(-1, _T("Apple")); ``` 其中,第一个参数表示从哪个索引开始搜索,-1表示从第一个索引开始搜索;第二个参数表示要选择的文本数据的值。 3. 使用SetSel方法选择文本数据:该方法可以根据文本数据在ListBox中的位置来选择文本数据。例如,要选择ListBox中的第二个文本数据,可以使用以下代码: ``` m_ListBox.SetSel(1, TRUE); ``` 其中,第一个参数表示要选择的文本数据在ListBox中的位置,从0开始计数;第二个参数表示选择该文本数据。
相关问题

MFC中,实现拖拽式复制对话框上的Listbox的文本数据功能

1. 在对话框资源中添加一个Listbox控件,并设置好ID和属性。 2. 在类视图中添加成员变量,将Listbox控件变量类型设置为CListBox,如下所示: ``` CListBox m_lstData; ``` 3. 在OnInitDialog函数中,进行Listbox控件的初始化,如下所示: ``` m_lstData.SubclassDlgItem(IDC_LIST_DATA, this); ``` 4. 实现拖拽操作,可以在Listbox控件的OnLButtonDown和OnMouseMove函数中实现,如下所示: ``` void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point) { // 获取选中的项 int nIndex = m_lstData.ItemFromPoint(point); // 如果没有选中项,则返回 if (nIndex == LB_ERR) return; // 设置拖拽数据 COleDataSource* pDataSource = new COleDataSource(); HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, 1024); char* pData = (char*)GlobalLock(hMem); m_lstData.GetText(nIndex, pData); GlobalUnlock(hMem); pDataSource->CacheGlobalData(CF_TEXT, hMem); // 开始拖拽操作 DROPEFFECT dropEffect = pDataSource->DoDragDrop(DROPEFFECT_COPY); // 释放资源 pDataSource->Empty(); delete pDataSource; CDialogEx::OnLButtonDown(nFlags, point); } void CMyDlg::OnMouseMove(UINT nFlags, CPoint point) { // 如果鼠标左键没有按下,则返回 if (!(nFlags & MK_LBUTTON)) return; // 设置拖拽效果 COleDropSource* pDropSource = new COleDropSource(); DROPEFFECT dropEffect = pDropSource->StartDrag(); // 释放资源 delete pDropSource; CDialogEx::OnMouseMove(nFlags, point); } ``` 5. 实现拖拽放置操作,可以在Listbox控件的OnDrop函数中实现,如下所示: ``` DROPEFFECT CMyDlg::OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) { // 如果数据对象不包含文本,则返回 if (!pDataObject->IsDataAvailable(CF_TEXT)) return DROPEFFECT_NONE; return DROPEFFECT_COPY; } BOOL CMyDlg::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point) { // 如果数据对象不包含文本,则返回 if (!pDataObject->IsDataAvailable(CF_TEXT)) return FALSE; // 获取文本数据 HGLOBAL hMem = pDataObject->GetGlobalData(CF_TEXT); char* pData = (char*)GlobalLock(hMem); CString strData(pData); GlobalUnlock(hMem); // 添加到Listbox控件中 m_lstData.AddString(strData); return TRUE; } ```

鼠标对MFC对话框上的Listbox文本数据进行自由拖拽式复制的详细步骤与详细代码

步骤: 1. 在MFC对话框上添加一个Listbox控件,并设置其属性为可拖放; 2. 在Listbox控件的OnLButtonDown事件中,获取鼠标点击的位置和选中的文本,将其保存到拖放数据中; 3. 在Listbox控件的OnMouseMove事件中,检测鼠标是否移动足够远,如果是,则开始拖放操作; 4. 在Listbox控件的OnDragEnter、OnDragOver、OnDragLeave、OnDrop事件中,实现拖放操作的处理逻辑,包括获取拖放数据、判断是否可以放置、更新拖放效果、完成拖放操作等。 详细代码: 1. 在对话框类的头文件中添加以下代码: ``` class CMyDlg : public CDialogEx { // ... protected: COleDataSource m_dataSource; CString m_strDragText; CPoint m_ptStartDrag; BOOL m_bDragging; // ... }; ``` 2. 在OnInitDialog函数中添加以下代码,设置Listbox控件的拖放属性: ``` m_listBox.ModifyStyle(0, LBS_MULTIPLESEL | LBS_EXTENDEDSEL | LBS_HASSTRINGS | LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_DISABLENOSCROLL | LBS_NOINTEGRALHEIGHT | LBS_SORT | LBS_NOTIFY | WS_BORDER | WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | WS_GROUP | WS_TABSTOP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | LBS_DISABLENOSCROLL | LBS_NOINTEGRALHEIGHT); DROPEFFECT de = DROPEFFECT_MOVE | DROPEFFECT_COPY | DROPEFFECT_LINK; m_listBox.RegisterDragDrop(&m_dataSource, &de); ``` 3. 实现鼠标事件的处理函数: ``` void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point) { // 获取选中的文本 int nIndex = m_listBox.ItemFromPoint(point); if (nIndex != LB_ERR && m_listBox.GetSel(nIndex) > 0) { m_strDragText = m_listBox.GetText(nIndex); m_ptStartDrag = point; m_bDragging = FALSE; } CDialogEx::OnLButtonDown(nFlags, point); } void CMyDlg::OnMouseMove(UINT nFlags, CPoint point) { if (m_strDragText.IsEmpty() || m_bDragging) { return; } if ((abs(point.x - m_ptStartDrag.x) > GetSystemMetrics(SM_CXDRAG)) || (abs(point.y - m_ptStartDrag.y) > GetSystemMetrics(SM_CYDRAG))) { m_bDragging = TRUE; DROPEFFECT de = DROPEFFECT_MOVE | DROPEFFECT_COPY | DROPEFFECT_LINK; m_dataSource.CacheGlobalData(CF_TEXT, m_strDragText.GetBuffer(), m_strDragText.GetLength() + 1); m_dataSource.DoDragDrop(de, NULL, NULL); m_strDragText.Empty(); } CDialogEx::OnMouseMove(nFlags, point); } ``` 4. 实现拖放事件的处理函数: ``` DROPEFFECT CMyDlg::OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) { if (pDataObject->IsDataAvailable(CF_TEXT)) { return DROPEFFECT_COPY; } return DROPEFFECT_NONE; } void CMyDlg::OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) { if (pDataObject->IsDataAvailable(CF_TEXT)) { m_listBox.SetCurSel(m_listBox.ItemFromPoint(point)); m_listBox.SetFocus(); } } void CMyDlg::OnDragLeave() { m_listBox.SetCurSel(-1); } BOOL CMyDlg::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point) { if (pDataObject->IsDataAvailable(CF_TEXT)) { HGLOBAL hData = pDataObject->GetGlobalData(CF_TEXT); if (hData != NULL) { LPCTSTR pszText = (LPCTSTR)GlobalLock(hData); CString strText = pszText; GlobalUnlock(hData); int nIndex = m_listBox.ItemFromPoint(point); if (nIndex != LB_ERR) { m_listBox.InsertString(nIndex, strText); } } } return TRUE; } ```

相关推荐

最新推荐

recommend-type

C#保存listbox中数据到文本文件的方法

主要介绍了C#保存listbox中数据到文本文件的方法,涉及C#操作listbox数据的相关技巧,需要的朋友可以参考下
recommend-type

C#读取文本文件到listbox组件的方法

主要介绍了C#读取文本文件到listbox组件的方法,涉及C#操作文本文件及listbox组件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
recommend-type

C#(WinForm) ComboBox和ListBox添加项及设置默认选择项

主要介绍了C#(WinForm) ComboBox和ListBox添加项及设置默认选择项的的相关资料,需要的朋友可以参考下
recommend-type

listbox拖拽功能实现

(1)通过鼠标可以将一个ListBox控件中的任意一项拖到另一个ListBox控件中,反之亦然;(2)拖动时,鼠标呈手势状,以拖动操作更具形象化。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解答下列问题:S—>S;T|T;T—>a 构造任意项目集规范族,构造LR(0)分析表,并分析a;a

对于这个文法,我们可以构造以下项目集规范族: I0: S -> .S S -> .T T -> .a I1: S -> S. [$ T -> T. [$ I2: S -> T. I3: S -> S.;S S -> S.;T T -> T.;a 其中,点(.)表示已经被扫描过的符号,;$表示输入串的结束符号。 根据项目集规范族,我们可以构造出LR(0)分析表: 状态 | a | $ ---- | - | - I0 | s3| I1 | |acc I2 | | 其中s3表示移进到状态3,acc表示接受。在分析字符串a;a时,我们可以按照以下步骤进行
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依