用VC制作动态弹出的对话框
来源:互联网 发布:php前端页面 编辑:程序博客网 时间:2024/06/02 17:00
一、选择方法
通常,我们可以在对话框的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+2m;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;
}
该程序的代码比较简单,编译之后进入程序的帮助选单,你会看见一个由小变大的对话框跃然于屏幕之上。
通常,我们可以在对话框的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+2m;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制作动态弹出的对话框
- 用VC制作动态弹出的对话框
- 用VC制作动态弹出的对话框
- blackberry弹出对话框的制作
- 用VC制作“每日提示”对话框
- 用VC制作“每日提示”对话框
- C++ 动态窗口的弹出的制作
- VC 弹出选择文件夹对话框
- vc 右下角弹出提示对话框
- VC弹出“选择文件夹”对话框的程序的编写
- VC弹出“选择文件夹”对话框的程序的编写
- VC自动关闭弹出的MessageBox对话框的总结
- VC/MFC对话框的动画弹出和动画消隐
- 屏蔽VC对话框中点击FLASH弹出的右键菜单
- VC++改变对话框的背景色和VC++制作伸展自如、收缩随意的对话框
- qTip2动态生成弹出对话框
- 实现弹出动态气泡对话框
- VC制作使用图片做为背景的对话框
- 项目管理之我见---第一篇 开头
- TCP/IP协议分析-协议分层
- 顾问成长(6)-其貌不扬就不能做顾问?
- OSI七层网络模型与TCP/IP四层网络模型
- iret
- 用VC制作动态弹出的对话框
- Hibernate关联映射—组件映射
- eclipse 快捷键说明
- 分享的文章《人生如棋》
- 关于二代身份证照片回执
- qt中unicode的使用 以及微软unicode函数的使用
- JAVA 实现曝光后的画线效果!!
- Windows Vista For Dummies Quick Reference
- Amazon.com Mashups