【VC编程技巧】窗体?3.5对单文档或者多文档程序制作启动画面
2020-12-13 04:16
标签:des style blog http strong os 文章描述了怎样通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面。在Microsoft Visual Studio 6.0中对于单文档程序(SDI)我们可以很方便利用微软提供的组件Visual C++ Component (Splash Screen)。因为在Microsoft Visual Studio 6.0以后的版本或者Visual C++ .NET没有提供这个组件,我们可以通过自定义对话框来实现Splash Screen功能。 1.启动Microsoft Visual Studio 2012创建默认的单文档程序;(很简单,不需要多说) 2.在工程的资源编辑器中,创建一个对话框(启动画面) 修改对话框的属性: 对话框ID:IDD_SPLASH 对话框Title Bar:False 对话框Border:Thin 3.添加图片控件picture control在启动画面 修改控件属性: 控件type:bitmap 4.创建启动画面添加关联类CSplashDlg, 类CSplashDlg的基类:CDialog 5.对于类CSplashDlg添加如下函数(根据Microsoft Visual Studio 6.0中Splash Screen控件自动生成):
6.通过调用上面类CSplashDlg的成员函数,控制启动画面。
在单文档框架显示之前显示启动画面
【VC编程技巧】窗体?3.5对单文档或者多文档程序制作启动画面,搜素材,soscw.com 【VC编程技巧】窗体?3.5对单文档或者多文档程序制作启动画面 标签:des style blog http strong os 原文地址:http://blog.csdn.net/chen_jint/article/details/37660121(一)概要:
(二)对于单文档或者多文档程序制作启动画面
// CSplashDlg メッセージ ハンドラー
//说明:静态函数,用于显示启动画面( splash screen )
//参数:pParentWnd 父窗口指针
void CSplashDlg::ShowSplashScreen(CWnd* pParentWnd)
{
// Allocate a new splash screen, and create the window.
c_pSplashDlg = new CSplashDlg;
if (!c_pSplashDlg->Create(CSplashDlg::IDD, pParentWnd))
delete c_pSplashDlg;
else
c_pSplashDlg->ShowWindow(SW_SHOW);
c_pSplashDlg->UpdateWindow();
c_pSplashDlg->SetTimer(1,2000, NULL);
}
//说明:用于销毁启动画面( splash screen )
//参数:无
void CSplashDlg::HideSplashScreen(void)
{
// Destroy the window, and update the mainframe.
c_pSplashDlg->KillTimer(1);
DestroyWindow();
AfxGetMainWnd()->UpdateWindow();
delete c_pSplashDlg;
c_pSplashDlg = NULL;
}
//说明:静态函数,用于键盘或鼠标消息触发时,退出启动画面( splash screen )
//参数:pMsg MFC标准消息
BOOL CSplashDlg::PreTranslateAppMessage(MSG* pMsg)
{
if (c_pSplashDlg == NULL)
return FALSE;
// If you receive a keyboard or a mouse message, hide the splash screen.
if (c_pSplashDlg->m_hWnd != NULL && pMsg->message == WM_KEYDOWN ||
pMsg->message == WM_SYSKEYDOWN ||
pMsg->message == WM_LBUTTONDOWN ||
pMsg->message == WM_RBUTTONDOWN ||
pMsg->message == WM_MBUTTONDOWN ||
pMsg->message == WM_NCLBUTTONDOWN ||
pMsg->message == WM_NCRBUTTONDOWN ||
pMsg->message == WM_NCMBUTTONDOWN)
{
c_pSplashDlg->HideSplashScreen();
return TRUE; // message handled here
}
return FALSE; // message not handled
}
//说明:用于控制启动画面( splash screen )持续的时间
//参数:MFC标准Event
void CSplashDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。
// Destroy the splash screen window.
HideSplashScreen();
//CDialogEx::OnTimer(nIDEvent);
}
BOOL CSplashDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: ここに初期化を追加してください
//设置启动画面的图片
SetImage(_T("1.png"), IDC_PIC);
//启动画面居中
CenterWindow();
//启动画面置定
SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0,
SWP_NOMOVE|SWP_NOSIZE);
return TRUE; // return TRUE unless you set the focus to a control
// 例外 : OCX プロパティ ページは必ず FALSE を返します。
}
//说明:将图片显示在指定PictureControl上
//参数:pszFileName 图片名(全路径/相对路径)
// uID PictureControl控件ID
VOID CSplashDlg::SetImage(LPCTSTR pszFileName, UINT uID)
{
CStatic* pWnd = (CStatic*)GetDlgItem(uID);
CImage image;
image.Load(pszFileName);
HBITMAP hBmp = image.Detach();
CRect rect;
GetClientRect(&rect);
pWnd->SetBitmap(hBmp);
pWnd->SetWindowPos(NULL,
rect.left,
rect.top,
rect.right,
rect.bottom,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER);
return VOID();
}
// CSplashSDIApp 初期化
BOOL CSplashSDIApp::InitInstance()
{
...
//添加启动画面
CSplashDlg::ShowSplashScreen(NULL);
// メイン ウィンドウが初期化されたので、表示と更新を行います。
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
截取主框架消息(当有鼠标或者键盘消息时,启动画面退出)
BOOL CSplashSDIApp::PreTranslateMessage(MSG* pMsg)
{
// TODO: ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。
if(CSplashDlg::PreTranslateAppMessage (pMsg))
return TRUE;
return CWinAppEx::PreTranslateMessage(pMsg);
}
(三)运行效果图:
文章标题:【VC编程技巧】窗体?3.5对单文档或者多文档程序制作启动画面
文章链接:http://soscw.com/essay/29266.html