一個點陣圖淡入淡出控制元件 (轉)

worldblog發表於2007-12-12
一個點陣圖淡入淡出控制元件 (轉)[@more@]

  我們經常在AboutBox中顯示一幅關於公司或自己訊息的點陣圖,有沒有想過讓這幅點陣圖有更酷的效果?比如加上淡入淡出效果?只要有了這個CAlphaCtrl就可以輕鬆實現。

  CAlphaCtrl是從CStatic繼承而來。使用時只要把CalphaCtrl加入窗體,然後LoadAlphaBitmap(UINT uID, int iTimer)就可以實現點陣圖的淡入淡出。其中uID是點陣圖的資源ID,iTimer是點陣圖顯示時間間隔,值愈小顯示愈快。

  下面就來說一說CalphaCtrl是如何實現的。關鍵的一個實現函式是一個 : AlphaBlend,此函式可以實現影像的透明顯示,相關的引數和資料請自行參閱MSDN,值得注意的是使用此函式時要連結到msimg32.lib庫。

 :namespace prefix = o ns = "urn:schemas--com::office" />

第一步,我們先在CalphaCtrl類中增加幾個Data Member:CBitmap Bmp;

 BOOL bCanPaint; UINT nBmpID;  int nTimer;

 

第二步,在CalphaCtrl類中增加一個Member Function:

void AlphaDisplay(CDC &pDC, CClientDC &dc, BLENDFUNCTION& rBlendProps, int width, int heigh, byte nLevel)

{

//nLevel是透明度,0表示不顯示,255則完全顯示

  rBlendProps.ConstantAlpha = nLevel;

 

  AlphaBlend( dc.m_hDC, 0, 0, width, heigh, pDC.m_hDC, 0, 0,

  width, heigh, rBlendProps );

}

 

第三步,增加一個名為tdDisplay的全域性函式,此函式為一個執行緒函式,用於點陣圖的顯示。

UINT tdDisplay(LPVOID lpParam)

{

  CAlphaCtrl* AlphaCtrl = (CAlphaCtrl*)lpParam;

 

  CClientDC dc(AlphaCtrl);

  CDC pDC;

  pDC.CreateCompatibleDC(&dc);

  pDC.(&AlphaCtrl->Bmp);

 

  BLENDFUNCTION rBlendProps;

  rBlendProps.BlendOp = AC_SRC_OVER;

  rBlendProps.BlendFlags = 0;

  rBlendProps.AlphaFormat = 0;

 

  BITMAP bmInfo;

  ::GetObject( AlphaCtrl->Bmp.m_hObject, sizeof(BITMAP), &bmInfo );

  INT nWidth, nHeigh;

  nWidth = bmInfo.bmWidth;

  nHeigh = bmInfo.bmHeight;

 

  AlphaCtrl->SetWindowPos(NULL, 0, 0, nWidth, nHeigh, SWP_NOMOVE);

 

  int i = 0;

  while(i <= 255)

  {

    AlphaCtrl->AlphaDisplay(pDC, dc, rBlendProps, nWidth, nHeigh, i);

  i += 5;

    Sleep(AlphaCtrl->nTimer);

  }

 

  AlphaCtrl->bCanPaint = 1;    //Make OnPaint

 

  AfxEndThread(0);

  return 0;

}

 

第四步,現在萬事俱備,加上初始化函式:

BOOL  LoadAlphaBitmap(UINT uID, int iTimer)

{

  int i = Bmp.Loaitmap(uID);

 

  if(i)

  {

    AfxBeginThread(tdDisplay, this);

    nBmpID = uID;

    nTimer = iTimer;

  return 1;

  }

  else

  {

    TRACE("Load Bitmap Failedn");

  return 0;

  }

 

  return 1;

}

 

最後,開啟你的對話方塊看一看那幅很酷的點陣圖!

需要原始碼的可以留下E-.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992132/,如需轉載,請註明出處,否則將追究法律責任。

相關文章