⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editablelistctrl.cpp

📁 人力资源管理系统
💻 CPP
字号:
// EditableListCtrl.cpp: implementation of the CEditableListCtrl class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "hrms.h"
#include "EditableListCtrl.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CEditableListCtrl::CEditableListCtrl()
{
	m_CurSelSubItem = -1;
	m_CurSelItem = -1;
}

CEditableListCtrl::~CEditableListCtrl()
{

}

BEGIN_MESSAGE_MAP(CEditableListCtrl, CListCtrl)
	//{{AFX_MSG_MAP(CEditableListCtrl)
	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
	ON_EN_KILLFOCUS(IDC_LISTEDIT, OnEditKillFocus)
	ON_WM_HSCROLL()
	ON_WM_VSCROLL()
	ON_WM_MOUSEWHEEL()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEditableListCtrl message handlers

void CEditableListCtrl::ShowEditBox(BOOL isShow, CRect *rc)
{
	ASSERT((isShow && (rc != NULL)) || !isShow);
	if(rc != NULL)
		m_Edit.MoveWindow(rc->left, rc->top, rc->right, rc->bottom, TRUE);
	if(isShow)
	{
		m_Edit.SetFocus();
		m_Edit.ShowWindow(SW_SHOW);
	}
	else if(!isShow)
		m_Edit.ShowWindow(SW_HIDE);
}

void CEditableListCtrl::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
{
	// TODO: Add your control notification handler code here
	LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)pNMHDR;
	if(lpnmlv->iItem >= 0)
	{
		CRect rc;
		CWnd* wnd = GetParent();
		
		m_CurSelItem = lpnmlv->iItem;
		m_CurSelSubItem = lpnmlv->iSubItem;
		CString str = GetItemText(m_CurSelItem, m_CurSelSubItem);
		m_Edit.SetWindowText(str);
		m_Edit.SetSel(0, -1);
		GetSubItemRect(lpnmlv->iItem, lpnmlv->iSubItem, LVIR_LABEL, rc);
		rc.bottom = rc.bottom - rc.top;
		rc.right = rc.right - rc.left;
		ShowEditBox(TRUE, &rc);
		wnd->SendMessage(UM_LISTEDIT_DBCLICK, (WPARAM)lpnmlv, 0);
	}
	*pResult = -1;
}

void CEditableListCtrl::PreSubclassWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	RECT rc = {0};
	m_Edit.Create(WS_CHILD| WS_TABSTOP  | WS_VISIBLE |ES_LEFT, rc, this, IDC_LISTEDIT);
	CListCtrl::PreSubclassWindow();
}

void CEditableListCtrl::OnEditKillFocus()
{
	CString str;
	CWnd* wnd;

	wnd = GetParent();
	ShowEditBox(FALSE, NULL);
	m_Edit.GetWindowText(str);
	SetItemText(m_CurSelItem, m_CurSelSubItem, str.GetBuffer(0));
	::SendMessage(wnd->m_hWnd, UM_LISTEDIT_KILLFOCUS, 
		m_CurSelItem, m_CurSelSubItem);
	m_CurSelItem = -1;
	m_CurSelSubItem = -1;
	m_Edit.SetWindowText("");
}

void CEditableListCtrl::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	SetFocus();
	CListCtrl::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CEditableListCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	SetFocus();
	CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}

BOOL CEditableListCtrl::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) 
{
	// TODO: Add your message handler code here and/or call default
	SetFocus();
	return CListCtrl::OnMouseWheel(nFlags, zDelta, pt);
}

void CEditableListCtrl::ShowEditBox(BOOL isShow, int iItem, int iSubItem)
{

	CString con;
	CRect rc;
	if(!isShow)
	{
		m_Edit.ShowWindow(SW_HIDE);
		return ;
	}
	con = GetItemText(iItem, iSubItem);
	GetSubItemRect(iItem, iSubItem, LVIR_LABEL, rc);
	m_Edit.SetWindowText(con);
	m_Edit.SetFocus();
	m_Edit.SetSel(0, -1);
	m_Edit.MoveWindow(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);
	m_Edit.ShowWindow(SW_SHOW);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -