资源简介
扩展了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
相关资源
- opengl+mfc画线填充左键单击绘包围线、
- MFC 多线程之间通过消息传递数据
- MFC71D.dll
- 重绘CListCtrl的scrollbarheaderctrl和items的
- mfc渐变进度条
- MFC实现K均值算法
- MFC中嵌入显示opencv图像
- MFC的CheckBox自绘类
- MFC 状态栏进度条
- vs mfc opengl配置教程
- vc++基于MFC实现多媒体播放器源码
- MFC实现的操作系统页面置换FIFO、LRU、
- VC++ 实现定时关机或休眠-MFC 对话框应
- mfc 用对话框打开并读取txt文件的小程
- mfc界面程序入门项目——整合sqlite3数
- MFC特强大CListCtrlEx支持插入控件、设置
- Horiba MFC数字通信协议
- MFC CheckBox 自绘实现
- mfcc源代码
- MFCC的详细介绍PPT
- 基于MFC的串口编程,实现两个计算机
- SMTP客户端程序(mfc实现)
- DES五种加密模式(MFC实现) 源码
- 画图程序最新版 MFC/VC/VC++ 很多功能哦
- C++课设MFC实现人员信息管理系统
- MFC人事管理系统工程文件
- 仿雷电射击游戏基于VC++MFC
- MFC连接SqlServer数据库,并将查询的数
- Mysql数据库语句、增删该查总结及MF
- dirent.h文件,vs2010、vs2013等MFC框架常用
评论
共有 条评论