• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: C/C++
  • 标签: ClistCtrl  MFC  可编辑  

资源简介

扩展了MFC列表框控件功能,使得列表框控件中的值可以编辑

资源截图

代码片段和文件信息

// EditListCtrl.cpp : 实现文件
#include “stdafx.h“
#include “AltairNetworkLockTools.h“
#include “EditListCtrl.h“

// CEditListCtrl
IMPLEMENT_DYNAMIC(CEditListCtrl CListCtrl)
CEditListCtrl::CEditListCtrl()
{
m_edit = NULL;//编辑框的指针,初始为NULL,表示无编辑框
m_isedit = NULL;//标志哪些列可编辑的标志维数组,初始为NULL
m_item = -1;//当前编辑的行号,初值为-1
m_subitem = -1;//当前编辑的列号,初值为-1
}

CEditListCtrl::~CEditListCtrl()
{

}

BEGIN_MESSAGE_MAP(CEditListCtrl CListCtrl)
ON_NOTIFY_REFLECT(NM_CLICK &CEditListCtrl::OnNMClick)
ON_NOTIFY_REFLECT(NM_SETFOCUS &CEditListCtrl::OnNMSetfocus)
ON_WM_HSCROLL()
ON_WM_VSCROLL()
ON_WM_DESTROY()
END_MESSAGE_MAP()

// CEditListCtrl 消息处理程序
void CEditListCtrl::OnNMClick(NMHDR *pNMHDR LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
if(!m_isedit) return;
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(!m_edit)
{
m_subitem=pNMListView->iSubItem;
if(pNMListView->iItem!=m_item)
{
m_item=pNMListView->iItem;//标志被单击的项目
return;
}
}
if(!m_isedit[m_subitem])//若当前列不允许直接编辑则返回 
return;
RECT m_itemrectm_r;
GetItemRect(m_item &m_itemrect2);
//m_itemrect.right+=30;
GetItemRect(0 &m_r2);
//m_r.right+=30;
int m_height=m_itemrect.bottom -m_itemrect.top ;
int x=m_r.left y=m_r.topcx=0cy=m_height;//(xycxcy)为编辑框显示的位置
if (m_item==0)
{
cy+=20;
}
for(int i=0;i< m_item;i++)
{
y+=m_height;
    cy=y+m_height;
}
for(int t=0;t {
x+=GetColumnWidth(t);
    cx=x+GetColumnWidth(t);
}
if(m_edit)//若编辑框已存在
{
CString s1;
s1.Format (“%d %d %d %d“xycxcy);
m_edit->MoveWindow(xycx-xcy-y);//移动到当前子项目的位置
Invalidate();//刷新屏幕。
return;
}
//若编辑框不存在则创建编辑框并在当前子项目处显示编辑框。
CRect rect(xycxcy);
m_edit=new CEdit();
m_edit->Create (WS_CHILD|WS_VISIBLE|WS_BORDERrectthisID_LISTEDIT);
CString str=GetItemText (pNMListView->iItempNMListView->iSubItem);
m_edit->UpdateData(0);
m_edit->SetWindowText(str); 
DWORD dwSel = m_edit->GetSel();   
m_edit->SetSel(HIWORD(dwSel) -1);
//显示编辑框
m_edit->ShowWindow(SW_SHOW);
m_edit->SetFocus();

*pResult = 0;
}

void CEditListCtrl::OnNMSetfocus(NMHDR *pNMHDR LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
if(m_edit)
{//将编辑框中的数据写回对应的子项目中
UpdateData( );
CString str;
m_edit->GetWindowText(str);
SetItemText(m_itemm_subitemstr);
delete m_edit;
m_edit=NULL;
}
*pResult = 0;
}

void CEditListCtrl::OnHScroll(UINT nSBCode UINT nPos CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
LRESULT* pResult=new LRESULT;
if(m_edit)
{
OnNMClick((NMHDR*)thispResult) ;
}
CListCtrl::OnHScroll(nSBCode nPos pScrollBar);
}

void CEditListCtrl::OnVScroll(UINT nSBCode UINT nPos CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//垂直滚动时移动已显示的编辑框
LRESULT* pResult=new LRESULT;
if(m_edit)
{
RECT m_itemrectm_headrect;
GetItemRect(m_item &m_itemrec

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-08-27 19:09  EditListCtrl\
     文件        4019  2016-08-27 18:56  EditListCtrl\EditListCtrl.cpp
     文件         773  2016-08-27 17:04  EditListCtrl\EditListCtrl.h

评论

共有 条评论