1.设置滚动条的滚动大小

创建一个基于CScrollview的SDI Project(在第6步中选CScrollview) 
若你已创建了,这步可以省略。 
然后: 
改为如 
void CTestView::OnInitialUpdate() 

CScrollView::OnInitialUpdate();

CSize sizeTotal; 
// TODO: calculate the total size of this view 
sizeTotal.cx = 1024;  //改这两个 
sizeTotal.cy = 768;   // 
SetScrollSizes(MM_TEXT, sizeTotal); 
}

2.滚动条的控制

BOOL CDiagramShowView::PreTranslateMessage(MSG* pMsg)

{

CFileTreeDoc* pDoc = (CFileTreeDoc*)GetDocument();

CPoint point = GetScrollPosition();

if(pMsg->message == WM_KEYDOWN)

{

switch(pMsg->wParam)

{

case VK_LEFT:

if( point.x > 10)

{

EndPoint.x = EndPoint.x - 10;

EndPoint.y = EndPoint.y;

}

else

{

EndPoint.x = 0;

EndPoint.y = EndPoint.y;

}

ScrollToPosition(EndPoint);

InvalidateRect(NULL,TRUE);

break;

case VK_RIGHT:

if( point.x < pDoc->intDiagramColumnCount * pDoc->intColumnWidth - 10 )

{

EndPoint.x = EndPoint.x + 10;

EndPoint.y = EndPoint.y;

}

else

{

EndPoint.y = pDoc->intDiagramColumnCount * pDoc->intColumnWidth;

EndPoint.x = EndPoint.x;

}

ScrollToPosition(EndPoint);

InvalidateRect(NULL,TRUE);

break;

case VK_UP:

if( point.y > 10)

{

EndPoint.y = EndPoint.y - 10;

EndPoint.x = EndPoint.x;

}

else

{

EndPoint.y = 0;

EndPoint.x = EndPoint.x;

}

ScrollToPosition(EndPoint);

InvalidateRect(NULL,TRUE);

break;

case VK_DOWN:

if( point.y < pDoc->intDiagramRowCount * pDoc->intRowHeight - 10 )

{

EndPoint.y = EndPoint.y + 10;

EndPoint.x = EndPoint.x;

}

else

{

EndPoint.y = pDoc->intDiagramRowCount * pDoc->intRowHeight;

EndPoint.x = EndPoint.x;

}

ScrollToPosition(EndPoint);

InvalidateRect(NULL,TRUE);

break;

default:

break;

}

}

return FALSE;

}

// 通过正负号判断是向上还是向下滚动

if(zDelta==120)

向上滚动
if(zDelta==-120)
向下滚动

BOOL CDiagramShowView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)

{

CFileTreeDoc* pDoc = (CFileTreeDoc*)GetDocument();

CPoint point = GetScrollPosition();

if(zDelta==120)

{

if( point.y >= 20 )

{

EndPoint.x = point.x;

EndPoint.y = point.y;

EndPoint.x = EndPoint.x;

EndPoint.y = EndPoint.y - 20;

}

else

{

EndPoint.x = EndPoint.x;

EndPoint.y = 0;

}

}

if(zDelta==-120)

{

if( point.y <= pDoc->intDiagramRowCount * pDoc->intRowHeight - 20 )

{

EndPoint.x = point.x;

EndPoint.y = point.y;

EndPoint.x = EndPoint.x;

EndPoint.y = EndPoint.y + 20;

}

else

{

EndPoint.x = EndPoint.x;

EndPoint.y = EndPoint.y;

}

}

ScrollToPosition(EndPoint);

InvalidateRect(NULL,TRUE);

return CScrollView::OnMouseWheel(nFlags, zDelta, pt);

}

3.给从CWnd派生的窗口添加滚动条

ModifyStyle(0,WS_VSCROLL);

4.如何用键盘滚动分割的视口

我的问题是当我用鼠标滚动分割窗口时,视口滚动都很正常,但用键盘时,却什么也没有发生.

在你的视图继承类中加入如下两个函数,假定该类为CScrollerView:

void CScrollerView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
        BOOL processed;
        for (unsigned int i=0;i< nRepCnt&&processed;i++)
                processed=KeyScroll(nChar);
        if (!processed)
           CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}

BOOL CScrollerView::KeyScroll(UINT nChar)
{
        switch (nChar)
                {
                case VK_UP:
                        OnVScroll(SB_LINEUP,0,NULL);
                        break;
                case VK_DOWN:
                        OnVScroll(SB_LINEDOWN,0,NULL);
                        break;
                case VK_LEFT:
                        OnHScroll(SB_LINELEFT,0,NULL);
                        break;
                case VK_RIGHT:
                        OnHScroll(SB_LINERIGHT,0,NULL);
                        break;
                case VK_HOME:
                        OnHScroll(SB_LEFT,0,NULL);
                        break;
                case VK_END:
                        OnHScroll(SB_RIGHT,0,NULL);
                        break;
                case VK_PRIOR:
                        OnVScroll(SB_PAGEUP,0,NULL);
                        break;
                case VK_NEXT:
                        OnVScroll(SB_PAGEDOWN,0,NULL);
                        break;
                default:
                        return FALSE; // not for us
                             // and let the default class
                             // process it.
                }
   return TRUE;
}

积累的VC编程小技巧之滚动条的更多相关文章

  1. 积累的VC编程小技巧之文件操作

    1.删除文件夹 // 删除文件夹及其所有内容void CBaseDoc::RemoveFolder(const CString &strPathName){    CString path = ...

  2. 积累的VC编程小技巧之按钮

    1.资源种创建的控件,对其属性的动态控制: 在对话框类的头文件里创建所要改变属性的控件的对象,如要改变一个Button(其ID为IDC_MyButton)的属性,则需创建Cbutton的对象m_but ...

  3. 积累的VC编程小技巧之框架窗口及其他

    1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名.窗口是叠加型的.可改变窗口大小等.要修改窗口的缺省风格,需要重载CWnd::Pre ...

  4. 积累的VC编程小技巧之打印相关

    1.修改打印预览的ToolBar 为AFX_IDD_PREVIEW_TOOLBAR这个ID创建一个DialogBar.则系统就会用新创建的DialogBar代替系统默认的那个 2.关于打印 1.要打印 ...

  5. 积累的VC编程小技巧之编辑框

    1.如何让对话框中的编辑框接收对话框的消息 ////////////////////////////////////////////////// 如何让对话框中的CEdit控件类接收对话框的消息/// ...

  6. 积累的VC编程小技巧之标题栏和菜单

    1.窗口最大最小化按纽的控制 ①怎样在程序开始的时候让它最大化? ②vc++做出来的exe文件在窗体的右上方是没有最大化和最小化按钮的,怎样实现这一功能? ③如何在显示窗口时,使最大化按钮变灰?   ...

  7. 积累的VC编程小技巧之图标、光标及位图

    1.图标透明 (1).Windows中的图标其实是有两个图像组成的,其中一个用于与它要显示的位置的图像做“AND”操作,另一个作“XOR”操作. 透明:用“白色”AND,用“黑色”XOR 反色:用“白 ...

  8. 积累的VC编程小技巧之视图

    1.如何得到视图指针 [问题提出]    现在你有一个多线程的Demo,你想在多线程里处理视图指针里的函数,我们给这个函数起个名字:Put();该如何实现呢?   //有两种方法可以实现你的要求:   ...

  9. 积累的VC编程小技巧之对话框

    1.用鼠标移动基于对话框的无标题栏程序的简单方法 void CVCTestDlg::OnLButtonDown(UINT nFlags, CPoint point) {    //一句话解决问题    ...

随机推荐

  1. quant_百度百科

    quant_百度百科     quant    编辑    quant的工作就是设计并实现金融的数学模型(主要采用计算机编程),包括衍生物定价,风险估价或预测市场行为等.所以quant更多可看为工程师 ...

  2. 安装虚拟机时出现The Microsoft Runtime DLL

    参考文档: http://zhidao.baidu.com/link?url=1E4vr6ToPGm_kAZw4voOqzrPtzGaSIqy3kvcGXehs3KJAkirNKOHJbrsxec3f ...

  3. 结构体中使用#define定义宏

    struct  hostent {   char    *h_name;        /* official name of host */   char    **h_aliases;    /* ...

  4. BZOJ 1047: [HAOI2007]理想的正方形( 单调队列 )

    单调队列..先对每一行扫一次维护以每个点(x, y)为结尾的长度为n的最大最小值.然后再对每一列扫一次, 在之前的基础上维护(x, y)为结尾的长度为n的最大最小值. 时间复杂度O(ab) (话说还是 ...

  5. 知识点1-3:MVC设计模式

    MVC代表模型-视图-控制器(Model-View-Controller),起源于20世纪70年代的Smalltalk开发社区,2003年起随着Ruby on Rails的出现才在Web上流行使用. ...

  6. 通过DWR简化AJAX开发

    DWR(Direct Web Remoting)是一个WEB远程调用框架,采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码.这样WEB开发人员就可以在JavaScrip ...

  7. jquery $.post

    jQuery.post() jQuery.post( url [, data ] [, success ] [, dataType ] )Returns:jqXHR Description: Load ...

  8. C语言,const

    const意味着“只读” ubunto下的实验 1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的.如果你曾花很多时间清理 ...

  9. Shell脚本笔记

      如何查询文件里的某个字符串? grep “字符串” 文件 例:grep "abc" tmp.txt   如何将查询出来的内容赋给变量? str=$(grep "abc ...

  10. 面试中关于Java中涉及到知识点(转)

    本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些, ...