2015-07-13 157 views
-5

我想添加一個水平滾動條來調整對話框的大小。 我已經有一個對話框工作的垂直滾動條。 但是,當我複製並粘貼VScroll的相同代碼並用Dialog.cx替換所有相關的VScroll與HScroll和Dialog.cy時,它仍然不起作用。C++ MFC添加水平滾動條來調整窗口大小對話框

任何人都可以幫忙。

+1

「仍然沒有工作」是不夠詳細的任何人來幫助你我很抱歉。 –

+0

請顯示您的代碼。 –

回答

0

下面是一個提取,如果這沒有幫助,因爲其他人已經建議你應該發佈一些代碼。

CScrollBar m_HScrollBar; 
    CScrollBar m_VScrollBar; 
    SCROLLINFO m_horz, m_vert; 

    int m_iSrcX; 
    int m_iSrcY; 

BEGIN_MESSAGE_MAP(YourClass, CDialogEx) 
    ON_WM_VSCROLL() 
    ON_WM_HSCROLL() 
    ON_WM_SIZE() 
END_MESSAGE_MAP() 


void YourClass::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{ 
    switch (nSBCode) 
    { 
    case SB_TOP: 
     m_iSrcY = 0; 
     break; 
    case SB_BOTTOM: 
     m_iSrcY = INT_MAX; 
     break; 
    case SB_THUMBPOSITION: 
    case SB_THUMBTRACK: 
     m_iSrcY = nPos; 
     break; 

    case SB_PAGEDOWN: 
    case SB_LINEDOWN: 
     if (m_iSrcY >= INT_MAX) 
     { 
      m_iSrcY = INT_MAX; 
      return; 
     } 
     m_iSrcY += 10; 
     break; 
    case SB_PAGEUP: 
    case SB_LINEUP: 
     if (m_iSrcY <= (-INT_MAX)) 
     { 
      m_iSrcY = 0; 
      return; 
     } 
     m_iSrcY -= 10; 
     break; 
    } 
    m_VScrollBar.SetScrollPos(m_iSrcY); 
Invalidate(); 
    CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar); 
} 

void YourClass::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{ 
    switch (nSBCode) 
    { 
    case SB_TOP: 
     m_iSrcX = 0; 
     break; 
    case SB_BOTTOM: 
     m_iSrcX = INT_MAX; 
     break; 
    case SB_THUMBPOSITION: 
    case SB_THUMBTRACK: 
     m_iSrcX = nPos; 
     break; 
    case SB_PAGERIGHT: 
    case SB_LINERIGHT: 
     if (m_iSrcX >= INT_MAX) 
     { 
      m_iSrcX = INT_MAX; 
      return; 
     } 
     m_iSrcX += 10; 
     break; 
    case SB_PAGELEFT: 
    case SB_LINELEFT: 
     if (m_iSrcX <= (-INT_MAX)) 
     { 
      m_iSrcX = 0; 
      return; 
     } 
     m_iSrcX -= 10; 
     break; 
    } 

    m_HScrollBar.SetScrollPos(m_iSrcX); 
    Invalidate(); 

    CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar); 
} 


void YourClass::OnSize(UINT nType, int cx, int cy) 
{ 

     if (m_VScrollBar.GetSafeHwnd() && m_HScrollBar.GetSafeHwnd()) 
     { 
      m_VScrollBar.SetWindowPos(NULL, cx - 20, 25, 20, iBottom, SWP_NOZORDER); 
      m_HScrollBar.SetWindowPos(NULL, iLeft, cy - 20, cx - cx/2 - 20, 20, SWP_NOZORDER); 
     } 


      //Horizontal Scroll Info Structure 
      m_horz.cbSize = sizeof(SCROLLINFO); 
      m_horz.fMask = SIF_ALL; 
      m_horz.nMin = 0; 
      m_horz.nMax = m_MaxWidth; 
      m_horz.nPage = rWnd.Width()/10; 
      m_horz.nPos = m_iSrcX; 
      m_horz.nTrackPos = 0; 
      m_HScrollBar.SetScrollInfo(&m_horz); 
      //Vertical Scroll Info Structure 
      m_vert.cbSize = sizeof(SCROLLINFO); 
      m_vert.fMask = SIF_ALL; 
      m_vert.nMin = 0; 
      m_vert.nMax = m_MaxHeight; 
      m_vert.nPage = rWnd.Height()/10; 
      m_vert.nPos = m_iSrcY; 
      m_vert.nTrackPos = 0; 
      m_VScrollBar.SetScrollInfo(&m_vert); 
} 

有些事情顯然缺失/不完整,但這應該給你一些想法。