可编辑文本
来源:互联网 发布:如何开发棋类软件 编辑:程序博客网 时间:2024/05/21 10:28
MFC自带的CListCtrl不可编辑,要使其可编辑,其基本思想是,创建listctrl时,创建一个编辑框(edit)并隐藏, 当我们双击(这里没考虑先选中一项再点击选中行进入编辑的情况,方法类似)listctrl时,在表格某格的上方显示出这个编辑框,在这个编辑框中输入数据,当编辑完成后(即失去焦点)再将编辑框中的东西传到listctrl中。其实现代码如下(*.h,*.cpp复制后可直接使用,如你觉得有帮助,请留下你脚印,谢谢!):
头文件 MyList.h
#pragma once
#include "afxcmn.h"
#include "afxwin.h"
#define ID_EDIT 1001
class CMyEdit :
public CEdit
{
public:
CMyEdit(void);
public:
~CMyEdit(void);
public:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnKillFocus(CWnd* pNewWnd);
public:
afx_msg void OnSetFocus(CWnd* pOldWnd);
public:
void SetParent(CWnd* pWnd);
CString m_strText;
int m_nItem;
int m_nSubItem;
CBrush m_brush;
COLORREF m_TextBkColor;
COLORREF m_TextColor;
CWnd* m_pPar;
public:
afx_msg HBRUSH CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/);
};
class CMyList :
public CListCtrl
{
public:
CMyList(void);
public:
~CMyList(void);
CMyEdit m_Edit;
protected:
virtual void PreSubclassWindow();
public:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
};
实现文件 MyList.cpp
#include "StdAfx.h"
#include "MyList.h"
CMyEdit::CMyEdit(void)
{
m_TextBkColor=RGB(255,255,0);
m_TextColor = RGB(255,0, 2555);
m_brush.CreateSolidBrush(m_TextBkColor);
}
CMyEdit::~CMyEdit(void)
{
}
BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
ON_WM_KILLFOCUS()
ON_WM_SETFOCUS()
ON_WM_CTLCOLOR()
ON_WM_CTLCOLOR_REFLECT()
END_MESSAGE_MAP()
void CMyEdit::OnKillFocus(CWnd* pNewWnd)
{
CEdit::OnKillFocus(pNewWnd);
GetWindowText(m_strText);
((CMyList*)m_pPar)->SetItemText(m_nItem, m_nSubItem, m_strText);
this->ShowWindow(SW_HIDE);
}
void CMyEdit::OnSetFocus(CWnd* pOldWnd)
{
CEdit::OnSetFocus(pOldWnd);
SetWindowText(m_strText);
}
void CMyEdit::SetParent(CWnd* pWnd)
{
m_pPar = pWnd;
}
HBRUSH CMyEdit::CtlColor(CDC* pDC, UINT /*nCtlColor*/)
{
HBRUSH hbr;
pDC->SetTextColor(m_TextColor);
pDC->SetBkColor(m_TextBkColor);
hbr = (HBRUSH)m_brush;
return hbr;
}
CMyList::CMyList(void)
{
}
CMyList::~CMyList(void)
{
}
void CMyList::PreSubclassWindow()
{
m_Edit.Create(WS_CHILD|WS_CLIPSIBLINGS|WS_EX_TOOLWINDOW|WS_BORDER,
CRect(0,40,10,50),this,ID_EDIT);
m_Edit.SetParent(this);
CListCtrl::PreSubclassWindow();
}
BEGIN_MESSAGE_MAP(CMyList, CListCtrl)
ON_WM_LBUTTONDBLCLK()
END_MESSAGE_MAP()
void CMyList::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CListCtrl::OnLButtonDblClk(nFlags, point);
LVHITTESTINFO lvhti;
lvhti.pt = point;
lvhti.flags=LVHT_ONITEMLABEL;
this->SubItemHitTest(&lvhti);
int nItem = lvhti.iItem;
int nSubItem = lvhti.iSubItem;
if (lvhti.flags & LVHT_ONITEMLABEL)
{
CRect rectCell;
this->GetSubItemRect(nItem, nSubItem, LVIR_LABEL,rectCell);
m_Edit.m_nItem = nItem;
m_Edit.m_nSubItem = nSubItem;
m_Edit.m_strText = this->GetItemText(nItem, nSubItem);
m_Edit.MoveWindow(&rectCell, TRUE);
m_Edit.SetFocus();
m_Edit.SetSel(0, -1);
m_Edit.ShowWindow(SW_SHOW);
}
}
- 可编辑文本
- 双击文本实现可编辑
- 双击文本实现可编辑
- 双击文本实现可编辑
- 可编辑的文本控件EditText
- table点击实现可编辑文本
- 点击文字变成可编辑的文本
- 扫描PDF转可编辑文本教程
- 如何使html页面中的文本变为可编辑的?
- jQuery 可编辑表格文本域,支持键盘快捷操作
- List Control可编辑item文本(只支持第一列)
- List Control 可编辑任意item文本,设置行高
- 自动完成可编辑文本AutoCompleteTextView的使用
- 自动完成可编辑文本AutoCompleteTextView的使用
- 基于svg.js可编辑图像中的文本换行
- 截图表格转可编辑Word文本教程
- 几种实现点击修改按钮可编辑文本,不点则不可编辑的方式
- 可编辑
- VS2010与Reflector8.3VS插件冲突,导致调试快捷键有问题。
- hibernate错误笔记
- java sftp下载文件
- 通过内容相同去找点击的li对象是页面中的第几个li元素
- 只读经典
- 可编辑文本
- 通过rsync+inotify实现数据的实时备份
- JAVA反射机制
- Openfire无法安装the jvm could not be started.
- cocos2dx Lua项目中添加Sqlite
- Java Web 服务: Metro 服务下的 WS-Security
- ADT 启动出现“fail to create the java virtual machine”解决方案
- Ubantu基础操作,基础命令
- Eclipse在线安装插件奇慢的解决办法