资源简介
扩展了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
相关资源
- 基于MFC的TCP调试助手源码95706
- 基于mfc的多线程文件传输
- MFC数字钟(基于VC6.0)
- VC++MFC小游戏实例教程(实例)+MFC类库
- ChartCtrl控件库(可在VS2019中使用)
- 商品库存管理系统 C++ MFC
- mfc 调用redis
- MFC视频播放器源码(支持avi/wma/mp3等格
- mfc绘图大全(画直线、矩形、椭圆)
- MFC控件重绘
- hook,捕获所有案件,查找所有窗口,
- (学习)VS2010之MFC入门到精通教程
- MFC文档_视图_框架_模板结构体系深入
- 简单员工管理系统(适合初学MFC)
- MFC五子棋游戏
- MFC UDP编程
- MFC的异步网络通讯应用程序
- C++MFC模块讲解,黑发程序员课程整理
- 一个简单而强大的基于MFC的web server源
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- MFCaccess.rar
- VC++MFC课程设计的学生成绩管理系统
- MFC 日历控件 万年历 Calendar自绘
- CrystalDiskInfo-HDD/SSD硬盘信息,SMART信息
- MFC自定义界面HUI,高效简单,含详细
- 仿射密码-Affine cipher
- c++MFC车牌自动识别定位,只能定位和
- mfc+sql 酒店客房管理系统
- 基于图割的图像分割OpenCV+MFC实现
- MFC绘制Bezier曲线B样条曲线曲线拟合
评论
共有 条评论