【VC编程技巧】窗体?3.6以渐变效果载入对话框
2020-12-13 04:42
标签:dialog movewindown timer 平时我们经常可以看到很多应用程序启动过程很酷,什么百叶窗,渐变,各种效果,今天我们看一下如何在程序中增加这种效果。
2.添加WM_TIMER的相应函数OnTimer(),在OnTimer()中更新窗口的状态,达到预期的样子时,就关闭定时器。
【VC编程技巧】窗体?3.6以渐变效果载入对话框,搜素材,soscw.com 【VC编程技巧】窗体?3.6以渐变效果载入对话框 标签:dialog movewindown timer 原文地址:http://blog.csdn.net/chen_jint/article/details/37832741一、示例展示:
二、示例思路:
1.首先介绍两个知识,一个是函数MoveWindow(),一个是定时器。
BOOL MoveWindow(
HWND hWnd,
int X,
int Y,
int nWidth,
int nHeight,
BOOL bRepaint
);
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 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 を返します。
}
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提供文章示例代码: