【VC开源代码栏目提醒】:网学会员鉴于大家对VC开源代码十分关注,论文会员在此为大家搜集整理了“EditGrid.cpp”一文,供大家参考学习
// EditGrid.cpp : implementation file
//
#include "stdafx.h"
#include "EditGridDemo.h"
#include "EditGrid.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CEditGrid
IMPLEMENT_DYNCREATE(CEditGrid, CMDIChildWnd)
CEditGrid::CEditGrid()
{
}
CEditGrid::~CEditGrid()
{
}
BEGIN_MESSAGE_MAP(CEditGrid, CMSFlexGrid)
//{{AFX_MSG_MAP(CEditGrid)
ON_WM_KEYDOWN()
ON_WM_CHAR()
ON_WM_LBUTTONDBLCLK()
ON_WM_CREATE()
ON_WM_SETFOCUS()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_EVENTSINK_MAP(CEditGrid, CMSFlexGrid)
//{{AFX_EVENTSINK_MAP(CEditGrid)
//}}AFX_EVENTSINK_MAP
ON_EVENT_REFLECT(CEditGrid, 72 /* LeaveCell */, OnLeaveCell, VTS_NONE)
END_EVENTSINK_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditGrid message handlers
void CEditGrid::PreSubclassWindow()
{
//创建并初始化编辑框m_Edit
m_Edit.Create(WS_CHILD|ES_MULTILINE|ES_WANTRETURN,
CRect(0,0,0,0), this, GetDlgCtrlID());
//计算边框的宽度
SetRow(0);
SetCol(0);
m_lBorderWidth = GetCellLeft();
m_lBorderHeight = GetCellTop();
//初始化m_nLogX和m_nLogY
CDC* pDC = GetDC();
m_nLogX = pDC->GetDeviceCaps(LOGPIXELSX);
m_nLogY = pDC->GetDeviceCaps(LOGPIXELSY);
ReleaseDC(pDC);
//设置格子的初始位置
SetRow(1);
SetCol(1);
}
void CEditGrid::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
//当用户按下的是回车键时,
//格子中的文本写到m_Edit中并变成选中状态。
if (nChar == 13)
{
m_Edit.SetWindowText(GetText());
m_Edit.SetSel(0, -1);
}
//当用户按下的是其他键时,
//按下的键写到m_Edit中。
else
{
char buf[] = " ";
buf[0] = (char)nChar;
m_Edit.SetSel(0,-1);
m_Edit.ReplaceSel(buf);
}
//显示m_Edit
ShowEdit();
CMSFlexGrid::OnChar(nChar, nRepCnt, nFlags);
}
void CEditGrid::ShowEdit()
{
//设置m_Edit的位置
m_Edit.MoveWindow(((GetCellLeft() - m_lBorderWidth) * m_nLogX)/1440,
((GetCellTop() - m_lBorderHeight) * m_nLogY)/1440,
(GetCellWidth()* m_nLogX)/1440,
(GetCellHeight()* m_nLogY)/1440, FALSE);
//显示m_Edit并设置焦点
m_Edit.ShowWindow(SW_SHOW);
m_Edit.SetFocus();
}
void CEditGrid::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CMSFlexGrid::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CEditGrid::OnEnterKey()
{
OnChar(13, 0, 0);
}
void CEditGrid::OnLButtonDblClk(UINT nFlags, CPoint point)
{
OnChar(13, 0, 0);
CMSFlexGrid::OnLButtonDblClk(nFlags, point);
}
void CEditGrid::OnLeaveCell()
{
BOOL bVisible = ::GetWindowLong(m_Edit.GetSafeHwnd(), GWL_STYLE) & WS_VISIBLE;
if (bVisible)
{
CString cStr;
m_Edit.GetWindowText(cStr);
SetText(cStr);
m_Edit.SetWindowText("");
m_Edit.ShowWindow(SW_HIDE);
}
}