Visual C++中建立滚动视窗

2016-02-19 13:57 2 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享Visual C++中建立滚动视窗,希望可以对大家能有小小的帮助。

【 tulaoshi.com - 编程语言 】

滚动视窗在应用程序中十分有用,它可以使用户看到比显示器屏幕还大的窗口。下面有一个建立滚动视窗的实例,在该例中,不仅滚动条会与视窗相连,而且HOME、PAGE DOWN、PAGE UP和END方向键会与视窗相连。现将本例中需用到的函数和类作一些必要的说明。

CscrollView类:它是从Cview类派生出来的,可以支持窗口的滚动。

GetsystemMetrics函数:它是Window中的函数,可以返回Windows显示屏幕的高度和宽度。

OnCreate函数:若Windows发送调用。每次应用要求创建一个窗口时,WM-CREATE消息都会被发送。在本例中,Onc WM-CREATE消息,在本例中,Oncreate函数完成一些字初始化操作,如:设置窗口的大小,页的大小和滚动行的大小。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

SetScrollSizes它是滚动视窗在初始阶段必要的CscrollView类的成员函数。

该程序的目的是建立一个三倍于屏幕的宽度和高度的大窗口,且有视窗的中央显示出一个大的矩形,视窗最大化时,用户只能看到矩形的1/9。通过滚动条或方向键,用户寸可以见到它的全貌,以下是建立滚动视窗的步骤:

1、运行AppWizard来创建EX例程,其中的Options选项设为lnital Toolbar和Generate Source Comments。

2、替换CEXCView类,用Visual Workbench的编辑器将ExView.h和ExView.cpp中所有的CVIEW替换成CScrollView。

3、利用ClassWizard来加进对WM-CREATE和WM-KEYDOWN消息进行控制的函数,CLassWizard能够自动地生成Oncreate和OnkeyDown成员函数。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

4、对消息控制函数进行编辑。因为ClassWizard已经自动地为我们生成了函数的框架,因此,用户只需找到这些框架加入代码即可。
在OnCreate函数的returm-1语句后中加入代码:

Csize totalSize=Csize(::GetSystemMetrics(SM-CXSCREEN)*3,
::GetSystemMetrics(SM-CYSCREEN)*3);
Csize pageSize=Csize(totalSize.cx/3,totalSize.cy/3);
Csize lineSize=Csize(totalSize.cx/100,totalSize.cy/100);
SetScrollSizes(MM-TEXT,totalSize,pageSize,lineSize);
在OnKeyDowm函数中加入代码:
switch(nChar){
case VK-HOME:
OnScroll(SB-VERT,SB-TOP,0);
OnScroll(SB-HORZ,SB-TOP,0);
break;
case VDK-END:
OnScroll(SB-VERT,SB-BOTTOM,0);
break;
case VK-UP:
OnScroll(SB-VERT,SB-LINEUP,0);
break;
case VK-DOWN:
OnScroll(SB-VERT,SB-LINEDOWN,0);
break;
case VK-PRIOR;
OnScroll(SB-VERT,SB-PAGEUP,0);
break;
case VK-NEXT;
OnScroll(SB-VERT,SB-PAGEDOWN,0);
break;
case VK-LEFT;
OnScroll(SB-HORZ,SB-PAGEUP,0);
break;
case VK-RIGHT;
OnScroll(SB-HORZ,SB-PAGEDOWN,0);
break;
default:
break;
}
在OnDraw函数中加入以下代码来代替OnDraw函数中原来的代码:
int x=::GetSystemMetrics(SM-CXSCREEN);
int y=::GetSystemMetrics(SM-CYSCREEN);
pDC-SelectStockObject(GRAY-BRUSH);
pDC-Rectangle(Crect(x-300,y-300,x+300,y+300));

5、创建,执行程序,在Visual Workench中,在Project菜单中选择Build,然后再选择Execute,程序就会在滚动视窗中显示一个大的正方形,用户可以通过滚动条和HOME等方向键来观察它。

来源:https://www.tulaoshi.com/n/20160219/1605769.html

延伸阅读
“N次失败,1次成功,还学的不怎么样……你也太笨了吧!”假如您有这样的评价,那么祝贺您,您已经了解了我这人的99.9%。N这个数字具体是多少连我自己也记不清楚,保守地讲(N≥6==TRUE)这个表达式是能够成立的。 !-- frame contents -- !-- /frame contents -- 回想我的VisualC++入门过程,一路过来,绝对不是像黄飞鸿的功夫那...
用过C++进行过面向对象程序设计的用户都知道,程序中的对象很少单独存在。不考虑对象间的相互作用几乎是不可能的。所以,标识对象间的关系或建立对象间的消息连接是面向对象程序设计的一项重要任务。         本文着重从C++程序设计的角度,提出一种建立对象间消息连接的实用方法。假如你想具体了解面...
摘要:本文讨论基于套接字(socket)的体系结构以及怎样建立一个高效的、易于使用的、可以同时在PC和Pocket PC上运行的消息传递(message-passing)系统。 套接字和消息 目前,大多数Web服务和所有的远程应用程序都使用了远程过程调用(remote-procedure-call,RPC)方法。你所做工作好像是在调用一个函数,但是在其后台执行了大...
利用利用CPUID 汇编指令(机器码:0FH A2H, 如果你的编译器不支持CPUID 指令,只有emit 机器码了), 该指令可以被如下CPU识别: Intel 486 以上的CPU, Cyrix M1 以上的CPU, AMD Am486 以上的CPU (1) 取CPU OEM 字符串, 判断CPU 厂商 先让EAX=0, 再调用CPUID Inel的CPU将返回: EBX:756E6547H 'Genu&...
1. 用Microsoft Visual C++ 6.0编译的程序,或者发布在Windows 2000/NT/ME/98 系统 单纯通过拷贝MSVCRxx.DLL文件到应用程序目录或system32目录即可 2. 用Visual Studio 2005以上编译的程序,且发布在Windows XP及以上系统 为了减少DLL引发的配置问题(DLL hell),C和C++运行时由并行 (Side-by-Side) 程序集实现,单纯通过拷贝MSVCRxx.DLL并不...

经验教程

801

收藏

68
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部