MFC中設置對話框顏色、添加背景圖片、添加音樂的方法

一、設置背景顏色的三種方法:
1、我們知道程序在運行的時候會調用OnPain函數,那麼我們可以在這裏設置背景顏色。
void CFlipCardsDlg::OnPaint()
{
if (IsIconic())
 {
//保持不變
 }
 else
 {   
CRect   rc;
  GetClientRect( &rc );// 獲取客戶區
  CPaintDC dc(this);
  dc.FillSolidRect(&rc, RGB(0,160,0));   // 填充客戶區顏色
  CDialog::OnPaint();          
 }
}
2、 第二種方法只要一條語句,但是這裏要注意這裏繪製的顏色是針對程序中所有的對話框(如果是單文檔的話,好像不行)
SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));
// 前一個RGB是背景色,後一RGB是文本顏色
該函數放在工程的APP文件的初始化函數中。
3、第三種方法,利用ClassWizard 重載OnCtlColor(),即WM_CTLCOLOR消息
在要着色的對話框中申明一個變量,CBRUSH  m_hbrush;然後在項目的Dlg類初始化函數中給m_hbrush賦值。
m_brush.CreateSolidBrush(RGB(0, 255, 0));
然後在OnCtlColor(...)返回該畫刷就可以了,如下。
HBRUSH CFlipCardsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
 // TODO: Change any attributes of the DC here
 switch (nCtlColor)
 {
 case CTLCOLOR_DLG:
  HBRUSH aBrush;
  aBrush = CreateSolidBrush(RGB(0, 150, 0));
  hbr = aBrush;
  break;
 }
 // TODO: Return a different brush if the default is not desired
 return hbr;
}
這樣 爲對話框着色就可以實現了。
二、給MFC添加背景圖圖片代碼:
定位到   void CXXXDlg::OnPaint(),在if()...else()中的else()下添加如下代碼:
  //CDialog::OnPaint();//要禁止這個調用  
      CPaintDC  dc(this);  
      CRect  rect;  
  GetClientRect(&rect);  
  CDC  dcMem;  
  dcMem.CreateCompatibleDC(&dc);  
  CBitmap  bmpBackground;  
  bmpBackground.LoadBitmap(IDB_BITMAP); 
  //IDB_BITMAP是你自己的圖對應的ID
  BITMAP  bitmap;  
  bmpBackground.GetBitmap(&bitmap);  
  CBitmap  *pbmpOld=dcMem.SelectObject(&bmpBackground); dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,  
   bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);  
三、MFC 中設置背景音樂問題
#include <mmsystem.h>
#pragma comment( lib, "Winmm.lib" )
PlaySound函數的聲明爲:
BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
第一種方法是直接播出聲音文件,相應的代碼爲:
PlaySound("c:\\win95\\media\\The Microsoft Sound.wav", NULL, SND_FILENAME | SND_ASYNC);
注意參數中的路徑使用兩個連 續的反斜槓轉義代表一個反斜槓。
 
第二種方法是把聲音文件加入到資源中,然後從資源中播放聲音。Visual C++支持WAVE型資源,用戶在資源視圖中單擊鼠標右鍵並選擇Import命令,然後在文件選擇對話框中選擇The Microsoft Sound.wav文件,則該文件就會被加入到WAVE資源中。假定聲音資源的ID爲IDR_STARTWIN,則下面的調用同樣會輸出啓動聲音:
PlaySound((LPCTSTR)IDR_STARTWIN, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);
第三種方法是用PlaySound播放系統聲音,Windows啓動的聲音是由SystemStart定義的系統聲音,因此可以用下面的方法播 放啓動聲音:
PlaySound("SystemStart",NULL,SND_ALIAS|SND_ASYNC);
函數 sndPlaySound的功能與PlaySound類似,但少了一個參數。函數的聲明爲:
BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound);
除了不能指定資源名字外,參數lpszSound與PlaySound的是一樣的。參數 fuSound是如何播放聲音的標誌,可以是SND_ASYNC、SND_LOOP、SND_MEMORY、SND_NODEFAULT、 SND_NOSTOP和SND_SYNC的組合,這些標誌的含義與PlaySound的一樣。
第四種方法:
sndPlaySound不能直接播放聲音資源。要用該函數播放WAVE文件,可按下面的方式調用:
sndPlaySound(“MYSOUND.WAV”,SND_ASYNC);
自 己把資源添在Debug文件夾裏。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章