VC_语言中增强对话框功能的方法

显示的文字和图形资料都是在设备环境中显示的。计算机的内存都比较大,可以用来存放比对话框设备环境大得多的位图,因此创建一个与显示器设备环境兼容的内存设备环境,设置与内存设备环境相对应的位图,该位图的尺寸根据需要显示的内容大小而定,事先把需要显示的超过对话框尺寸的文字和图形资料,写入这个位图中。把对话框窗口当作显示窗口,当移动滚动条时,计算相应的移动量,据此计算出内存设备环境中对应的内容,同时把对应的内容拷贝到实际的对话框对应的设备环境中,从而实现显示内容随滚动条的移动作相应改变的功能。
2.实现步骤
在资源向导中增加一对话框,点击鼠标右键,在Properties中选择Style属性页,选择其中的Horizontal Scroll 和Vertical Scroll选项,从而在对话框右侧和下边增加了垂直滚动条和水平滚动条,如图1所示。同时按Ctrl和W,启动MFC类向导,添加一个新类,其类名本文中以CDlgDisp为例,此时在工作区的类向导中,增加了一个新类CDlgDisp。
1) 在类中增加两个公有变量CDCmemDC和CRect rcClient
在工作区类向导的CDlgDisp类名上,点击鼠标右键,在弹出的环境菜单中,选择Add Member Variable,在该类中增加两个公有变量CDC memDC和CRect rcClient。其中的CDC memDC,对应设计思想中提到的申请内存设备环境的变量,CRect rcClient是一个矩形框,是与内存设备环境相对应、与当前客户区兼容的位图尺寸。
2) 增加OnInitDialog()函数和OnTimer()函数
在CDlgDisp类名上,点击鼠标右键,在弹出的环境菜单中,选择AddWindows Message Handler,在弹出的对话框里选择WM_INITDIALOG和WM_TIMER两个选项,点击AddHandler,在类中增加OnInitDialog()函数和OnTimer()函数。
郑州轻工业学院科研基金项目(编号:20041101053)
三星m7500
VC++语言中增强对话框功能的方法
闵玉瑾1  张法全2
街头三维立体画1.河南四建股份有限公司  475002
2.郑州轻工业学院电气信息工程学院  450002
在任何Windows开发者的工具中,对话框是一种最常用的工具,因为它可以用于各种各样的目的。对话框的最普遍的用途是允许用户将消息输入应用程序中,通常情况下,用户还可以确认或取消输入的消息;对话框的另一用途是用来显示各种内容,如对用户输入消息的反应,或用户需要的运算结果等。大多数情况下,对话框的大小能够容纳用户需要的显示内容,但有时当需要显示的内容较多时,对话框无法完全显示,这时就需要对话框具有垂直滚动条和水平滚动条,使得显示内容能够随着滚动条的滚动,作相应的移动,显示出用户关心的部分。VC++中提供的对话框,虽然可以在其属性中选取带有垂直滚动条和水平滚动条的功能,但只是在对话框右边和下边增加了滚动条,对话框的内容却无法随滚动条的移动而作相应的改变,这成为很多VC++ 程序开发者的遗憾,本文设计了一种方法,在对话框中实现了显示内容随滚动条的移动作相应改变的功能。
1.设计思想
对话框窗口对应实际的设备环境,平
3) 增加OnVScroll()函数和OnHScroll()函数
在CDlgDisp类名上,点击鼠标右键,在弹出的环境菜单中,选择AddWindows Message Handler,在弹出的对话框里选择WM_VSCROLL和WM_HSCROLL两个选项,点击AddHandler,在类中增加OnVScroll()函数和OnHScroll()函数。这两个函数主要是为了响应垂直滚动条和水平滚动条的移动。
4) 在OnInitDialog()中启动定时器把定时器放在OnInitDialog()中启动,是为了留出一定的时间,使对话框完整的设置完成后,再进行下面的工作。定时器的启动由下面两句完成,其中设定时器的ID为1,间隔启动时间为100ms。
int m_nTimer = SetTimer(1, 100,NULL);
ASSERT (m_nTimer != 0);
5) 在该类中增加一公有函数TableOutput()
在CDlgDisp类名上,点击鼠标右键,在弹出的环境菜单中,选择AddMember Function,在该类中增加一个公有函数,本文中函数名取为TableOutput()。在公有函数TableOutput()中,完成主要的工作,包括与对话框设备环境兼容的内存设备环境的创建,对话框窗口尺寸的取得,在内存设备环境中绘图用到的位图的创建,以及各种文字和图形资料的输出等。
6) 写定时器函数内容
在定时器函数OnTimer()中,输入以下内容:
KillTimer(nIDEvent); //关闭定时器,该定时器在本方法中起到延时的作用。
TableOutput(); //调用函数
图1  选择对话框属性
7) 写公有函数TableOutput()内容
BOOL DlgDisp::TableOutput(LPCTSTR filename)
rcClient=CRect(0,0,1500,1200);//设置位图大小,该尺寸依需
要而定,能完全容纳要显示的内容。
CClientDC clientDC(this);
memDC.CreateCompatibleDC
(&clientDC);
//获得当前客户区范围,创建与客户区兼容的内存设备环境。
CBitmap memBitmap;    int temp;
temp=memBitmap.CreateCompatibleBitmap(&clientDC,rcClient.Width(),rcClient.Height( ));
ASSERT(temp!=0);
//创建一个与客户区兼容的位图,将它用作绘画的画布,第一个参数告诉与位图一起使用的设备环境的种类,以此作基准去了解位图应支持多少种颜,第二、第三个参数指定所需的位图尺寸。
memDC.SelectObject
(&memBitmap);
//将该位图选入设备环境中,在内存设备环境中工作都将使用这一位图。
CBrush brBrush;
brBrush.CreateSysColorBrush
(COLOR_3DFACE);
//使用按钮表面颜创建一刷子COLORREF
crColorBG=GetSysColor(COLOR_3DFACE);
CRect rcRect1(rcClient.TopLeft(),
rcClient.BottomRight());
memDC.FillRect(rcRect1,
&brBrush);
//用创建的刷子填充整个内存设备环境,原默认值为0,显示为黑,现改为按钮表面颜。
CFont *pOldFont=NULL;
memDC.SetBkColor(crColorBG);//设置字体背景与现有的颜相同。
……
//此处创建要求的笔,按需要的内容画线及填写数据。
clientDC.BitBlt(0,0,rcClient.Width(),rcClient.Height(), &memDC, 0, 0,XRCCOPY);
//BitBlt函数用于从内存设备环境向
显示设备环境复制数据。前两个参数是对话框左上角的x坐标和y坐标,第三个和第四个参数是对话框的宽度和高度,第五个参数是内存设备环境,第六个和第七个参数是内存设备环境中要显示内容的左上角的x坐标和y坐标。
8) 垂直滚动条函数
void CDlgDisplay::OnVScroll(UINTnSBCode, UINT nPos, CScrollBar*pScrollBar)
{CClientDC clientDC(this);
int nCurrentPos=GetScrollPos
(SB_VERT);
int nCurrentPosHorz=GetScrollPos
(SB_HORZ);
//得到当前垂直滚动条和水平滚动条的位置。
int offset1=1,offset2=10;switch(nSBCode){case SB_THUMBTRACK:case SB_THUMBPOSITION:
SetScrollPos(SB_VERT,
nPos, TRUE);
break;
case SB_LINEUP:nCurrentPos=nCurrentPos-offset1;
SetScrollPos(SB_VERT,
nCurrentPos, TRUE);
break;
case SB_LINEDOWN:nCurrentPos=nCurrentPos+off
set1;
SetScrollPos(SB_VERT,
nCurrentPos, TRUE);
break;
case SB_PAGEUP:nCurrentPos=nCurrentPos-offset2;
SetScrollPos(SB_VERT,
nCurrentPos, TRUE);
break;
case SB_PAGEDOWN:nCurrentPos=nCurrentPos+offset2;
SetScrollPos(SB_VERT,
nCurrentPos, TRUE);
break;
//判断当前对垂直滚动条的操作,进行相应的处理。
clientDC.BitBlt(0, 0, rcClient.扬州大学 
Width(), rcClient.Height(), &memDC,
nCurrentPosHorz * 4, nCurrentPos * 4,SRCCOPY);
//从内存设备环境中复制相应区域的内容,到对话框所在的显示区域。华丰煤矿吧
中文译音
9) 水平滚动条函数
对水平滚动条的各种运动,包括水平滑块的整体移动、点击左右箭头时单位移动等,进行对应的操作。基本操作和垂直滚动条的内容类似,不再单独列出。
10) 鼠标滚轮的对应操作菲茨杰拉德
计算机用户已经习惯于鼠标的应用,因此增加对鼠标滚轮的操作响应。和前面介绍的方法类似,在CDlgDisp类中增加与WM_MOUSEWHEEL事件对应的OnMouseWheel()函数,该函数响应鼠标滚轮滚动的操作,具体内容和上面介绍的垂直滚动条操作内容相似,由于篇幅限制,不做详细讲解。
3.结论
本文介绍了增强VC++语言中对话框功能的方法,详细说明了使用步骤,包括增加各种消息映射函数:OnInitDialog、OnTimer、OnHScroll、OnVScroll、OnMouseWheel等,以及添加公有变量,重点说明了如何创建与显示器设备环境兼容的内存设备环境,设置与内存设备环境相对应的位图,把对话框窗口当作显示窗口,当移动滚动条时,计算相应的移动量,据此计算出内存设备环境中对应的内容,然后把对应的内容拷贝到实际的对话框对应的设备环境中,从而实现了显示内容随滚动条的移动作相应改变的功能。程序已在Windows操作系统上运行通过,效果良好。

本文发布于:2024-09-22 01:05:41,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/576631.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:环境   对话框   设备   内存   显示   内容   位图
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议