【VC编程技巧】窗口☞3.6以渐变效果加载对话框
平时我们常常能够看到非常多应用程序启动过程非常酷。什么百叶窗。渐变,各种效果,今天我们看一下怎样在程序中添加这样的效果。
一、演示样例展示:
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以渐变效果加载对话框的更多相关文章
- VC编程技巧:IE控件的高级用法
一.如何显示内存中的 HTML 网页 二.屏蔽 IE 控件的上下文菜单 三.扩展 HTML 脚本中的 external 对象 四.显示 HTML 样式的对话窗 五.执行 HTML 脚本 http:// ...
- iOS开发——图形编程Swift篇&CAShapeLayer实现圆形图片加载动画
CAShapeLayer实现圆形图片加载动画 几个星期之前,Michael Villar在Motion试验中创建一个非常有趣的加载动画. 下面的GIF图片展示这个加载动画,它将一个圆形进度指示器和圆形 ...
- go语言使用go-sciter创建桌面应用(八) 窗口显示时,自动加载后端数据。
有些时候我们需要在窗口创建并显示时,加载一些后端的配置,这就需要用到view提供的几个事件. https://sciter.com/docs/content/sciter/View.htm state ...
- 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面
(一)概要: 文章描写叙述了如何通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于 ...
- 【VC编程技巧】窗口☞3.4利用bitmap改变对话框的背景。
效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbl9qaW50/font/5a6L5L2T/fontsize/400/fill/I0JBQ ...
- 【VC编程技巧】文件☞2.3CArchive的用法
CArchive 对象提供了一个类型安全缓冲机制CArchive 对象提供了一个类型安全缓冲机制.用于将可序列化对象写入CFile 对象或从中读取可序列化对象.通常,CFile 对象表示磁盘文件:但是 ...
- 关于C#使用Dllimport 导入vc++动态库后网站部署提示 “无法加载 DLL,找不到指定模块”的解决方法。
这次项目需要,做了一个C#写的WebService服务给外部调用,服务内部引用了算法库,本地调试已经通过,现场部署服务时各种提示找不到DLL文件. 第一.如果是包含有32位库在64位服务器系统上运行, ...
- (六)《Java编程思想》——初始化及类的加载顺序
package chapter7; /** * 初始化及类的加载顺序:顺序如下 * 1.基类的static变量 * 2.导出类的static变量 * 3.基类的变量 * 4.基类的构造函数 * 5.导 ...
- VC多文档编程技巧(取消一开始时打开的空白文档)
VC多文档编程技巧(取消一开始时打开的空白文档) http://blog.csdn.net/crazyvoice/article/details/6185461 VC多文档编程技巧(取消一开始时打开的 ...
随机推荐
- codevs1959拔河比赛(二维费用背包)
1959 拔河比赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 一个学校举行拔河比赛,所有的人被分成了两组,每个人 ...
- 《疯狂Python讲义》重要笔记--变量
一个Python解释器 接下来的旅程——你需要下载好Python,Python解释器通常放在 /usr/local/bin/python3.7 ; 在Unix系统的bash中输入 where pyth ...
- tpshop编辑框中上传图片过大变模糊
tpshop编辑框中上传图片过大变模糊 图片超过2500的高就会变模糊 设置最大的高度修改一下
- [NOI2015,LuoguP2146]软件包管理器------树剖
***题目链接戳我*** 又是在树上瞎搞滴题目.... 我们如果以安装的软件为1,未安装的软件为0,那么软件改变的数量即树上权值总和的数量,涉及到区间修改,区间查询,考虑树剖 分析完毕,似乎没啥好说的 ...
- golang 随机数/域名校验
//随机数生成要用到的 const letterBytes = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ...
- RecastNavigation(3D场景建模、网格导航)
一.RecastNavigation详解 RecastNavigation定义: RecastNavigation是一个导航寻路工具集,使用邻接的凸多边形集合描述一个3D场景,A*寻路算法使3D场景的 ...
- 【Leetcode】376. Wiggle Subsequence
Description: A sequence of numbers is called a wiggle sequence if the differences between successive ...
- Django模板常用语法规则
Django 模板标签 if/else 标签 for 标签 ifequal/ifnotequal 标签 注释标签 过滤器 include 标签 URL标签 模板继承 if/else 标签 1. 基 ...
- Java 开源博客 Solo 1.2.0 发布 - 一键启动
Solo 1.2.0 正式发布了,感谢一直以来关注 B3log 开源的朋友! 在这个版本中,我们引入了一个新的特性 -- 独立模式: 不需要安装数据库.Servlet 容器 只需要安装好 Java 环 ...
- 【汇编】dosbox钢琴
DATA SEGMENT msg DB 0DH,0AH,'[ 1 2 3 4 5 6 7 ]' DB 0DH,0AH,' [ q w e r t y u ]' DB 0DH,0AH,'________ ...