文本编辑器滚动条

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 21:20   38   0

关键函数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);
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP