程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 用mfc制作程序啟動logo

用mfc制作程序啟動logo

編輯:C++入門知識

完了,這次土鱉了,介紹個非常過時的東西,其實就是自己收藏一下,怕以後想用的時候自己忘了。

直接進入正題,首先用ps等工具做一個自己喜歡的程序啟動的logo位圖,我這裡制作的logo大小為500*313,比例為黃金比例,看上去很舒服。

新建mfc工程,把制作好的logo位圖添加的資源中去,資源ID號設置為IDB_SPLASH。

新建類CSplashWnd,

[cpp]
#pragma once 
#include "afxwin.h" 
 
class CSplashWnd : 
    public CWnd 

public: 
    CSplashWnd(void); 
    ~CSplashWnd(void); 
    CBitmap m_bitmap; 
    static void ShowSplashScreen(CWnd* pParentWnd = NULL); 
protected: 
    BOOL Create(CWnd* pParentWnd = NULL);    
    static CSplashWnd* c_pSplashWnd; 
public: 
    DECLARE_MESSAGE_MAP() 
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 
    afx_msg void OnPaint(); 
    afx_msg void OnTimer(UINT_PTR nIDEvent); 
}; 

為各成員函數添加代碼:

[cpp]
#include "StdAfx.h" 
#include "SplashWnd.h" 
#include "resource.h" 
 
CSplashWnd* CSplashWnd::c_pSplashWnd; 
 
BEGIN_MESSAGE_MAP(CSplashWnd, CWnd) 
    ON_WM_CREATE() 
    ON_WM_PAINT() 
    ON_WM_TIMER() 
END_MESSAGE_MAP() 
 
CSplashWnd::CSplashWnd(void) 
/*: c_pSplashWnd(NULL)*/ 


 
CSplashWnd::~CSplashWnd(void) 


 
void CSplashWnd::ShowSplashScreen(CWnd* pParentWnd) 

    c_pSplashWnd = new CSplashWnd; 
    if (!c_pSplashWnd->Create(pParentWnd)) 
        delete c_pSplashWnd; 
    else 
        c_pSplashWnd->UpdateWindow(); 

 
BOOL CSplashWnd::Create(CWnd* pParentWnd) 

    if (!m_bitmap.LoadBitmap(IDB_SPLASH))   /*加載位圖資源,需在資源文件中添加*/ 
        return FALSE; 
 
    BITMAP bm; 
    m_bitmap.GetBitmap(&bm); 
 
    return CreateEx(0, 
        AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)), 
        NULL, WS_POPUP | WS_VISIBLE, 0, 0, bm.bmWidth, bm.bmHeight, pParentWnd->GetSafeHwnd(), NULL); 
    return 0; 

 
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 

    if (CWnd::OnCreate(lpCreateStruct) == -1) 
        return -1; 
 
    // TODO:  在此添加您專用的創建代碼 
    // Center the window. 
    CenterWindow(); 
 
    // Set a timer to destroy the splash screen. 
    SetTimer(1, 1000, NULL);                /*設置消隱時間*/ 
 
    return 0; 

 
void CSplashWnd::OnPaint() 

    CPaintDC dc(this); // device context for painting 
    // TODO: 在此處添加消息處理程序代碼 
    // 不為繪圖消息調用 CWnd::OnPaint() 
    CDC dcImage; 
    if (!dcImage.CreateCompatibleDC(&dc)) 
        return; 
 
    BITMAP bm; 
    m_bitmap.GetBitmap(&bm); 
 
    // Paint the image. 
    CBitmap* pOldBitmap = dcImage.SelectObject(&m_bitmap); 
    dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcImage, 0, 0, SRCCOPY); 
    dcImage.SelectObject(pOldBitmap); 

 
void CSplashWnd::OnTimer(UINT_PTR nIDEvent) 

    // TODO: 在此添加消息處理程序代碼和/或調用默認值 
    DestroyWindow(); 
    AfxGetMainWnd()->UpdateWindow(); 
 
    CWnd::OnTimer(nIDEvent); 

其中消隱時間的設置為你喜歡的數值。www.2cto.com

接下來,只需在MFC工程中的CMainFrame類中添加函數OnCreate,並在函數定義中添加語句CSplashWnd::ShowSplashScreen(this);

[cpp]
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 

    if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 
        return -1; 
 
    // TODO:  在此添加您專用的創建代碼 
    CSplashWnd::ShowSplashScreen(this); 
 
    return 0; 

好了,你的程序啟動logo做好了,編譯運行吧,少年!~~ 


摘自  yang_xian521 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved