📄 cellview.cpp
字号:
else
pDoc->m_nTopLeftColNo=pDoc->m_warrayCol.GetSize();
SetScrollPos(SB_HORZ,pDoc->m_nTopLeftColNo);
Invalidate();
}
else if(nSBCode==SB_THUMBPOSITION)//SB_THUMBTRACK)
{
if(pDoc->m_nTopLeftColNo == (INT)nPos)
return;
pDoc->m_nTopLeftColNo = nPos;
SetScrollPos(SB_HORZ,pDoc->m_nTopLeftColNo);
Invalidate();
}
else if(nSBCode==SB_RIGHT)
{
if(pDoc->m_nTopLeftColNo!=pDoc->m_warrayCol.GetSize() -1)
{
pDoc->m_nTopLeftColNo=pDoc->m_warrayCol.GetSize() -1;
SetScrollPos(SB_HORZ,pDoc->m_nTopLeftColNo);
}
Invalidate();
}
else if(nSBCode==SB_LEFT)
{
if(pDoc->m_nTopLeftColNo!=0)
{
pDoc->m_nTopLeftColNo=0;
SetScrollPos(SB_HORZ,pDoc->m_nTopLeftColNo);
}
Invalidate();
}
// CView::OnHScroll(nSBCode, nPos, pScrollBar);
}
BOOL CCellView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
dwStyle|=WS_VSCROLL;
dwStyle|=WS_HSCROLL;
return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}
void CCellView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
BOOL bret;
CCellDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
SCROLLINFO scinfo;
scinfo.cbSize=sizeof(SCROLLINFO);
if(!GetScrollInfo( SB_HORZ, &scinfo))
return;
scinfo.nMin=0;
scinfo.nMax=pDoc->m_warrayCol.GetSize();
scinfo.nPos=0;
scinfo.nPage=5;
scinfo.nTrackPos=0;
bret=SetScrollInfo( SB_HORZ, &scinfo);
if(!GetScrollInfo( SB_VERT, &scinfo))
return;
scinfo.nMin=0;
scinfo.nMax=pDoc->m_warrayRow.GetSize();
scinfo.nPos=0;
scinfo.nPage=10;
scinfo.nTrackPos=0;
bret=SetScrollInfo( SB_VERT, &scinfo);
}
BOOL CCellView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return TRUE;
// return CView::OnEraseBkgnd(pDC);
}
int CCellView::HitTestFixRow(int *nRowNo,CPoint point)//
{
CCellDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int nt=pDoc->m_nHigthFixRow;
int i;
CRect rt;
for(i=pDoc->m_nTopLeftRowNo;i<pDoc->m_warrayRow.GetSize();i++)
{
rt.top=nt+3;
nt+=(int)pDoc->m_warrayRow[i];
rt.bottom=nt-3;
rt.left=0;
rt.right=pDoc->m_nWidthFixCol;
if(rt.PtInRect(point))
{
*nRowNo=i;
return HIT_IN;
}
rt.top=nt-2;
rt.bottom=nt+2;
if(rt.PtInRect(point))
{
*nRowNo=i;
return HIT_ADJUST;
}
}
*nRowNo=-1;
return HIT_NO;
}
int CCellView::HitTestFixCol(int *nColNo,CPoint point)//
{
CCellDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int nt=pDoc->m_nWidthFixCol;
int i;
CRect rt;
for(i=pDoc->m_nTopLeftColNo;i<pDoc->m_warrayCol.GetSize();i++)
{
rt.top=0;
rt.bottom=pDoc->m_nHigthFixRow;
rt.left=nt+3;
nt+=(int)pDoc->m_warrayCol[i];
rt.right=nt-3;
if(rt.PtInRect(point))
{
*nColNo=i;
return HIT_IN;
}
rt.left=nt-2;
rt.right=nt+2;
if(rt.PtInRect(point))
{
*nColNo=i;
return HIT_ADJUST;
}
}
*nColNo=-1;
return HIT_NO;
}
BOOL CCellView::HitTestCell(int *nRow,int *nCol,CPoint point)
{
CCellDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int nx=pDoc->m_nTopX;
int ny=pDoc->m_nTopY;
int i,j;
CRect rt;
for(i=pDoc->m_nTopLeftColNo;i<pDoc->m_warrayCol.GetSize();i++)
{
rt.left=nx;
nx+=(int)pDoc->m_warrayCol[i];
rt.right=nx-1;
ny=pDoc->m_nHigthFixRow;
for(j=pDoc->m_nTopLeftRowNo;j<pDoc->m_warrayRow.GetSize();j++)
{
rt.top=ny;
ny+=(int)pDoc->m_warrayRow[j];
rt.bottom=ny-1;
if(rt.PtInRect(point))
{
*nCol=i;
*nRow=j;
return TRUE;
}
}
}
return FALSE;
}
void CCellView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CCellDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CPoint local;
local=point;
int nColW;
int nRowH;
if(m_DrawShape==adjustcol)
{
int nt=local.x-m_ptLast.x;
if(nt==0)
{
return;
}
if((m_nCurFixColNo>=0)&&(m_nCurFixColNo<pDoc->m_warrayCol.GetSize()))
{
nColW=(int)pDoc->m_warrayCol[m_nCurFixColNo];
if((nColW + nt) > 12)
{
pDoc->m_warrayCol[m_nCurFixColNo]+=nt;
m_ptLast=local;
Invalidate();
pDoc->SetModifiedFlag();
return;
}
}
return;
}
if(m_DrawShape==adjustrow)
{
int nt=local.y-m_ptLast.y;
if(nt==0)
{
return;
}
if((m_nCurFixRowNo>=0)&&(m_nCurFixRowNo<pDoc->m_warrayRow.GetSize()))
{
nRowH=(int)pDoc->m_warrayRow[m_nCurFixRowNo];
if((nRowH + nt) > 12)
{
pDoc->m_warrayRow[m_nCurFixRowNo]+=nt;
m_ptLast=local;
Invalidate();
pDoc->SetModifiedFlag();
return;
}
}
return;
}
if(m_DrawShape==rectselect)
{
CRect rtc;
rtc.left=m_ptLast.x;
rtc.top=m_ptLast.y;
rtc.right=local.x;
rtc.bottom=local.y;
rtc.NormalizeRect();
if(!(nFlags & MK_SHIFT))
pDoc->RemoveAllSelectBut(-1,-1);
pDoc->SelectInRect(rtc);
this->Invalidate();
return;
}
int nAdJustCol;
if(HIT_ADJUST==HitTestFixCol(&nAdJustCol,point))
{
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZEWE));
return;
}
if(HIT_ADJUST==HitTestFixRow(&nAdJustCol,point))
{
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZENS));
return;
}
m_ptLast=local;
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
}
void CCellView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CCellDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
::SetClassLong(GetSafeHwnd(),GCL_HCURSOR,NULL);
m_uMouseFlag=nFlags;
int nAdJustCol;
int FixHit;
FixHit=HitTestFixCol(&nAdJustCol,point);
if(FixHit==HIT_ADJUST)
{
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZEWE));
m_nCurFixColNo=nAdJustCol;
m_DrawShape=adjustcol;
m_ptLast=point;
return;
}
else if(FixHit==HIT_IN)
{
if(nFlags & MK_SHIFT)
{
int i;
int nRows=pDoc->m_warrayRow.GetSize();
for(i=0;i<nRows;i++)
pDoc->Select(i,nAdJustCol,TRUE);
}
else
{
int i;
int nRows=pDoc->m_warrayRow.GetSize();
if(nRows>0)
pDoc->RemoveAllSelectBut(0,nAdJustCol);
for(i=0;i<nRows;i++)
pDoc->Select(i,nAdJustCol,TRUE);
}
this->Invalidate();
return;
}
FixHit=HitTestFixRow(&nAdJustCol,point);
if(FixHit==HIT_ADJUST)
{
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZENS));
m_nCurFixRowNo=nAdJustCol;
m_DrawShape=adjustrow;
m_ptLast=point;
return;
}
else if(FixHit==HIT_IN)
{
if(nFlags & MK_SHIFT)
{
int i;
int nCols=pDoc->m_warrayCol.GetSize();
for(i=0;i<nCols;i++)
pDoc->Select(nAdJustCol,i,TRUE);
}
else
{
int i;
int nCols=pDoc->m_warrayCol.GetSize();
if(nCols>0)
pDoc->RemoveAllSelectBut(nAdJustCol,0);
for(i=0;i<nCols;i++)
pDoc->Select(nAdJustCol,i,TRUE);
}
this->Invalidate();
return;
}
int nRow,nCol;
if(HitTestCell(&nRow,&nCol,point))
{
if(nFlags & MK_SHIFT)
pDoc->Select(nRow,nCol,TRUE);
else
pDoc->RemoveAllSelectBut(nRow,nCol);
this->Invalidate();
m_DrawShape=rectselect;
m_ptLast=point;
// CCellObj *pCell;
// pCell=pDoc->GetCell(nRow,nCol);
// if(pCell!=NULL)
// ((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_wndToolBarTextTool.SetDlgItemText(ID_EDIT_CELL,pCell->m_szDef);
//
return;
}
CRect rtall;
rtall.left=0;
rtall.right=pDoc->m_nWidthFixCol;
rtall.top=0;
rtall.bottom=pDoc->m_nHigthFixRow;
if(rtall.PtInRect(point))
{
pDoc->SelectAll();
this->Invalidate();
}
m_DrawShape=normal;
::SetClassLong(GetSafeHwnd(),GCL_HCURSOR,
(LONG)(AfxGetApp()->LoadCursor(IDC_ARROW)));
}
void CCellView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_DrawShape=normal;
CCellDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int nRows,nCols,nRow,nCol;
CCellObj *pFirstObj=NULL;
int nSels=pDoc->GetSelectCellNum(&nRows,&nCols,&nRow,&nCol,&pFirstObj);//获取当前选中单元的个数,行数,列数,第一个选中单元的坐标
CMainFrame *pwndMain;
pwndMain=(CMainFrame *)(AfxGetApp()->m_pMainWnd);
CComboBox * pCombo=(CComboBox *)(&(pwndMain->m_wndToolBarTextTool.m_ComboFont));
if(nSels==0)
{
pCombo->SelectString(-1,"宋体");
pCombo=(CComboBox *)(&(pwndMain->m_wndToolBarTextTool.m_ComboFontSize));
pCombo->SelectString(-1,"14");
}
else if(nSels==1)
{
if(pFirstObj!=NULL)
{
pCombo->SelectString(-1,pFirstObj->GetLogFont()->lfFaceName);
CString szt;
szt.Format("%d",pFirstObj->GetLogFont()->lfHeight);
pCombo=(CComboBox *)(&(pwndMain->m_wndToolBarTextTool.m_ComboFontSize));
pCombo->SelectString(-1,szt);
((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_wndToolBarTextTool.SetDlgItemText(ID_EDIT_CELL,pFirstObj->m_szDef);
m_nCurEditCol=nCol;
m_nCurEditRow=nRow;
if(pFirstObj->GetLogFont()->lfWeight >400)
m_bFontFat=TRUE;
else
m_bFontFat=FALSE;
if(pFirstObj->GetLogFont()->lfItalic)
m_bFontXt=TRUE;
else
m_bFontXt=FALSE;
if(pFirstObj->GetLogFont()->lfUnderline)
m_bFontUnderLine=TRUE;
else
m_bFontUnderLine=FALSE;
if(pFirstObj->m_dwFlags & CELL_FRMLEFT)
m_bCellFrmLeft=TRUE;
else
m_bCellFrmLeft=FALSE;
if(pFirstObj->m_dwFlags & CELL_FRMTOP)
m_bCellFrmTop=TRUE;
else
m_bCellFrmTop=FALSE;
if(pFirstObj->m_dwFlags & CELL_FRMRIGHT)
m_bCellFrmRight=TRUE;
else
m_bCellFrmRight=FALSE;
if(pFirstObj->m_dwFlags & CELL_FRMBOTTOM)
m_bCellFrmBottom=TRUE;
else
m_bCellFrmBottom=FALSE;
if(pFirstObj->m_dwFlags & CELL_FRMLT2RB)
m_bCellFrmLT2RB=TRUE;
else
m_bCellFrmLT2RB=FALSE;
if(pFirstObj->m_dwFlags & CELL_FRMLB2RT)
m_bCellFrmLB2RT=TRUE;
else
m_bCellFrmLB2RT=FALSE;
}
}
else
{
pCombo->SetCurSel(-1);
pCombo=(CComboBox *)(&(pwndMain->m_wndToolBarTextTool.m_ComboFontSize));
pCombo->SetCurSel(-1);
((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_wndToolBarTextTool.SetDlgItemText(ID_EDIT_CELL,"");
m_nCurEditCol=-1;
m_nCurEditRow=-1;
m_bFontFat=FALSE;
m_bFontXt=FALSE;
m_bFontUnderLine=FALSE;
m_bCellFrmLeft=FALSE;
m_bCellFrmRight=FALSE;
m_bCellFrmTop=FALSE;
m_bCellFrmBottom=FALSE;
m_bCellFrmLT2RB=FALSE;
m_bCellFrmLB2RT=FALSE;
}
CView::OnLButtonUp(nFlags, point);
}
void CCellView::OnEditInsertrow()
{
// TODO: Add your command handler code here
CCellDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int nRows,nCols,nRow,nCol;
int nIndex=pDoc->GetSelectCellNum(&nRows,&nCols,&nRow,&nCol);
if(nRows !=1)
return;
if(pDoc->InsertRow(nRow))
{
SetScrollRange(SB_VERT,0,pDoc->m_warrayRow.GetSize());
pDoc->UpdateAllViews(NULL);
pDoc->SetModifiedFlag();
}
}
void CCellView::OnUpdateEditInsertrow(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CCellView::OnEditInsertcol()
{
// TODO: Add your command handler code here
CCellDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int nRows,nCols,nRow,nCol;
int nIndex=pDoc->GetSelectCellNum(&nRows,&nCols,&nRow,&nCol);
if(nCols !=1)
return;
if(pDoc->InsertCol(nCol))
{
SetScrollRange(SB_HORZ,0,pDoc->m_warrayCol.GetSize());
pDoc->UpdateAllViews(NULL);
pDoc->SetModifiedFlag();
}
}
void CCellView::OnUpdateEditInsertcol(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CCellView::OnEditAddrow()
{
// TODO: Add your command handler code here
CCellDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(pDoc->InsertRow(-1))
{
SetScrollRange(SB_VERT,0,pDoc->m_ArrayRow.GetSize());
pDoc->UpdateAllViews(NULL);
pDoc->SetModifiedFlag();
}
}
void CCellView::OnUpdateEditAddrow(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CCellView::OnEditAddcol()
{
// TODO: Add your command handler code here
CCellDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(pDoc->InsertCol(-1))
{
SetScrollRange(SB_HORZ,0,pDoc->m_warrayCol.GetSize());
pDoc->UpdateAllViews(NULL);
pDoc->SetModifiedFlag();
}
}
void CCellView::OnUpdateEditAddcol(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CCellView::OnEditDelrow()
{
// TODO: Add your command handler code here
CCellDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int nRows,nCols,nRow,nCol;
int nIndex=pDoc->GetSelectCellNum(&nRows,&nCols,&nRow,&nCol);
if(nRows !=1)
return;
if(pDoc->DelRow(nRow))
{
SetScrollRange(SB_VERT,0,pDoc->m_warrayRow.GetSize());
pDoc->UpdateAllViews(NULL);
pDoc->SetModifiedFlag();
}
}
void CCellView::OnUpdateEditDelrow(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CCellView::OnEditDelcol()
{
// TODO: Add your command handler code here
CCellDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int nRows,nCols,nRow,nCol;
int nIndex=pDoc->GetSelectCellNum(&nRows,&nCols,&nRow,&nCol);
if(nCols !=1)
return;
if(pDoc->DelCol(nCol))
{
SetScrollRange(SB_HORZ,0,pDoc->m_warrayCol.GetSize());
pDoc->UpdateAllViews(NULL);
pDoc->SetModifiedFlag();
}
}
void CCellView::OnUpdateEditDelcol(CCmdUI* pCmdUI)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -