📄 gridtestdlg.cpp
字号:
// GridTestDlg.cpp : implementation file
//
#include "stdafx.h"
#include "GridTest.h"
#include "GridTestDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGridTestDlg dialog
CGridTestDlg::CGridTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGridTestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CGridTestDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_edit = 0;
m_selectedRow = 1;
m_selectedCol = 1;
m_oldSelectedRow = 1;
m_oldSelectedCol = 1;
}
void CGridTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGridTestDlg)
DDX_Control(pDX, IDC_MSFLEXGRID1, m_gridCtrl);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CGridTestDlg, CDialog)
//{{AFX_MSG_MAP(CGridTestDlg)
ON_MESSAGE(GRID_DATA_CHANGED,OnGridDataChanged)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGridTestDlg message handlers
BEGIN_EVENTSINK_MAP(CGridTestDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CGridTestDlg)
ON_EVENT(CGridTestDlg, IDC_MSFLEXGRID1, 71 /* EnterCell */, OnEnterCellMsflexgrid1, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CGridTestDlg::OnEnterCellMsflexgrid1()
{
// TODO: Add your control notification handler code here
if(m_edit->GetSafeHwnd()!=0)
m_edit->DestroyWindow();
int col = m_gridCtrl.GetCol();
int row = m_gridCtrl.GetRow();
if(row==0 || col==0) return; //如果进入标题栏则返回
m_selectedRow = row;
m_selectedCol = col;
CreateEditBox();
//保存网格中原有的值
m_oldGridValue = m_gridCtrl.GetTextMatrix(row,col);
m_oldSelectedCol = m_selectedCol;
m_oldSelectedRow = m_selectedRow;
}
LONG CGridTestDlg::OnGridDataChanged(UINT wParam, LONG lParam)
{
CString str;
m_edit->GetWindowText(str);
m_gridCtrl.SetTextMatrix(m_oldSelectedRow,m_oldSelectedCol,str);
return 1L;
}
void CGridTestDlg::CreateEditBox()
{
long row_value = m_gridCtrl.GetRowHeight((long)m_selectedRow);//行高
long col_value = m_gridCtrl.GetColWidth((long)m_selectedCol); //列宽
long col_pos = m_gridCtrl.GetColPos(m_selectedCol); //列的起始位置
long row_pos = m_gridCtrl.GetRowPos(m_selectedRow); //行的起始位置
CClientDC dc(this);
int x_pixels = dc.GetDeviceCaps(LOGPIXELSX);//X方向没逻辑英寸的象素数
int y_pixels = dc.GetDeviceCaps(LOGPIXELSY);//y方向没逻辑英寸的象素数
//MM_TWIPS 一逻辑单位为1/1440英寸
CRect editrect;
editrect.left = (int)((col_pos/1440.0)*x_pixels);
editrect.top = (int)((row_pos/1440.0)*y_pixels);
editrect.right = (int)(((col_pos + col_value)/1440.0)*x_pixels);
editrect.bottom = (int)(((row_pos + row_value)/1440.0)*y_pixels);
if(m_edit->GetSafeHwnd()!= NULL)
{
m_edit->DestroyWindow();
m_gridCtrl.SetAllowUserResizing(1L);
}
delete m_edit;
m_edit = 0;
m_edit = new CMyEdit;
m_edit->Create(ES_AUTOHSCROLL|WS_VISIBLE|WS_BORDER|LVS_NOLABELWRAP ,
editrect,m_gridCtrl.FromHandle(m_gridCtrl.GetSafeHwnd()),MY_EDIT_CTRL);
m_edit->SetFont(GetFont());
m_edit->SetFocus();
m_gridCtrl.SetAllowUserResizing(0L);
CString str = m_gridCtrl.GetTextMatrix(m_selectedRow,m_selectedCol);
m_edit->SetWindowText(str);
}
BOOL CGridTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
int n = 5; char buf[10];
m_gridCtrl.SetCols(n);
m_gridCtrl.SetRows(n);
for ( int i=0; i<n; i++)
for ( int j=0; j<n; j++){
sprintf(buf, "[%d,%d]", i, j );
m_gridCtrl.SetTextMatrix( i, j, buf);
m_gridCtrl.SetColWidth(j,800);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -