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. 46黑名单显示的bug---(优化ListView)convertView复用带来的问题

    是这种需求: 在黑名单的列表中前三个显示特殊的颜色,后面的列表显示其它的颜色,如图: 可是当翻到第二屏的时候.我们发现了: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...

  2. STSR round#1

    乱搞玩出新高度.....#1

  3. 墙内安装nautilus-dropbox 1.6.0-2

    软件包:nautilus-dropbox 版本号:1.6.0-2 # aptitude install nautilus-dropbox # less `which dropbox` 查找到下载链接: ...

  4. Jquery学习笔记: attr和 prop的区别,以及为html标签自定义属性

    一.自定义html标签属性 对于html文件中的html标签,可以自定义属性,如: <a href="#" id="link1" action=" ...

  5. JRE 和 JDK 的区别是什么?

    JRE: Java Runtime Environment JDK:Java Development Kit JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库.是使用java ...

  6. 基于visual Studio2013解决C语言竞赛题之1004平均值

     题目 解决代码及点评 /************************************************************************/ /* 4. 编一个程序, ...

  7. Bertelsmann Asia Investments, 简称BAI

    聚焦龙宇:贝塔斯曼的中国风险投资之路 _财经_腾讯网 贝塔斯曼亚洲投资基金(Bertelsmann Asia Investments, 简称BAI )

  8. stringstream clear()的疑问 - yuanshuilee的日志 - 网易博客

    stringstream clear()的疑问 - yuanshuilee的日志 - 网易博客 stringstream clear()的疑问   2013-09-05 08:43:13|  分类: ...

  9. 手游接入Facebook的那些坑

    之前工作须要在手游中接入了facebook,并以此写了<手游接入Facebook功能>的博文.当时facebook sdk的版本号还是3.x.代码集成度比較低.集成起来也比較麻烦.文中仅仅 ...

  10. PCI-X总线

    PCI-X接口是并连的PCI总线(Peripheral Components Interconnect)的更新版本号,仍採用传统的总线技术,只是有很多其它数量的接线针脚, 同一时候,如前所述的全部的连 ...