Visual c++ 水平滚动不起作用

Visual c++ 水平滚动不起作用,visual-c++,scroll,Visual C++,Scroll,这个代码不是做水平滚动而是做垂直滚动,请给我任何建议我做错了什么。我想做水平滚动 void CFormGridColumnPreviewDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default int nDelta; int nMaxPos = m_rcOriginalRect.Wi

这个代码不是做水平滚动而是做垂直滚动,请给我任何建议我做错了什么。我想做水平滚动

 void CFormGridColumnPreviewDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar*    
 pScrollBar)
{
// TODO: Add your message handler code here and/or call default

int nDelta;
int nMaxPos = m_rcOriginalRect.Width() - m_nCurWidth;

switch (nSBCode)
{
case SB_LINERIGHT:
    if (m_nScrollPos >= nMaxPos)
        return;

    nDelta = min(max(nMaxPos/20,5),nMaxPos-m_nScrollPos);
    break;

case SB_LINELEFT:
    if (m_nScrollPos <= 0)
        return;
    nDelta = -min(max(nMaxPos/20,5),m_nScrollPos);
    break;
case SB_PAGERIGHT:
    if (m_nScrollPos >= nMaxPos)
        return;
    nDelta = min(max(nMaxPos/10,5),nMaxPos-m_nScrollPos);
    break;
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
    nDelta = (int)nPos - m_nScrollPos;
    break;

case SB_PAGELEFT:
    if (m_nScrollPos <= 0)
        return;
    nDelta = -min(max(nMaxPos/10,5),m_nScrollPos);
    break;

     default:
    return;
}
m_nScrollPos += nDelta;
SetScrollPos(SB_HORZ,m_nScrollPos,TRUE);
ScrollWindow(0,-nDelta);

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

void CFormGridColumnPreviewDlg::OnSize(UINT nType, int cx, int cy)
{ 
CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
m_nCurWidth = cx;

SCROLLINFO si;
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_ALL; 
si.nMin = 0;
si.nMax = m_rcOriginalRect.Width();
si.nPage = cx;
si.nPos = 0;
SetScrollInfo(SB_HORZ, &si, TRUE); 
}
void CFormGridColumnPreviewDlg::OnHScroll(UINT nSBCode、UINT npo、CScrollBar*
pScrollBar)
{
//TODO:在此处添加消息处理程序代码和/或调用默认值
内恩德尔塔;
int nMaxPos=m_rcOriginalRect.Width()-m_nCurWidth;
交换机(nSBCode)
{
案例SB_LINERIGHT:
如果(m_nScrollPos>=nMaxPos)
返回;
nDelta=最小值(最大值(nMaxPos/20,5),nMaxPos-m_-nScrollPos);
打破
案例SB_左:
if(m_nScrollPos=nMaxPos)
返回;
nDelta=最小值(最大值(nMaxPos/10,5),nMaxPos-m_-nScrollPos);
打破
案例SB_THUMBTRACK:
案例SB_位置:
nDelta=(int)nPos-m_nScrollPos;
打破
案例SB_PAGELEFT:

如果(m_nScrollPos我希望这对您有帮助:

BEGIN\u MESSAGE\u MAP(AddTabDlg,CDialog)
关于_WM_SIZE()
关于_WM_VSCROLL()
论胡文旭()
结束消息映射()
//AddTabDlg消息处理程序
BOOL AddTabDlg::OnInitDialog()
{
CDialog::OnInitDialog();
GetWindowRect(m_rect);
m_nScrollPos=0;
m_=0;
return TRUE;//除非将焦点设置为控件,否则返回TRUE
}
void AddTabDlg::OnSize(UINT nType、int cx、int cy)
{
CDialog::OnSize(nType、cx、cy);
//TODO:在此处添加消息处理程序代码。
m_nCurHeight=cy;
m_nCurWidth=cx;
int-nScrollMax;
if(cy=nMaxPos)
返回;
nDelta=min(nMaxPos/100,nMaxPos-m_nScrollPos);
打破
案例SB_阵容:
if(m_nScrollPos=nMaxPos)
返回;
nDelta=min(nMaxPos/10,nMaxPos-m_nScrollPos);
打破
案例SB_位置:
nDelta=(int)nPos-m_nScrollPos;
打破
案例SB_页面:
if(m_nScrollPos=nMaxPosH)
返回;
nDeltaH=min(nMaxPosH/100,nMaxPosH-m_-nScrollPosH);
打破
案例SB_左:
if(m_nScrollPosH=nMaxPosH)
返回;
nDeltaH=min(nMaxPosH/10,nMaxPosH-m_-nScrollPosH);
打破
案例SB_位置:
nDeltaH=(int)nPos-mnscrollposh;
打破
案例SB_左:
if(m_nScrollPosH)很难看出ScrollWindow()可以做什么,但交换这两个参数或只是去掉它听起来像是一个解决方案;