这个功能也是入门朋友经常遇到的问题,网上也有不少解决方案。不过不是很灵活,在这里,我简单封装了一下,使用更方便。只需要把你申明的CListCtrl变量改成我封装的CEditListCtrl即可。当然要导头文件。不然无法找到类型。 下面是源码 .h文件
下面是.cpp文件
引用方法,在Dlg窗口的DoDataExchange里面把变量CEditListCtrl m_retList和对应的ID关联起来。
效果图:
附:如果自带的满足不了你的需求,可以尝试CGridListCtrlEx,这是个国外开源的一个强大的列表控件,支持下拉列表,图片,URL链接……
#pragma once #define WM_USER_EDIT_END WM_USER + 1001 class CListCtrlEdit : public CEdit { DECLARE_DYNAMIC(CListCtrlEdit) protected: DECLARE_MESSAGE_MAP() public: void OnKillFocus(CWnd* pNewWnd); }; // CEditListCtrl class CEditListCtrl : public CListCtrl { DECLARE_DYNAMIC(CEditListCtrl) public: CEditListCtrl(); virtual ~CEditListCtrl(); protected: DECLARE_MESSAGE_MAP() private: CListCtrlEdit* m_listEdit; int m_Row; int m_Col; public: afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point); afx_msg LRESULT OnEditEnd(WPARAM wParam,LPARAM lParam = FALSE); virtual void PreSubclassWindow(); };
下面是.cpp文件
// EditListCtrl.cpp : 实现文件 // #include "stdafx.h" #include "EditListCtrl.h" // IMPLEMENT_DYNAMIC(CListCtrlEdit, CEdit) BEGIN_MESSAGE_MAP(CListCtrlEdit, CEdit) ON_WM_KILLFOCUS() END_MESSAGE_MAP() void CListCtrlEdit::OnKillFocus(CWnd* pNewWnd) { CWnd* pParent = this->GetParent(); ::PostMessage(pParent->GetSafeHwnd(),WM_USER_EDIT_END,0,0); } // CEditListCtrl IMPLEMENT_DYNAMIC(CEditListCtrl, CListCtrl) CEditListCtrl::CEditListCtrl() : m_Row(0), m_Col(0), m_listEdit(NULL) { } CEditListCtrl::~CEditListCtrl() { if(m_listEdit)delete m_listEdit; } BEGIN_MESSAGE_MAP(CEditListCtrl, CListCtrl) ON_WM_LBUTTONDBLCLK() ON_MESSAGE(WM_USER_EDIT_END,CEditListCtrl::OnEditEnd) END_MESSAGE_MAP() // CEditListCtrl 消息处理程序 void CEditListCtrl::PreSubclassWindow() { // TODO: 在此添加专用代码和/或调用基类 CListCtrl::PreSubclassWindow(); SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); //设置list风格 } void CEditListCtrl::OnLButtonDblClk(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 LVHITTESTINFO lvhti; // 大气象:保存ListCtrl行列信息的结构 lvhti.pt = point; m_Row = CListCtrl::SubItemHitTest(&lvhti); if (m_Row == -1) return; m_Col = lvhti.iSubItem; CRect rect; CListCtrl::GetSubItemRect(m_Row,m_Col,LVIR_LABEL,rect);//获得子项的RECT if (!m_listEdit) { //创建EDIT控件 m_listEdit = new CListCtrlEdit; //转换坐标为列表框中的坐标 BOOL bSuc = m_listEdit->Create(ES_AUTOHSCROLL|WS_CHILD|ES_LEFT|ES_WANTRETURN|WS_BORDER,CRect(0,0,0,0),this,1); if(!bSuc)ASSERT("Edit Create Fail"); CFont tpFont; tpFont.CreateStockObject(DEFAULT_GUI_FONT); m_listEdit->SetFont(&tpFont); tpFont.DeleteObject(); } m_listEdit->MoveWindow(&rect);//移动Edit到RECT坐在的位置; m_listEdit->SetWindowText(GetItemText(m_Row,m_Col));//将该子项中的值放在Edit控件中; m_listEdit->SetFocus();//设置Edit焦点 m_listEdit->ShowCaret();//显示光标 m_listEdit->SetSel(-1);//将光标移动到最后 m_listEdit->ShowWindow(SW_SHOW);//显示Edit控件 CListCtrl::OnLButtonDblClk(nFlags, point); } LRESULT CEditListCtrl::OnEditEnd(WPARAM wParam,LPARAM lParam) { //CString strText; //m_listEdit->GetWindowText(strText); //CListCtrl::SetItemText(m_Row,m_Col,strText); //以上是修改内容代码,要启用先取消注释 m_listEdit->ShowWindow(SW_HIDE); return 0; }
引用方法,在Dlg窗口的DoDataExchange里面把变量CEditListCtrl m_retList和对应的ID关联起来。
效果图:
附:如果自带的满足不了你的需求,可以尝试CGridListCtrlEx,这是个国外开源的一个强大的列表控件,支持下拉列表,图片,URL链接……
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2300
- 用户1336
- 访客10860229
每日一句
True success inspires others to act.
真正的成功是激励他人行动。
真正的成功是激励他人行动。
语法错误: 意外的令牌“标识符”
全面理解Gradle - 定义Task
Motrix全能下载工具 (支持 BT / 磁力链 / 百度网盘)
谷歌Pixel正在开始起飞?
获取ElementUI Table排序后的数据
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is
亲测!虚拟机VirtualBox安装MAC OS 10.12图文教程
华为手机app闪退重启界面清空log日志问题
android ndk开发之asm/page.h: not found
手机屏幕碎了怎么备份操作?
免ROOT实现模拟点击任意位置
新手必看修改DSDT教程
thinkpad t470p装黑苹果系统10.13.2
新会员