Title is No Title

not very good here!

导航

add scroolbar to dialog is easy,add flag in dialgon property , then 4 func are need to change or add.

before all,add some var in class.
// Construction
public:
int m_nCurHeight;
int m_nCurWidth;
int m_nScrollPos;
int m_nScrollPos2;
CRect m_rect;
1:func:
BOOL SecondTimeCheckDlg::OnInitDialog()
{
 CDialog::OnInitDialog();
    com.initGuanQuAndCunZhuang();
 com.initJieYuCuoShi();
 //showOneInfo(com.getRenCode());
 //add for scrollbar.
 GetWindowRect(m_rect);
    m_nScrollPos = 0;
    m_nScrollPos2=0;
 return TRUE;  // return TRUE unless you set the focus to a control
               // EXCEPTION: OCX Property Pages should return FALSE
}

2:

void SecondTimeCheckDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
 //add for scroll bar.
 m_nCurHeight = cy;
 m_nCurWidth=cx;
 int nScrollMax;
 int nScrollMax2;
 if (cy < m_rect.Height())
 {
      nScrollMax = m_rect.Height() - cy;
 }
 else
      nScrollMax = 0;

 if(cx<m_rect.Width())
 {
  nScrollMax2=m_rect.Width()-cx;
 }else
  nScrollMax2=0;
 

 SCROLLINFO si;
 SCROLLINFO si2;
 si.cbSize = sizeof(SCROLLINFO);
    si2.cbSize = sizeof(SCROLLINFO);
 si2.fMask = SIF_ALL;
 si.fMask = SIF_ALL; // SIF_ALL = SIF_PAGE | SIF_RANGE | SIF_POS;
 si.nMin = 0;
 si2.nMin=0;
 si2.nMax = nScrollMax2;
 si.nMax = nScrollMax;
 si2.nPage =si2.nMax /10;
 si.nPage = si.nMax/10;
 si2.nPos=0;
 si.nPos = 0;
    SetScrollInfo(SB_VERT, &si, TRUE);
 SetScrollInfo(SB_HORZ,&si2,TRUE);
 // TODO: Add your message handler code here
}

3:

void SecondTimeCheckDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
  // TODO: Add your message handler code here and/or call default
 int nDelta;
 int nMaxPos = m_rect.Width() - m_nCurWidth;

 switch (nSBCode)
 {
 case SB_LINEDOWN:
  if (m_nScrollPos2 >= nMaxPos)
   return;
  nDelta = min(nMaxPos/100,nMaxPos-m_nScrollPos2);
  break;

 case SB_LINEUP:
  if (m_nScrollPos2 <= 0)
   return;
  nDelta = -min(nMaxPos/100,m_nScrollPos2);
  break;

         case SB_PAGEDOWN:
  if (m_nScrollPos2 >= nMaxPos)
   return;
  nDelta = min(nMaxPos/10,nMaxPos-m_nScrollPos2);
  break;

 case SB_THUMBPOSITION:
  nDelta = (int)nPos - m_nScrollPos2;
  break;

 case SB_PAGEUP:
  if (m_nScrollPos2 <= 0)
   return;
  nDelta = -min(nMaxPos/10,m_nScrollPos2);
  break;
 
         default:
  return;
 }
 m_nScrollPos2 += nDelta;
 SetScrollPos(SB_HORZ,m_nScrollPos2,TRUE);
 //ScrollWindow(0,-nDelta);
 ScrollWindow(-nDelta,0);
 //end add.
 CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}


4:

void SecondTimeCheckDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
 //add..
 int nDelta;
 int nMaxPos = m_rect.Height() - m_nCurHeight;

 switch (nSBCode)
 {
 case SB_LINEDOWN:
  if (m_nScrollPos >= nMaxPos)
   return;
  nDelta = min(nMaxPos/100,nMaxPos-m_nScrollPos);
  break;

 case SB_LINEUP:
  if (m_nScrollPos <= 0)
   return;
  nDelta = -min(nMaxPos/100,m_nScrollPos);
  break;

         case SB_PAGEDOWN:
  if (m_nScrollPos >= nMaxPos)
   return;
  nDelta = min(nMaxPos/10,nMaxPos-m_nScrollPos);
  break;

 case SB_THUMBPOSITION:
  nDelta = (int)nPos - m_nScrollPos;
  break;

 case SB_PAGEUP:
  if (m_nScrollPos <= 0)
   return;
  nDelta = -min(nMaxPos/10,m_nScrollPos);
  break;
 
         default:
  return;
 }
 m_nScrollPos += nDelta;
 SetScrollPos(SB_VERT,m_nScrollPos,TRUE);
 ScrollWindow(0,-nDelta);
 CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

posted on 2004-03-26 13:46  abraham  阅读(1066)  评论(2编辑  收藏  举报