程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> c++-MFC 實現啟動畫面淡入淡出的問題

c++-MFC 實現啟動畫面淡入淡出的問題

編輯:編程解疑
MFC 實現啟動畫面淡入淡出的問題
 int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    CenterWindow(); // 啟動畫面窗口居中
    SetTimer(1, 3000, NULL); // 啟動畫面顯示時間為 3 秒
    AnimateWindow(1200, AW_BLEND); // 窗口漸顯,實現淡入效果,時間 1.2 秒
    return 0;
}


void CSplashWnd::OnClose()
{
    AnimateWindow(800, AW_BLEND | AW_HIDE); // 窗口漸隱,實現淡出效果,時間 0.8 秒
    CWnd::OnClose();
}


void CSplashWnd::OnTimer(UINT_PTR nIDEvent)
{
    KillTimer(1); // 銷毀定時器
    PostMessage(WM_CLOSE); // 關閉啟動畫面
    CWnd::OnTimer(nIDEvent);
}


BOOL CSplashWnd::OnEraseBkgnd(CDC* pDC)
{
    HINSTANCE hApp = ::GetModuleHandle(NULL); // 得到應用程序的模塊句柄
    HBITMAP hbmp = ::LoadBitmap(hApp, MAKEINTRESOURCE(IDB_BITMAP13)); //加載程序中的位圖資源
    HDC hmdc = ::CreateCompatibleDC(pDC->GetSafeHdc()); // 創建兼容 DC作為內存 DC
    HBITMAP hbmpOld = (HBITMAP) ::SelectObject(hmdc, hbmp); //將位圖選入內存 DC
    ::BitBlt(pDC->GetSafeHdc(), 0, 0, SPLASH_WIDTH, SPLASH_HEIGHT, hmdc, 0, 0, SRCCOPY); // 將內存 DC 中的內容拷貝到設備 DC 以顯示

    // 清理,防止內存洩漏
    ::SelectObject(hmdc, hbmpOld);
    ::DeleteObject(hbmp);
    ::DeleteDC(hmdc);

    return CWnd::OnEraseBkgnd(pDC);
}

實現啟動畫面淡入淡出時遇到一個疑惑。相關代碼如上。按道理應該SetTimer後會響應OnTimer();但是我調試發現竟然沒有。。

CSplashWnd對象的創建我是在CMainFrame的OnCreate中進行的;

 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    CSplashWnd* temp = new CSplashWnd();           //顯示啟動畫面
    temp->OnCreate(lpCreateStruct);
    Sleep(1000);
    temp->OnClose();
    temp->~CSplashWnd();
    temp = NULL;                                   //釋放內存

    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;
..........

temp->OnCreate(lpCreateStruct);後根本就沒進入OnTimer()...
是不是我哪個地方概念沒搞清楚= =

最佳回答:


不用那麼麻煩,最簡單的做法是定時器循環調用
SetLayeredWindowAttributes

http://baike.baidu.com/link?url=D8_84M_5ZKBL4ebuRvw8eg8czVE3IEA1LWp231UhM0O6tTpIueblszz6ddZC9oCbIYT1QpubqwsbjXDO7ZnoHK

bAlpha參數決定了透明度,從0~255走一遍就是淡入了,反之就是淡出了。

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