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. mojo 接口返回键值对的json格式

    my $c = shift; use DBI; my %hash=(); my $dbUser='zabbix'; my $user="root"; my $passwd=&quo ...

  2. LTP介绍

    1.LTP介绍    LTP--linut test project ,ltp套件是由Linux Test Project所开发的一套系统測试套件.它基于系统资源的利用率统计开发了一个測试的组合,为系 ...

  3. DP HDIJ1421 搬宿舍

    Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆, ...

  4. 前端开发工具(安装及常用技巧)——sublime text 3

    安装 官方下载地址:http://www.sublimetext.com Sublime Text 3 一大优势就是跨平台(Windows.Linux.OS X 都有):portable versio ...

  5. 摘抄python __init__

    注意1.__init__并不相当于C#中的构造函数,执行它的时候,实例已构造出来了. 1 2 3 4 5 class A(object):     def __init__(self,name):   ...

  6. jsp页面格式化数字或时间

    Tags   fmt:requestEncoding fmt:setLocale fmt:timeZone fmt:setTimeZone fmt:bundle fmt:setBundle fmt:m ...

  7. 分析内存使用情况 (JavaScript)

    [此文档是初定版,随时可能进行更改.] JavaScript 内存分析器在 Visual Studio 2012 更新 1 和 Visual Studio 2013 中提供,旨在帮助你了解内存使用量和 ...

  8. SQL Server截取字符串和处理中文技巧

    一 环境介绍 SQL  Server PRINT @@VERSION MicrosoftSQLServer2012-11.0.2100.60(X64) Feb10201219:39:15 Copyri ...

  9. UF访问,一些对用友最新的旗舰级产品U9一些引进(图像)

    昨天,北京用友公司的本地UF马平之和几个同事总和.并且e创客网站访问者创始人江.双方进行了友好的交流.首先,我们公司的历史.销售.或产品介绍. 然后.用友分公司的总水平介绍了用友的情况下,,马总介绍了 ...

  10. UML看书笔记1:主体思想

    对象设计需要解决的三大问题:      1.把“现实世界”映射到“对象世界”      2.从“对象世界”描述“现实世界”      3.验证“对象世界”是否反映了“现实世界” 现实世界与我们的对象世 ...