|
关键函数OnSize获取Client的x,y范围
void CMyEditorView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
cxClient = cx;
cyClient = cy;
}
关键函数OnPaint进行绘制
void CMyEditorView::OnPaint()
{
CPaintDC pdc(this);
const int FIRST_X = 0;
const int SECOND_X = 5*cxCaps;
const int THIRD_X = 20*cxCaps;
const int FORTH_X = 20*cxCaps + 40*cxChar;
for (int i = iVscrollPos ; i < NUMLINES ; i++)
{
TCHAR szBuffer [10] ;
int y = cyChar * (i-iVscrollPos);
TextOut(pdc, FIRST_X, y, szBuffer,wsprintf(szBuffer,TEXT("%5d"),i-iVscrollPos)) ;
TextOut(pdc, SECOND_X, y, sysmetrics[i].szLabel,lstrlen (sysmetrics[i].szLabel)) ;
TextOut(pdc, THIRD_X, y, sysmetrics[i].szDesc,lstrlen (sysmetrics[i].szDesc)) ;
SetTextAlign (pdc, TA_RIGHT | TA_TOP);
TextOut(pdc, FORTH_X, y, szBuffer,wsprintf (szBuffer, TEXT ("%5d"),
GetSystemMetrics (sysmetrics[i].index))) ;
SetTextAlign (pdc, TA_LEFT | TA_TOP) ;
}
}
关键函数OnVscroll获取滚动条事件
void CMyEditorView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
switch(nSBCode)
{
case SB_THUMBTRACK:
iVscrollPos = nPos;
break;
case SB_PAGEDOWN:
iVscrollPos += cyClient/cyChar;
break;
case SB_PAGEUP:
iVscrollPos -= cyClient/cyChar;
break;
}
iVscrollPos = max(0,min(iVscrollPos,NUMLINES-1));
if(iVscrollPos != GetScrollPos(SB_VERT))
{
SetScrollPos(SB_VERT,iVscrollPos,TRUE);
RECT rect;
GetClientRect(&rect);
InvalidateRect(&rect);
}
CView::OnVScroll(nSBCode, nPos, pScrollBar);
}
|