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()可以做什么,但交换这两个参数或只是去掉它听起来像是一个解决方案;