VC编程之对单文档或者多文档程序制作启动画面
小标 2018-10-29 来源 : 阅读 1398 评论 0

摘要:本文主要向大家介绍了VC编程之对单文档或者多文档程序制作启动画面,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程之对单文档或者多文档程序制作启动画面,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

(一)概要:

文章描述了怎样通过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控件自动生成):

// 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();
}


6.通过调用上面类CSplashDlg的成员函数,控制启动画面。

   在单文档框架显示之前显示启动画面

// 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/MFC的学习,希望对VC/MFC有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言VC/MFC频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved