3652|3

86

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

滚动条为什么不动啊? [复制链接]

同样的代码在vc6.0下没有任何问题,而在evc滚动条就没有任何反应,这是为什么啊?

最新回复

hdm
楼上说的对,你这样帖一段代码来,既然你调试通过了说明没太大问题,你自己跟踪下代码定位下问题  详情 回复 发表于 2007-11-9 08:45
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
代码如下:
void CMy1021Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
        // TODO: Add your message handler code here and/or call default
        int nDelta;
        switch(nSBCode)
        {
        case SB_LINEUP:
                nDelta=-LINESIZE;
                break;
        case SB_PAGEUP:
                nDelta=-m_nVPageSize;
                break;
        case SB_THUMBTRACK:
                nDelta=(int)nPos-m_nVScrollPos;
                break;
        case SB_PAGEDOWN:
                nDelta=m_nVPageSize;
                break;
        case SB_LINEDOWN:
                nDelta=LINESIZE;
                break;
        default:
                return;
        }
        int nScrollPos=m_nVScrollPos+nDelta;
        int nMaxPos=m_nViewHeight-m_nVPageSize;

        if(nScrollPos<0)
                nDelta=-m_nVScrollPos;
        else
                if(nScrollPos>nMaxPos)
                        nDelta=nMaxPos-m_nVScrollPos;

        if(nDelta!=0)
        {
                m_nVScrollPos+=nDelta;
                SetScrollPos(SB_VERT,m_nVScrollPos,TRUE);
                ScrollWindow(0,-nDelta);
        }
       
        CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

void CMy1021Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
        // TODO: Add your message handler code here and/or call default
    int nDelta;
        switch(nSBCode)
        {
        case SB_LINELEFT:
                nDelta=-LINESIZE;
                break;
        case SB_PAGELEFT:
                nDelta=-m_nHPageSize;
                break;
        case SB_THUMBTRACK:
                nDelta=(int)nPos-m_nHScrollPos;
                break;
        case SB_PAGERIGHT:
                nDelta=m_nHPageSize;
                break;
        case SB_LINERIGHT:
                nDelta=LINESIZE;
                break;
        default:
                return;
        }
        int nScrollPos=m_nHScrollPos+nDelta;
        int nMaxPos=m_nViewWidth-m_nHPageSize;

        if(nScrollPos<0)
                nDelta=-m_nHScrollPos;
        else
                if(nScrollPos>nMaxPos)
                        nDelta=nMaxPos-m_nHScrollPos;

        if(nDelta!=0)
        {
                m_nHScrollPos+=nDelta;
                SetScrollPos(SB_HORZ,m_nHScrollPos,TRUE);
                ScrollWindow(-nDelta,0);
        }
        CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

int CMy1021Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
        if (CDialog::OnCreate(lpCreateStruct) == -1)
                return -1;
       
        // TODO: Add your specialized creation code here
        CClientDC dc(this);
        m_nCellWidth=dc.GetDeviceCaps(LOGPIXELSX);
        m_nCellHeight=dc.GetDeviceCaps(LOGPIXELSX);
        m_nRibbonWidth=m_nCellWidth/2;
        m_nViewWidth=(26*m_nCellWidth)+m_nRibbonWidth;
        m_nViewHeight=m_nCellHeight*100;


        return 0;
}
void CMy1021Dlg::OnSize(UINT nType, int cx, int cy)
{
        CDialog::OnSize(nType, cx, cy);
        int nHScrollMax=0;
        m_nHScrollPos=m_nHPageSize=0;
        if(cx         {
                nHScrollMax=m_nViewWidth-1;
                m_nHPageSize=cx;
                m_nHScrollPos=min(m_nHScrollPos,m_nViewWidth-m_nHPageSize-1);
        }
        SCROLLINFO si;
        si.fMask=SIF_PAGE|SIF_RANGE|SIF_POS;
        si.nMin=0;
        si.nMax=nHScrollMax;
        si.nPos=m_nHScrollPos;
        si.nPage=m_nHPageSize;

        SetScrollInfo(SB_HORZ,&si,TRUE);

        int nVScrollMax=0;
        m_nVScrollPos=m_nVPageSize=0;

        if(cy         {
                nVScrollMax=m_nViewHeight-1;
                m_nVPageSize=cy;
                m_nVScrollPos=min(m_nVScrollPos,m_nViewHeight-m_nVPageSize-1);
        }
        si.fMask=SIF_PAGE|SIF_RANGE|SIF_POS;
        si.nMin=0;
        si.nMax=nVScrollMax;
        si.nPos=m_nVScrollPos;
        si.nPage=m_nVPageSize;

        SetScrollInfo(SB_VERT,&si,TRUE);
        // TODO: Add your message handler code here
       
}
///////////////////////////////////////////////////////////////////
int m_nCellWidth;
        int m_nCellHeight;
        int m_nRibbonWidth;
        int m_nViewWidth;
        int m_nViewHeight;
        int m_nHScrollPos;
        int m_nVScrollPos;
        int m_nHPageSize;
        int m_nVPageSize;
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你单步跟到处理滚动的代码看看吧。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

4
 
楼上说的对,你这样帖一段代码来,既然你调试通过了说明没太大问题,你自己跟踪下代码定位下问题
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表