平时我们常常能够看到非常多应用程序启动过程非常酷。什么百叶窗。渐变,各种效果,今天我们看一下怎样在程序中添加这样的效果。

一、演示样例展示:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbl9qaW50/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

二、演示样例思路:

1.首先介绍两个知识,一个是函数MoveWindow(),一个是定时器。

  •  函数MoveWindow():改变指定窗体的位置和大小.对顶窗体来说,位置和大小取决于屏幕的左上角;对子窗体来    说,位置和大小取决于父窗体客户区的左上角。函数原形例如以下:

BOOL MoveWindow(

                    HWND hWnd,

                    int X,

                    int Y,

                    int nWidth,

                    int nHeight,

                    BOOL bRepaint

                    );

  • 定时器:VisualC++自带的一个组件。能够依照一定的时间间隔周期性运行。详细的相关函数例如以下:

SetTimer()  :设置并启动定时器

               KillTimer() :关闭定时器

               OnTimer()   :定时器消息WM_TIMER对应函数

2.主要思路是。就是在窗体启动时,设置定时器,在定时器WM_TIMER对应函数中,不断地更新窗体。直到更新到我们预期的样子。

三、演示样例步骤:

1.在窗体初始化函数OnInitDialog()中。初始化窗体状态。设置定时器。

// CDynamicStartDlg メッセージ ハンドラー

BOOL CDynamicStartDlg::OnInitDialog()
{
CDialogEx::OnInitDialog(); // "バージョン情報..." メニューをシステム メニューに追加します。 // IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // このダイアログのアイコンを設定します。 アプリケーションのメイン ウィンドウがダイアログでない場合、
// Framework は、この設定を自動的に行います。 SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定 // TODO: 初期化をここに追加します。 //获取对话框窗体的大小
this->GetWindowRect(&m_dlgRect); //获取桌面窗体的大小
CWnd* pDestopWnd = GetDesktopWindow();
pDestopWnd->GetWindowRect(&m_destopRect); //初始化对话框的位置和大小(位置:桌面中心,大小:0)
MoveWindow(
(m_destopRect.Width()-m_dlgRect.Width())/2,
(m_destopRect.Height()-m_dlgRect.Height())/2,
0,
0); //设置定时器,并启动(5s)
this->SetTimer(1, 5, NULL); return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。 }

2.加入WM_TIMER的对应函数OnTimer(),在OnTimer()中更新窗体的状态。达到预期的样子时,就关闭定时器。

void CDynamicStartDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。 CRect dlgRect; //保存对话框窗体当前大小
static int offsetX = 2;//更新对话框窗体状态时的X增量
static int offsetY = 2;//更新对话框窗体状态时的Y增量 switch (nIDEvent)
{
case 1:
//获取对话框窗体当前的大小
this->GetWindowRect(&dlgRect);
//更新对话框的位置和大小(利用:offsetX,offsetY)
MoveWindow(
(-offsetX + m_destopRect.Width() - dlgRect.Width())/2,
(-offsetY + m_destopRect.Height() - dlgRect.Height())/2,
dlgRect.Width() + offsetX,
dlgRect.Height() + offsetY); //X方向达到对话框窗体预期值,停止添加
if (dlgRect.Width() >= m_dlgRect.Width()) offsetX = 0;
//Y方向达到对话框窗体预期值,停止添加
if (dlgRect.Height() >= m_dlgRect.Height()) offsetY = 0;
//X。Y都达到对话框窗体预期值,关闭定时器
if (dlgRect.Width() >= m_dlgRect.Width() && dlgRect.Height() >= m_dlgRect.Height())
{
this->KillTimer(nIDEvent);
}
default:
break;
}
CDialogEx::OnTimer(nIDEvent);
}

P.S提供文章演示样例代码:http://download.csdn.net/detail/chenjintaoxp/7639411

【VC编程技巧】窗口☞3.6以渐变效果加载对话框的更多相关文章

  1. VC编程技巧:IE控件的高级用法

    一.如何显示内存中的 HTML 网页 二.屏蔽 IE 控件的上下文菜单 三.扩展 HTML 脚本中的 external 对象 四.显示 HTML 样式的对话窗 五.执行 HTML 脚本 http:// ...

  2. iOS开发——图形编程Swift篇&CAShapeLayer实现圆形图片加载动画

    CAShapeLayer实现圆形图片加载动画 几个星期之前,Michael Villar在Motion试验中创建一个非常有趣的加载动画. 下面的GIF图片展示这个加载动画,它将一个圆形进度指示器和圆形 ...

  3. go语言使用go-sciter创建桌面应用(八) 窗口显示时,自动加载后端数据。

    有些时候我们需要在窗口创建并显示时,加载一些后端的配置,这就需要用到view提供的几个事件. https://sciter.com/docs/content/sciter/View.htm state ...

  4. 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面

    (一)概要: 文章描写叙述了如何通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于 ...

  5. 【VC编程技巧】窗口☞3.4利用bitmap改变对话框的背景。

    效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbl9qaW50/font/5a6L5L2T/fontsize/400/fill/I0JBQ ...

  6. 【VC编程技巧】文件☞2.3CArchive的用法

    CArchive 对象提供了一个类型安全缓冲机制CArchive 对象提供了一个类型安全缓冲机制.用于将可序列化对象写入CFile 对象或从中读取可序列化对象.通常,CFile 对象表示磁盘文件:但是 ...

  7. 关于C#使用Dllimport 导入vc++动态库后网站部署提示 “无法加载 DLL,找不到指定模块”的解决方法。

    这次项目需要,做了一个C#写的WebService服务给外部调用,服务内部引用了算法库,本地调试已经通过,现场部署服务时各种提示找不到DLL文件. 第一.如果是包含有32位库在64位服务器系统上运行, ...

  8. (六)《Java编程思想》——初始化及类的加载顺序

    package chapter7; /** * 初始化及类的加载顺序:顺序如下 * 1.基类的static变量 * 2.导出类的static变量 * 3.基类的变量 * 4.基类的构造函数 * 5.导 ...

  9. VC多文档编程技巧(取消一开始时打开的空白文档)

    VC多文档编程技巧(取消一开始时打开的空白文档) http://blog.csdn.net/crazyvoice/article/details/6185461 VC多文档编程技巧(取消一开始时打开的 ...

随机推荐

  1. grunt的学习和使用

    目前正在编写公司的部分组件,可能一个组件会包含很多js和css,为了项目上使用方便,应该压缩成一个js库,以供开发者使用,同时也可以减少很多http请求,提高页面访问速度.基于此,学习了grunt自动 ...

  2. JQuery 动态创建表单,并自动提交

    前言:写这个是为了实现使用cookie进行自动登录的功能, 下面的代码是一个元素一个元素进行创建和赋值的, (可以尝试下将所有的html代码(form.input)全部拼好以后放到${ } 中,再进行 ...

  3. 如何使用Visual Studio调试C#程序

    当代码不能正常运行时,可以通过调试定位错误.常用的程序调试操作包括设置断点.开始.中断和停止程序的执行.单步执行程序以及使程序运行到指定的位置.下面将对这几种常用的程序调试操作进行详细地介绍. 1.断 ...

  4. 元信息标记---meta

    位于<head></head>之间 1.设置页面关键字: <meta name="keywords" content="输入具体关键字&qu ...

  5. 【Linux】swap分区简介及空间增加方式

    swap分区简介 Swap分区在系统的物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存 ...

  6. Visual Studio 推荐插件以及一些设置

    Microsoft Visual Studio 作为微软自家的 IDE 集成 NuGet 包管理器,是的引用一些不同版本组件DLL十分方便. 集成编译环境,强大的 Debug 断点.附加功能 项目模板 ...

  7. 【sqli-labs】 less14 POST - Double Injection - Single quotes- String -twist (POST型单引号变形双注入)

    名字和less13一样? 看了下源码对比 less13 less14 less14应该是双引号吧 出错 构造永真登陆

  8. PowerShell 解决红字一闪而过问题

    起因 起初只想在 win7上实现 pause 效果而已 cmd /c pause | out-null 结果只能看到红字一闪而过 打开 PowerShell ISE 进行调试 这次清楚的看到红字提示 ...

  9. 15.3 Task 异常

    1. 在等待时拆包异常 在等待任务时,任务出错或取消都将抛出异常,但并不是 AggregateException .大多情 况下为方便起见,抛出的是 AggregateException 中的第一个异 ...

  10. JavaScript获取日期方法

    var time = new Date(); //当前时间 var year = time.getFullYear();//当前年份 var month = time.getMonth()+1; // ...