• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 用VC制作初始畫面

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    宋端智 賈皓麗 在以前的“電腦工作室”中,我們曾介紹過用 VB 、VFP制作初始畫面,那么,如何在VC中繪制軟件初始畫面呢?本文將詳細介紹其設計步驟。 1.?創建一個SDI或MDI工程。 2.?新建或導入一個ID號為IDB—SPLASH的位圖。 3.?從CWnd類派生一個名為CSpla
    宋端智 賈皓麗

      在以前的“電腦工作室”中,我們曾介紹過用VB、VFP制作初始畫面,那么,如何在VC中繪制軟件初始畫面呢?本文將詳細介紹其設計步驟。

      1.?創建一個SDI或MDI工程。

      2.?新建或導入一個ID號為IDB—SPLASH的位圖。

      3.?從CWnd類派生一個名為CSplashWnd的子類,并添加兩個保護成員變量:

      CBitmap m—bitmap;//初始畫面位圖

      static CSplashWnd? c—pSplashWnd;

      //指向初始畫面窗口的指針

       c—pSplashWnd為靜態成員變量,應在類的實現文件(.cpp)開頭說明:

      CSplashWnd? CSplashWnd::c—pSplashWnd;

      4.?向CSplashWnd類中加入一個靜態公有成員函數ShowSplashScreen,此函數將被主框架窗口調用:

      void CSplashWnd::ShowSplashScreen(CWnd ?pParentWnd)

      { //此函數傳遞的參數是主框架窗口

       if(c—pSplashWnd!=NULL) return;

       c—pSplashWnd=new CSplashWnd;

       if(!c—pSplashWnd->Create(pParentWnd))

       //創建初始畫面窗口

       delete c—pSplashWnd;

       else

       c—pSplashWnd->UpdateWindow();

       //顯示初始畫面窗口

      }

      5.?編輯ShowSplashScreen函數中調用的Create函數(保護成員函數):

      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—WAIT)),NULL, WS—POPUP | WS—VISIBLE, 0, 0, bm.bmWidth, bm.bmHeight,pParentWnd->GetSafeHwnd(), NULL);

      //創建主框架窗口的子窗口

      }

      6. CreateEx將調用OnCreate函數進行窗口的初始化,重載此函數:

      int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)

      {

       if (CWnd::OnCreate(lpCreateStruct)==-1)

       return -1;

       CenterWindow();

       SetTimer(1,1000,NULL); //時間控制

       return 0;

      }

      7. 顯示窗口時發送WM—PAINT消息,所以我們映射此消息:

      void CSplashWnd::OnPaint()

      {

       CPaintDC dc(this);

       CDC dcImage;

       if(!dcImage.CreateCompatibleDC(&dc)) return;

       BITMAP bm;

       m—bitmap.GetBitmap(&bm);

       CBitmap? pOldBitmap=dcImage.SelectObject(&m—bitmap);

       dc.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY);

       dcImage.SelectObject(pOldBitmap);

      }

      8. 映射WM—TIMER消息,從而在一定時間后銷毀窗口:

      void CSplashWnd::OnTimer(UINT nIDEvent)

      {

       DestroyWindow(); //銷毀初始畫面窗口

       AfxGetMainWnd()->UpdateWindow();

       //刷新主框架窗口

      }

      9. 為防止內存溢出,窗口銷毀后要釋放CSplashWnd對象,為此,我們重載虛擬函數PostNcDestroy,此函數在窗口銷毀后調用:

      void CSplashWnd::PostNcDestroy()

      {

       delete this;

      }

      10. 最后,為了顯示初始畫面,我們在主框架窗口的OnCreate函數最后調用ShowSplashScreen函數,當然別忘了將CSplashWnd的頭文件包含進去:

      CSplashWnd::ShowSplashScreen(this);

      以上程序在VC++6.0中調試通過。   

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>