为List Control控件添加可编辑功能
2014-11-26 09:17
417 查看
整体的思路,就是利用消息传输机制,继承CListCtrl类,然后添加OnLButtonDown、OnLButtonDblClk以及esc和回车键的消息响应
#if !defined(AFX_MYLISTCTRL_H__7FDA9396_E298_4F10_B778_EB8ADFD82F9A__INCLUDED_) #define AFX_MYLISTCTRL_H__7FDA9396_E298_4F10_B778_EB8ADFD82F9A__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // MyListCtrl.h : header file // #define IDC_MY_LIST_EDITBOX 0xffff #define MLSM_ITEMCHANGED (WM_USER + 200) ///////////////////////////////////////////////////////////////////////////// // CMyListCtrl window class CMyListCtrl : public CListCtrl { // Construction public: CMyListCtrl(); // Attributes public: // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CMyListCtrl) public: virtual BOOL PreTranslateMessage(MSG* pMsg); //}}AFX_VIRTUAL // Implementation public: virtual ~CMyListCtrl(); // Generated message map functions protected: CEdit m_EditItem; int m_Row; int m_Col; //{{AFX_MSG(CMyListCtrl) afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_MYLISTCTRL_H__7FDA9396_E298_4F10_B778_EB8ADFD82F9A__INCLUDED_)
// MyListCtrl.cpp : implementation file // #include "stdafx.h" #include "MyListCtrl.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMyListCtrl CMyListCtrl::CMyListCtrl() { m_Col = m_Row = -1; } CMyListCtrl::~CMyListCtrl() { m_EditItem.DestroyWindow(); } BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl) //{{AFX_MSG_MAP(CMyListCtrl) ON_WM_LBUTTONDOWN() ON_WM_LBUTTONDBLCLK() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMyListCtrl message handlers void CMyListCtrl::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if(m_EditItem.m_hWnd != NULL) { m_EditItem.ShowWindow(0); if(m_Row != -1) { CString ItemText; m_EditItem.GetWindowText(ItemText); this->SetItemText(m_Row, m_Col, ItemText); ::PostMessage(GetParent()->m_hWnd, MLSM_ITEMCHANGED, (WPARAM)MAKELONG(m_Row, m_Col), (LPARAM)this->m_hWnd); } } m_Col = m_Row = -1; CListCtrl::OnLButtonDown(nFlags, point); } void CMyListCtrl::OnLButtonDblClk(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default LVHITTESTINFO hi; hi.pt = point; if(SubItemHitTest(&hi) != -1 ) { m_Row = hi.iItem; m_Col = hi.iSubItem; if(m_EditItem.m_hWnd == NULL) { RECT rect; rect.left = rect.top = 0; rect.bottom = 20; rect.right = 100; m_EditItem.Create(WS_CHILD | ES_LEFT | WS_BORDER | ES_AUTOHSCROLL | ES_WANTRETURN | ES_MULTILINE, rect, this, IDC_MY_LIST_EDITBOX); m_EditItem.SetFont(this->GetFont(), FALSE); } CRect rect; GetSubItemRect(hi.iItem, hi.iSubItem, LVIR_BOUNDS, rect); m_EditItem.SetWindowText(this->GetItemText(hi.iItem, hi.iSubItem)); m_EditItem.MoveWindow(&rect, TRUE); m_EditItem.ShowWindow(1); } CListCtrl::OnLButtonDblClk(nFlags, point); } BOOL CMyListCtrl::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class BOOL bHandledMsg = FALSE; if(pMsg->hwnd == m_EditItem.m_hWnd) { switch (pMsg->message) { case WM_KEYDOWN: { switch (pMsg->wParam) { case VK_RETURN://回车 if(m_Row != -1) { CString ItemText; m_EditItem.GetWindowText(ItemText); this->SetItemText(m_Row, m_Col, ItemText); ::PostMessage(GetParent()->m_hWnd, MLSM_ITEMCHANGED, (WPARAM)MAKELONG(m_Row, m_Col), (LPARAM)this->m_hWnd); } case VK_ESCAPE://ESC键 m_EditItem.ShowWindow(0); m_Col = m_Row = -1; bHandledMsg = TRUE; break; default: break; } }// case WM_KEYDOWN break; default: break; }// switch(pMsg->message) }// if(pMsg->hwnd... return (bHandledMsg ? TRUE : CListCtrl::PreTranslateMessage(pMsg)); }
相关文章推荐
- MFC List Control 控件添加单元格编辑和单元格下拉列表项
- MFC List Control 控件添加单元格编辑和单元格下拉列表项
- MFC List Control控件添加单元格编辑和单元格下拉列表项以适用于数据库相关操作
- MFC 的List Control控件实现可编辑
- MFC 的List Control控件实现可编辑
- MFC入门学习之控件(4)标签控件List Control的添加和使用(上)
- 解决Win32 SDK编程添加list control控件程序无法运行的问题
- 为list控件增加排序功能,并添加header排序图标
- DevExpress GridControl控件行内新增、编辑、删除添加选择框
- 对tabcontrol控件增强,添加关闭按钮功能、呼吸灯标签闪烁功能、类QQ消息数量标签提示TIP
- DevExpress GridControl控件行内新增、编辑、删除添加选择框(转)
- altas(ajax)控件(十四):为下拉控件添加快捷键查找功能的ListSearchExtender
- 解决Win32 SDK编程添加list control控件程序无法运行的问题 . 和如何画进度条
- altas(ajax)控件(十四):为下拉控件添加快捷键查找功能的ListSearchExtender
- List Control控件item的可编辑操作实现
- 关于DevExpress.XtraTreeList.TreeList控件的使用——给TreeList添加RepositoryItem以实现文本编辑功能
- altas(ajax)控件(十四):为下拉控件添加快捷键查找功能的ListSearchExtender
- WIN SDK 添加Tab控件 List Control with CheckBox
- 重写QLineEdit,实现编辑框内添加删除按钮的功能(随时把控件Move到一个地方,然后show就可以了,这是万能的办法)
- 【MFC-12】VS2010/MFC之列表框控件动态编辑(List Control Edit)