• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

用VC制作动态弹出的对话框

发布: 2007-7-14 21:11 | 作者: 佚名    | 来源: 网络转载     | 查看: 108次 | 进入软件测试论坛讨论

领测软件测试网 作者:周鸣扬

  在“网络蚂蚁”中,如果在下载过程中有错误发生,或是提示下载完成时,你都可以在屏幕中央看到一个由小变大、动态弹出的对话框,那么,这个动态弹出的对话框是如何实现的呢?

  一、选择方法
  通常,我们可以在对话框的WM_INITDIALOG事件的响应函数中加入对话框的一些初始化设置,比如改变窗口的位置及大小。同样,我们也可以在WM_INITDIALOG事件的响应函数中让对话框由小到大地显示。但是,如何改变对话框的大小呢?在编程过程中,我们通常是利用MoveWindow函数来动态调整对话框的大小,但是MoveWindow函数有其局限性:一是它的速度较慢;二是由于众所周知的MFC内存泄漏的原因,如果重复调用MoveWindow函数来改变对话框的大小,MoveWindow不能够将屏幕清“干净”(这点你可以在实际编程中试一下),这显然不是我们所需要的。能不能找到一种其他的方法来快速地改变窗口大小呢?我们知道,用SetWindowRgn函数能够改变窗口的显示区域,那么,在对话框显示之前,让程序将对话框先隐藏起来,然后让对话框的显示区域不断变大,这样就实现了对话框的动态显示。

  在继续介绍之前,我们先来介绍一下SetWindowRgn的具体用法,以下是其调用格式:

  int SetWindowRgn( HRGN hRgn, BOOL bRedraw );

  hRgn:指向一区域的句柄,通常该参数是由CRgn对象创建的。

  bRedraw:指明在设定窗口显示区域之后系统是否进行窗口重绘操作。

  二、应用实例
  接下来我们以让程序的“帮助对话框”动态弹出为例,介绍如何通过编程的方式来实现对话框的动态弹出显示。在CAboutDlg类中加入对WM_INITDIALOG的映射,并编辑其响应函数OnInitDialog,该函数的具体内容设置如下:

  BOOL CAboutDlg::OnInitDialog()

  {

   CDialog::OnInitDialog();

   //隐藏对话框

   ShowWindow(SW_HIDE);

   CRect dlgRect;

   GetClientRect(&&dlgRect);

   CPoint centerPoint;

   centerPoint.x=dlgRect.Width()/2;

   centerPoint.y=dlgRect.Height()/2;

   //得到对话框的中点坐标

   CRgn testrgn;

   this-〉ShowWindow(SW_HIDE);

   int m=GetSystemMetrics(SM_CYSIZEFRAME);

   //以下代码实现对话框的动态弹出

   for (int i=10;i〈dlgRect.Width()/2+2m;i+=1)

   {

  testrgn.CreateRectRgn(centerPoint.x-i,centerPoint.y-i,centerPoint.x+i,centerPoint.y+i);

   SetWindowRgn((HRGN) testrgn,TRUE);

   ShowWindow(SW_SHOW);

   CenterWindow();

   testrgn.DeleteObject();

   }

   return TRUE;

  }

  该程序的代码比较简单,编译之后进入程序的帮助选单,你会看见一个由小变大的对话框跃然于屏幕之上。

  三、深入讨论
  需要说明的是,本文中主要的目的是介绍编程思路,所以在编程中是首先假定了帮助对话框是正方形或基本上是正方形的,如果你的帮助对话框的形状长宽比例较大,该程序在运行时的界面效果会不太理想。这时,你可以在编程中考虑按对话框的长宽比例来动态创建其他形状的显示区域。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网