视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MFC中设置对话框颜色、添加背景图片、添加音乐的方法
2025-10-04 09:52:15 责编:小OO
文档
一、设置背景颜色的三种方法:

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

#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文件夹里。下载本文

显示全文
专题