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

原创 2001年06月13日 11:46:00

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

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


  一、选择方法


  通常,我们可以在对话框的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();

   file://隐藏对话框

   ShowWindow(SW_HIDE);

   CRect dlgRect;

   GetClientRect(&&dlgRect);

   CPoint centerPoint;

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

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

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

   CRgn testrgn;

   this-〉ShowWindow(SW_HIDE);

   int m=GetSystemMetrics(SM_CYSIZEFRAME);

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

   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;

  }

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


  三、深入讨论


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

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

  在“网络蚂蚁”中,如果在下载过程中有错误发生,或是提示下载完成时,你都可以在屏幕中央看到一个由小变大、动态弹出的对话框,那么,这个动态弹出的对话框是如何实现的呢?   一、选择方法   通常,我们...
  • bingwen0210
  • bingwen0210
  • 2007年04月24日 12:02
  • 581

VC++中在对话框中动态显示图片

VC中要是想动态显示个图片是很麻烦的,可不是设置个文件路径就简单完事的。网上的资料很多,但是都是出于同一个地方,学习来的看不懂的还是看不懂。而且有些地方存在问题。所以我想把这个教程稍微完善下,不方便公...
  • buaaxiao
  • buaaxiao
  • 2010年08月13日 15:58
  • 6205

vc 关闭对话框几种方法

vc 关闭对话框几种方法注:以下代码以一个名为CTest6Dlg的对话框类为例 在任务栏隐藏对话框 ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDO...
  • form88
  • form88
  • 2015年07月26日 09:55
  • 1882

如何实现vc菜单弹出对话框

本文例子是一个典型的C++/MFC对话框程序,设置了 EX_WM_TOOLWINDOW 扩展式样,因此在标题栏左上角看不到系统菜单图标,但通过 Ctrl+Space 或者在标题栏单击鼠标右键可以调出系...
  • m372897500
  • m372897500
  • 2011年08月17日 11:51
  • 761

【VC】Dialog 窗口任意分割子窗口。

用 Dialog 对话框来实现窗口的任意分割。 在资源中添加  Dialog 选择  IDD_FORMVIEW 资源。。分别新建FormViewOne,FormViewTwo FormViewTh...
  • shen_wei
  • shen_wei
  • 2014年11月06日 11:14
  • 4146

VC++修改对话框颜色方法

在软件开发中,出于界面的美观或是别的目的我们需要修改对话框的颜色,这时我们可以通过如下方法来达到目的。 注:本例使用VC++2010测试, 以下第一种方法不适合该版本的VC++库。...
  • xbmoxia
  • xbmoxia
  • 2014年09月10日 16:48
  • 1381

VC++设置对话框显示的起始位置

假设自定义的对话框类名称是CUserDialog,那么添加一个ON_WM_SHOWWINOW()消息映射,并调用SetWindowPos或者MoveWindow: void CTSTPOG::OnS...
  • generalhking
  • generalhking
  • 2013年08月27日 11:09
  • 1497

VC++对话框的任意扩展

  我们在信息输入的时候,可能有很大的信息量,而这些信息又不是必须的,这时我们就需要给信息输入人员一个选择的接口。例如一个人事部门的职工信息录入系统就有这样的问题 ,其中的姓名、性别、年龄、政治面目、...
  • mynote
  • mynote
  • 2005年03月09日 08:55
  • 1624

点击按钮后弹出新的对话框

1. 在资源编辑框插入新的对话框,右键新对话框添加新类,注意Base Class要选CDialog:   2. 设置新Dialog属性,Style: Popup   3. 将新对话框的类的头文件添加...
  • phenixyf
  • phenixyf
  • 2014年12月05日 18:48
  • 1657

MFC让对话框窗口始终在最前&MFC弹出非模态对话框

方法一:在对话框的属性中,在more   style中有一项是System   model,选上它,即可! 方法二:OnInitDialog里加入SetWindowPos(&wndTopMost,0,...
  • l198738655
  • l198738655
  • 2017年07月06日 09:33
  • 570
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用VC制作动态弹出的对话框
举报原因:
原因补充:

(最多只允许输入30个字)