MFC中设置对话框颜色、添加背景图片、添加音乐的方法

合集下载

MFC 设置控件字体颜色、背景透明

MFC 设置控件字体颜色、背景透明

1.打开对应对话框的类向导ClassWizard。

2.在消息映射MessageMaps中添加消息Message:WM_CTLCOLOR。

3.然后程序代码中会添加进函数:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)4.在这个函数中添加if语句,其中的条件表达式改成想要设置的控件;比如改成: if (pWnd-> GetDlgCtrlID() == IDC_STATIC1 || pWnd-> GetDlgCtrlID() == IDC_STATIC2)注意,控件ID最好改过,如果多个控件使用同个默认ID,函数则不识别。

5.在if中添加以下语句:pDC->SetTextColor(RGB(255,255,255)); //设置字体为白色pDC->SetBkMode(TRANSPARENT); //设置背景为透明整个函数的代码如下:HBRUSH CHall::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);if (pWnd-> GetDlgCtrlID() == IDC_STATIC1 || pWnd-> GetDlgCtrlID() ==IDC_STATIC2 || pWnd-> GetDlgCtrlID() == IDC_STATIC3){pDC->SetBkMode(TRANSPARENT); //设置背景透明pDC->SetTextColor(RGB(255,255,255));return HBRUSH(GetStockObject(HOLLOW_BRUSH));}return hbr;}。

MFC-显示对话框背景

MFC-显示对话框背景

一、创建MFC首先创建一个MFC对话框应用程序(Dialog-based Application)如下:在VS2005和2008里,我们可以用一个 Solution 来组合几个 Project (每个Project 基本上只包含一个 Program),当我们要构建一个多Program的应用时(例如一个客户端程序加一个服务器应用程序),利用 Solution 可以将这些Projects 组合起来、并且共享文件和函数库。

通常需要为Solution创建一个主路径,其中包含了所有Projects的路径。

不过在这篇文章里,我们只构建一个简单的Project,所以在创建MFC的New Project对话框里,不用勾选“Create directory for solution”这个选项。

点击OK -- Next进入下一步,在这里我们创建一个Dialog-based Application,大部分选项按默认设置就行,不过最下面的“Use Unicode libraries”最好去掉。

如果勾选了这个选项,程序代码就会使用16bit的Unicode字符集来编码,但是很多函数虽然使用 char* (ASCII stings) 类型字符,而将字符串从Unicode 转换到 ASCII 是非常麻烦的。

使用 Unicode 在编译时可能会遇到下列错误:cannot convert parameter 1 from 'CString' to 'const char *'cannot convert from 'const char [11]' to 'LPCWSTR'这意味着在Unicode和Multi-byte字符串的转换中出现了问题。

在上一篇学习笔记中,就提到“成员函数LoadBMP其输入参数类型应为const char*”,那应该只是一个治标的方法,这里的去掉“Use Unicode libraries”选项,才是治本之道。

mfc listctrl单元格颜色

mfc listctrl单元格颜色

mfc listctrl单元格颜色mfc listctrl是一种用于显示列表和图标的控件,常用于Windows应用程序开发中。

其中一个常见的需求是根据数据的值为列表的单元格设置不同的颜色。

在本文中,我们将一步一步地讲解如何使用mfc listctrl控件来设置单元格的颜色。

首先,我们需要创建一个MFC窗口应用程序。

接下来,在资源视图中,找到并双击“Dialog”文件夹中的“Dialog”文件,来创建一个对话框。

在对话框设计器中,右键单击对话框并选择“添加类”,然后在“类名”字段中输入“CMyDlg”,点击“确定”按钮创建一个对话框类。

接下来,打开CMyDlg类的头文件,在其中添加以下成员变量和函数声明:cppclass CMyDlg : public CDialog{...CListCtrl m_listCtrl;void SetCellColor(int row, int col, COLORREF color);};在CMyDlg类的实现文件中,添加下面的代码来创建mfc listctrl控件和设置单元格的默认背景颜色:cppBOOL CMyDlg::OnInitDialog(){CDialog::OnInitDialog();创建mfc listctrl控件m_listCtrl.Create(WS_VISIBLE WS_CHILD LVS_REPORT, CRect(10, 10, 400, 300), this, IDC_LISTCTRL);设置表头m_listCtrl.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 100);m_listCtrl.InsertColumn(1, _T("姓名"), LVCFMT_LEFT, 100);m_listCtrl.InsertColumn(2, _T("成绩"), LVCFMT_LEFT, 100);插入数据m_listCtrl.InsertItem(0, _T("1"));m_listCtrl.SetItemText(0, 1, _T("张三"));m_listCtrl.SetItemText(0, 2, _T("90"));m_listCtrl.InsertItem(1, _T("2"));m_listCtrl.SetItemText(1, 1, _T("李四"));m_listCtrl.SetItemText(1, 2, _T("80"));设置单元格默认背景颜色for (int row = 0; row < m_listCtrl.GetItemCount(); row++) {for (int col = 0; col <m_listCtrl.GetHeaderCtrl()->GetItemCount(); col++){SetCellColor(row, col, RGB(255, 255, 255));}}return TRUE;}void CMyDlg::SetCellColor(int row, int col, COLORREF color) {LVITEM lvItem;lvItem.mask = LVIF_BACKGROUND LVIF_STATE;lvItem.iItem = row;lvItem.iSubItem = col;lvItem.state = 0;lvItem.stateMask = LVIS_SELECTED LVIS_FOCUSED;lvItem.pszText = nullptr;hTextMax = 0;lvItem.iImage = 0;lvItem.lParam = 0;lvItem.crBkCol = color;m_listCtrl.SetItem(&lvItem);}以上代码中,OnInitDialog()函数用于初始化对话框,在其中创建listctrl 控件、设置表头和插入数据。

MFC对话框背景---图片背景---背景色

MFC对话框背景---图片背景---背景色

对话框的背景1、添加位图背景首先在资源视图中添加bmp图片:选择项目名右击---添加—添加资源---Bitmap---导入---选择res文件中的位图(如果res文件中无位图请提前添加),此时可以知道位图ID为IDB_BITMAP1(1)picture控件添加背景在对话框中添加picture控件,并修改其属性,选中picture控件在属性表中修改Type为Bitmap,Image为IDB_BITMAP1。

此时图片就显示在对话框中(2)在CPP文件中初始化显示位图添加位图后,在源文件XXXDlg.cpp的void C XXX Dlg::OnPaint()函数中添加初始化代码如下:void CbeijingDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CPaintDC dc(this);CRect rect;GetClientRect(&rect);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP1);BITMAP bitmap;bmpBackground.GetBitmap(&bitmap);CBitmap *pbmpPri=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);}}2、设置纯色背景点击对话框添加成员变量CBrush m_brush,然后在源文件XXXDlg.cpp初始化位置添加如下代码:// TODO: 在此添加额外的初始化代码?m_brush.CreateSolidBrush(RGB(0,0,255)); /////添加的代码,用于创建蓝色画刷return TRUE; // 除非将焦点设置到控件,否则返回TRUE然后找到WM_CTLCOLOR消息,添加对应的函数OnCtlColor()添加如下代码:HBRUSH CbeijingsehewenziDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: 在此更改DC 的任何特return m_brush;// TODO: 如果默认的不是所需画笔,则返回另个画笔// return hbr;}这样运行后对话框背景色就变为蓝色。

MFC中改变对话框背景的几个消息函数OnEraseBkgnd、 OnPaint、 OnCtlColor的调用顺序

MFC中改变对话框背景的几个消息函数OnEraseBkgnd、 OnPaint、 OnCtlColor的调用顺序

MFC中改变对话框背景的几个消息函数OnEraseBkgnd、OnPaint、OnCtlColor的调用顺序设置对话框背景颜色及背景图片可在OnCtlColor(),OnEraseBkgnd(),OnPaint()里设置,对话框初始化完毕,显示时调用OnSize()->OnEraseBkgnd(),->OnPaint()->OnCtlColor(), 若想改变对话框大小,比如全屏显示ShowWindow(SW_SHOWMAXIMIZED);UpdateWindow();其中ShowWindow会调用OnSize()->OnEraseBkgnd(),UpdateWindow();调用OnPaint()->OnCtlColor(),若对话框中没有设置消息响应OnEraseBkgnd(),,则系统默认消息响应OnEraseBkgnd()会调用OnCtlColor()设置对话框背景(即替代OnEraseBkgnd())对话框的背景设置可在OnCtlColor()中进行,因为OnCtlColor()一般会被多次调用,所以要想设置的CFont,CBrush等应在OnInitDialog中初始化,若要在OnCtlColor()中设置,在设置前先调用Detach就可以了,如下示例HBRUSH CDb3Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){if(pWnd->GetDlgCtrlID()==IDC_STATIC5){m_font.CreatePointFont(300,"宋体");pDC->SelectObject(&m_font);m_font.Detach();pDC->SetBkMode(TRANSPARENT);return (HBRUSH)::GetStockObject(NULL_BRUSH);}}但是如果在OnCtlColor()在设置背景图片,则图片不会随对话框大小按比例缩放所以可调用StretchBlt()函数设置,如下示例:void CDb3Dlg::OnPaint(){CClientDC cdc(this); CDC comdc;comdc.CreateCompatibleDC(&cdc);CBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP2);comdc.SelectObject(&bitmap);CRect rect;GetClientRect(rect);BITMAP bit;bitmap.GetBitmap(&bit);cdc.StretchBlt(0,0,rect.Width(),rect.Height(),&comdc,0,0,bit.bmWidth,bit.bmHeight,SRCCOPY);}//全屏显示对话框背景图片(限bmp格式)用了两年的VC,其实对OnPaint的工作原理一直都是一知半解。

VS2010MFC编程入门之十九(对话框:颜色对话框)

VS2010MFC编程入门之十九(对话框:颜色对话框)

鸡啄米在上一节中为大家讲解了字体对话框的使用方法,熟悉了字体对话框,本节继续讲另一种通用对话框--颜色对话框。

颜色对话框大家肯定也不陌生,我们可以打开它选择需要的颜色,简单说,它的作用就是用来选择颜色。

MFC中提供了CColorDialog类封装了颜色对话框的所有操作,我们可以通过它显示颜色对话框,并获取颜色对话框中选择的颜色。

颜色对话框跟字体对话框一样,也是一种模态对话框。

CColorDialog类的构造函数CColorDialog(COLORREF clrInit = 0,DWORD dwFlags = 0,CWnd* pParentWnd = NULL);参数说明:clrInit:默认选择颜色的颜色值,类型为COLORREF,实际上就是unsigned long类型。

如果没有设置它的值,则默认为RGB(0,0,0),即黑色。

注:RGB(r,g,b)是宏,可以计算颜色值。

括号中的三个值分别为红、绿、蓝分量的值。

dwFlags:自定义颜色对话框功能和外观的属性值。

详情可在MSDN中查阅。

pParentWnd:颜色对话框的父窗口的指针。

获取颜色对话框中所选颜色值我们使用颜色对话框的最终目的还是要获得在颜色对话框中选择的颜色值。

为此CCol orDialog类的成员函数GetColor()能够很好的实现我们的要求。

GetColor()函数的原型为:COLORREF GetColor( ) const;它返回所选颜色的COLORREF值。

如果我们想获得R、G、B各分量的值呢?可以根据GetColor得到的COLORREF颜色值,通过使用GetRValue、GetGValue和GetBValue三个宏获得。

GetRValue的语法形式为:BYTE GetRValue(DWORD rgb);参数rgb就是COLORREF颜色值,返回值即是R分量值。

其他两个宏的形式与之类似。

例如,GetColor()函数返回的COLORREF为10000,则R分量值就是GetRValue(10 000)。

MFC中添加背景图片

MFC中添加背景图片

方法一:1、声明成员变量CBrush m_brush;2、在InitDialog中添加代码:3、重载对话框的OnCtlColor,改最后的返回值:方法二:把下面这段代码加进OnPaint()里就行了方法三:使用StretchBlt()函数,具有图像自适应窗体功能dc.Rectangle(0,0,200,200); // 这些参数可以调整图片添加位置和大小dc.SelectObject(pOldBrush);问题有的程序员希望在自己的应用程序中以有趣味的位图来代替对话框中令人讨厌的灰色背景,希望位图在对话框中看起来象墙纸而且并不影响对话框中的控制或静态文本的显示。

许多程序员找不到一个改变窗口背景的简单方法,是否有方法利用Windows API 函数来改变对话框的背景为某个位图呢?方法改变对话框的背景为某个位图并不困难,关键是需要清楚对话框和窗口是如何设置背景颜色的,以及程序员应该如何修改对话框和窗口改变显示的行为。

当Windows 准备改变对话框背景的颜色时,通常发送两个消息给对话框。

第一个消息是WM_ERASEBKGND,此消息指示对话框绘制对话框的背景颜色,以“抹去”屏幕上对话框显示区域的任何显示。

第二个消息是WM_CTLCOLOR,发送此消息给对话框或窗口来表示Windows 需要知道对话框中控制的颜色。

在本节中,将重置对消息WM_ERASEBKGND 的处理,以便将位图绘制在窗口的背景上。

另外,将重置对消息WM_CTLCOLOR 的处理,以避免对话框中的控制“剪补”位图。

最后的结果是对话框的背景位图绘制在对话框背景上,控制在背景位图的“上面”。

步骤按照下列步骤实现一个例子程序。

运行此例子程序,选择菜单Dialog 和菜单项Bitmap Background,将弹出一个对话框,显示背景位图和几个控制。

实现例子程序的具体步骤如下:1.在Visual C++中,利用AppWizard 创建新的项目文件,并命名此项目文件为Ld145。

MFC无标题栏对话框美化

MFC无标题栏对话框美化

1.无标题栏和边框的对话框Border 属性改为NoneTitle bar属性改为False2.对话框添加OnInitDialog函数OnInitDialog 在vs2010中实现为虚函数,所以在“项目”-> “类向导”-> “虚函数”->找到对应虚函数添加即可,就这么简单。

3.移动无标题栏的对话框拖动无标题窗口时,欺骗WINDOW在鼠标点下是像WINDOW发送一个鼠标选中WINDOW标题栏的消息!添加鼠标左键消息。

void CMyPlayerDlg::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call default//使窗口可以拖动PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM (point.x, point.y));CDialog::OnLButtonDown(nFlags, point);}在OnLButtonDown的鼠标响应消息添加红色部分代码!WM_NCLBUTTONDOWN 鼠标选中非客户区域(标题栏)HTCAPTION 鼠标选中了标题栏MAKELPARAM (point.x, point.y)) 返回一个LPARAM的值PostMessage函数功能:该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。

消息队列里的消息通过调用GetMessage和PeekMessage取得。

原型与参数如下:函数原型:BOOL PostMessage(UINT Msg,WPARAM wParam,LPARAM lParam);参数说明:Msg:指定被寄送的消息。

wParam:指定附加的消息特定的信息。

IParam:指定附加的消息特定的信息。

我整理的MFC界面美化

我整理的MFC界面美化

我整理的MFC界面美化一,对话框背景为一幅位图1.插入位图打开VC6.0MFC程序,右击“Dialog”,打开“引入”,选择图片就可以引入一个位图了。

2.打开“ClassView”,再打开“CAbouttDlg()”函数,找到void CTuxingDlg::OnPaint()函数,粘贴上CPaintDC dc(this);CRect rect;GetClientRect(&rect);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP1);//IDB_BITMAP1是你自己的图对应的IDBITMAP 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);二.在对话框上显示一幅位图法一:把图片引入工程,其句柄名为IDB_BITMAP2;然后放一个静态控件或者图片控件到对话框上,将其句柄名设为IDC_SHOWBMP; 具体代码为在需要使用的地方(如按钮函数或OnInitDialog()或OnPaint()里等等)加入如下代码:CStatic *p =(CStatic *)GetDlgItem(IDC_SHOWBMP);HBITMAPhBitmap=::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESO URCE(IDB_BITMAP2));p->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);p->SetBitmap(hBitmap);详解:CStatic *p =(CStatic *)GetDlgItem(IDC_SHOWBMP); //获得指向IDC_SHOWBMP的指针,并将其强制转换为CStatic*类型,并赋值给pHBITMAPhBitmap=::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESO URCE(IDB_BITMAP2));//从工程资源处获得IDB_BITMAP2的位图句柄,并将其赋值给hBitmap变量p->Modifystyle(0xF,SS_BITMAP|SS_CENTERIMAGE);//设置该静态控件(p指向的静态控件),使其用于显示位图,并且是在控件中央显示//(若无此步无法显示,因为没有说明静态对话框要显示的类型是什么)p->SetBitmap(hBitmap);//将需要显示的位图设置为bBitmap,即资源IDB_BITMAP1的句柄法二:通过位图所在路径显示位图(此方法无需事先将位图文件添加为该工程的资源) 在对话框上放一个静态控件(一定是静态控件,若图片控件则无法显示) 将其重命名为IDC_BMP(不重命名的话无法添加变量),然后再为该控件添加一个变量,命名为m_image.在需要使用的地方(如按钮函数或OnInitDialog()或OnPaint()里等等)加入如下代码: this->m_image.ModifyStyle(0,SS_BITMAP |SS_CENTERIMAGE);HBITMAP hBmp = (HBITMAP)::LoadImage(0, "path\\1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);this->m_image.SetBitmap(hBmp);详解:this->m_image.ModifyStyle(0,SS_BITMAP|SS_CENTERIMAGE);//和上面的作用一样,将该静态控件设置为是用来显示位图的,只不过这里是通过该静态对话框的变量来进行/ /modifystyle操作的HBITMAP hBmp = (HBITMAP)::LoadImage(0, "path\\1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); //从bmp文件所在的路径直接读取该bmp图象的句柄,并将其转换为HBITMAP类型//注:其中的"path\\1.bmp"是相对路径,即在和可执行文件的同一目录下有一个名为path的文件夹,里面有一个名为1.bmp的位图文件.this->m_image.SetBitmap(hBmp); //通过变量m_image来设置该静态框所显示的位图文件.三.列表控件的背景在BOOL CTuxingDlg::OnInitDialog()函数中添加以下代码m_List.SetBkColor(RGB(444, 233, 255)); //三个参数可以任意改变,下同m_List.SetTextBkColor(RGB(444, 233, 255));四.设置列表控件属性带有表格线在BOOL CTuxingDlg::OnInitDialog()函数中添加以下代码DWORD NewStyle = m_List.GetExtendedStyle();NewStyle |= LVS_EX_GRIDLINES; m_List.SetExtendedStyle(NewStyle);五.改变全部界面的背景颜色点击“Globals”,再打开“theApp”,在Bool CPersonalFinancialManagementSystemApp::InitInstance()函数中添加SetDialogBkColor(RGB(444, 233, 255), RGB(0, 0, 0));。

创建有个性的对话框之MFC篇

创建有个性的对话框之MFC篇

创建有个性的对话框之MFC篇想使自己的软件与众不同就要给软件加点“色”,一个颜色搭配协调的窗口要比windows千篇一律的灰底黑字更能吸引别人的眼球。

设想如果html浏览器显示的网页都是白底黑字,还会有那么多的mm喜欢上网吗?可能互联网的人气将下想使自己的软件与众不同就要给软件加点“色”,一个颜色搭配协调的窗口要比wind ows千篇一律的灰底黑字更能吸引别人的眼球。

设想如果html浏览器显示的网页都是白底黑字,还会有那么多的mm喜欢上网吗?可能互联网的人气将下降一半。

做个出色的界面对于老手来说可能不在话下,但是对于新手来说还是无从下手,使用BCGControlBar和Xtrem e Toolkit是个很好的选择,不过对于一个小程序使用这么大的库未免有头重脚轻的感觉。

其实不使用这些庞然大物一样可以做个很“色”的界面,本文就结合CSDN论坛上经常被问起的问题,介绍几个给对话框上色的方法。

本文的方法都是针对MFC程序的,其他方法请参看“创建有个性的对话框之ATL/WTL篇”。

第一步:改变对话框的背景颜色如何改变对话框的背景颜色这个问题常常出现在论坛上,可见大家对Windows默认的灰色对话框是多么不满。

MFC程序修改对话框的背景和文字颜色最简单的方法就是调用Set DialogBkColor函数,SetDialogBkColor是CWinApp类的成员函数,以下是该函数的原型:void CWinApp::SetDialogBkColor(COLORREF clrCtlBk, COLORREF clrCtlText);请注意,SetDialogBkColor函数并不是对Windows的某个API的封装,他是MFC框架的一部分,所以不使用MFC的程序也就不能享受这种方便。

这个函数的使用很简单,在程序的CWinApp派生类的InitInstance函数中添加一行代码就行了:SetDialogBkColor(RGB(188,197,230),RGB(13,125,188));图.1 就是运行效果:图.1 SetDialogBkColor效果图使用SetDialogBkColor也有局限的地方,那就是所有的控件文字颜色都一样,不能针对不同的控件设置不同的文字颜色,还有就是不能设置Edit控件的颜色。

MFC控件实例之颜色对话框

MFC控件实例之颜色对话框

MFC控件实例之颜色对话框(VS2010版本)本例来自于“鸡啄米”---VS2010之MFC入门到精通教程实例步骤:一、创建一个基于对话框的MFC 工程,名称为“ColorDemo”二、点击“确定”,下一步后选择如下界面三、各个控件的设置1、按钮的设置2、静态文本的设置3、编辑框的设置4、红色分量、绿色分量、蓝色分量的设置(只给出红色分量的设置,另两个类似)四、为按钮IDC_COLOR_BUTTON 添加点击消息的消息处理函数五、在函数中添加如下代码// TODO: 在此添加控件通知处理程序代码// 颜色对话框的初始颜色为红色COLORREF color = RGB(255, 0, 0);// 构造颜色对话框,传入初始颜色值CColorDialog colorDlg(color);// 显示颜色对话框,并判断是否点击了“确定”if ( IDOK == colorDlg.DoModal() ){// 获取颜色对话框中选择的颜色值color = colorDlg.GetColor();// 在Color 编辑框中显示所选颜色值SetDlgItemInt(IDC_COLOR_EDIT,color);// 在R 编辑框中显示所选颜色的R 分量值SetDlgItemInt(IDC_R_EDIT,GetRValue(color));// 在G 编辑框中显示所选颜色的G 分量值SetDlgItemInt(IDC_G_EDIT,GetGValue(color));// 在B 编辑框中显示所选颜色的B 分量值SetDlgItemInt(IDC_B_EDIT,GetBValue(color));}六,运行,如下界面。

VS2010_MFC编程入门之十九(对话框:颜色对话框)-软件开发-鸡啄米

VS2010_MFC编程入门之十九(对话框:颜色对话框)-软件开发-鸡啄米

以下是实例创建的步骤:
1.创建一个基于对话框的MFC工程,名字为“Example19”。
2.在自动生成的主对话框IDD_EXAMPLE19_DIALOG的模板中,删除“TODO: Place dialog contr ols here.”静态文本框,添加一个按钮,ID设为IDC_COLOR_BUTTON,Caption设为“颜色选择”,用 于显示颜色对话框来选择颜色。再添加四个静态文本框,ID分别为IDC_COLOR_STATIC、IDC_R_S TATIC、IDC_G_STATIC、IDC_B_STATIC,Caption分别设为“Color:”、“R:”、“G:”、“B:”,然 后每个静态文本框后添加一个编辑框,四个编辑框的ID分别为IDC_COLOR_EDIT、IDC_R_EDIT、ID C_G_EDIT、IDC_B_EDIT,分别用来显示颜色对话框中选择的颜色值和所选颜色值的红色分量、绿 色分量、蓝色分量。
2013职称计算机考试题库下载浪潮服务器冠军品质智能高效123456789订阅鸡啄米站内搜索分类标签编程入门124vc72mfc62c61vs201060android38苹果37平板电脑31智能手机31谷歌28iphone18ipad17windows17设计模式15三星12腾讯11程序员11微软10facebook8新浪8galaxy7首页it互联网数码生活软件开发职场人生娱乐休闲安卓开发留言簿鸡啄米下面给大家做一个颜色对话框的小例子
VS2010/MFC编程入 门之四十一(文档、 视图和框架:分割窗 口)
除非特别注明,鸡啄米文章均为原创 转载请标明本文地址:/software/177.html
无觅关联推荐[?] 2012-5-17 21:26:10
作者:鸡啄米 分类:软件开发 浏览:30455

对话框设置背景图片

对话框设置背景图片

对话框设置背景图片CRect rect;GetClientRect(&rect);CDC *pDC=GetDC(); //这句值得记忆,如何获取当前DCCDC memdc;memdc.CreateCompatibleDC(pDC);CBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP3);memdc.SelectObject(bitmap);pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);对于一般的空间及本功能对话框设置背景图片的中心思想大致是:获取本当前对话框坐标及句柄,然后创建图片对象,并加载控件,然后客户对话框选中图片对象并进行转换(最后一句)。

这些都是在OnPaint()下进行的。

Invalidate():立即重绘客户对话框(即立即刷新对话框),调用OnPaint()相关的消息映射。

路径显示图片MFC界面加载图片大致有两个方法:通过BITMAP控件直接加载和通过路径动态加载图片。

通过BITMAP 加载图片很简单没有技术含量。

在Resource页面下,添加Resource,然后导入图片(注意是BMP格式的,其他格式暂时没有研究),重命名等设置一下;接下来在对话框中添加picture control 控件,在type中选择bitmap,然后在image 中选择导入的加入的那个BITMAP就可以了。

通过路径加载图片相对复杂一点。

picture control保持默认就可以。

CPaintDC dc(this);HBITMAP bmpHandle;bmpHandle = (HBITMAP)LoadImage(NULL,_T(图片路径),IMAGE_BITMAP,0,0,LOADFROMFILE);//路径要使用双\CBitmap bmpPicture;CDC mdcPicture;CBitmap *bmpFromHandle = bmpPicture.FromHandle(bmpHandle);CRect rctPicture;GetDlgItem(picture控件)->GetWindowRect(&rctPicture);//上面那一句很重要,GetDlgItem,获取相关控件//关联相关控件,比如按钮控件m_btn.SubclassDlgItemmdcPicture.CreateCompatibleDC(&dc);CBitmap *bmpPrevious = mdcPicture.SelectObject(bmpFromHandle);ScreenToClient(&rctPicture);dc.BitBlt(rctPicture.left,rctPicture.top,rctPicture.Width();rctPicture.Heigth(),&mdcPicture,0,0,SRCCOPY);dc.SelectObject(bmpPrevious);控件背景设置加载ON_WM_CTLCOLOR消息映射,在相关的响应OmCltcolor响应函数中,添加以下代码可以修改相关控件的背景颜色等。

mfc对话框使用

mfc对话框使用

mfc对话框使用MFC对话框使用指南MFC (Microsoft Foundation Classes) 是微软开发的一套类库,用于快速实现 Windows 程序的开发。

其中,对话框是 Windows 程序中常用的图形用户界面,本文将介绍 MFC 对话框的使用方法。

一、创建对话框1.在 Visual Studio 中选择 File ➡️ New ➡️ MFC Application,选择对话框类型,点击 Finish。

2.在弹出的对话框属性编辑器中,可以更改对话框的标题、大小、背景颜色等属性。

3.在对话框上添加控件,如按钮、文本框、列表框等。

二、控件的属性设置1.选中控件,右键点击 Properties,弹出控件属性编辑器。

2.在格式中设置控件的字体、颜色、大小等。

3.在常规中设置控件的 ID 号,和提示信息等。

4.在事件中设置控件的响应事件,如单击事件、双击事件等。

三、控件的事件响应1.打开类向导,选择类视图中的一个控件,添加消息映射。

2.在消息映射中设置事件响应函数。

3.在事件响应函数中实现相应的逻辑功能。

四、对话框操作1.打开类向导,选择类视图中的对话框。

2.添加成员变量,获取对话框上的控件对象。

3.在对话框中添加响应函数,如确定按钮、取消按钮等。

4.在响应函数中实现对话框的操作功能,如关闭对话框、保存数据等。

五、运行程序1.生成程序,运行程序。

2.在程序中测试对话框、控件的交互功能。

以上的 MFC 对话框使用指南仅作为基础的入门介绍,通过掌握以上的操作步骤和方法,可以快速地了解和使用 MFC 对话框的功能,并应用到自己的开发项目当中。

同时,对于技术提升有兴趣的读者,还可以进一步学习如何使用代码实现更多的对话框功能和复杂的交互逻辑。

MFC颜色调配 vc++6.0颜色设置,如何修改控件颜色

MFC颜色调配  vc++6.0颜色设置,如何修改控件颜色

效果展示1.新建一个MyEdit类,该类继承自CEdit类,并添加相关变量和函数;在MyEdit类的头文件(.h)中定义如下变量和函数:private:COLORREF m_BackgroundColor;//背景颜色COLORREF m_TextColor;//文本颜色CBrush m_brushBk;//笔刷public:void SetBackgroundColor(COLORREF color);//设置背景颜色void SetTextColor(COLORREF color);//设置文本颜色COLORREF GetBackgroundColor() const;//获取背景颜色COLORREF GetTextColor() const;//获取文本颜色在MyEdit类的源文件(.cpp)中给变量赋初值,并书写函数体如下:MyEdit::MyEdit()//构造函数{m_BackgroundColor=RGB(0,0,0);m_TextColor=RGB(250,250,250);}MyEdit::~MyEdit()//析构函数{m_brushBk.DeleteObject();//释放笔刷}void MyEdit::SetBackgroundColor(COLORREF color)//设置背景颜色{m_BackgroundColor=color;}void MyEdit::SetTextColor(COLORREF color)//设置文本颜色{m_TextColor=color;}COLORREF MyEdit::GetBackgroundColor() const//获取背景颜色{return m_BackgroundColor;}COLORREF MyEdit::GetTextColor() const//获取文本颜色{return m_TextColor;}打开类向导,给MyEdit类添加=WM_CTLCOLOR消息反射在MyEdit类的源文件中的CtlColor()中添加如下代码:HBRUSH MyEdit::CtlColor(CDC* pDC, UINT nCtlColor){// TODO: Change any attributes of the DC herem_brushBk.DeleteObject();m_brushBk.CreateSolidBrush(m_BackgroundColor);pDC->SetBkColor(m_BackgroundColor);pDC->SetTextColor(m_TextColor);// TODO: Return a non-NULL brush if the parent's handler should not be calledreturn (HBRUSH)m_brushBk.GetSafeHandle();}2.新建一个ColorMatch类,该类继承于CDialog类,设置对话框页面布局,添加变量和函数;设置对话框所需要的控件,并进行布局打开类向导为控件绑定变量在ColorMatch类的头文件中加入如下代码:public:CFont m_Font;//字体对象void SetColor();//设置颜色函数打开类向导为ColorMatch类添加如下消息映射在ColorMatch类的源文件中加入如下代码:BOOL CColorMatch::OnInitDialog()// 初始化函数{CDialog::OnInitDialog();// TODO: Add extra initialization herem_slider_red.SetRange(0,255,false);//设置滑动控件的范围m_slider_green.SetRange(0,255,false);//设置滑动控件的范围m_slider_blue.SetRange(0,255,false);//设置滑动控件的范围m_Font.CreateFont(50,0,0,0,0,FALSE,FALSE,0,ANSI_CHARSET,OUT_D EFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,LPCTSTR("A rial"));m_EE.SetFont(&m_Font);//设置显示的字体大小m_red.SetBackgroundColor(RGB(255,0,0));m_green.SetBackgroundColor(RGB(0,255,0));m_blue.SetBackgroundColor(RGB(0,0,255));return TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE }void CColorMatch::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) /*滑动条被滑动时触发*/{// TODO: Add your message handler code here and/or call defaultSetColor();CDialog::OnHScroll(nSBCode, nPos, pScrollBar);}void CColorMatch::SetColor()//设置颜色函数{int red=m_slider_red.GetPos();//获取红色值int green=m_slider_green.GetPos();//获取绿色值int blue=m_slider_blue.GetPos();//获取黄色值COLORREF color=RGB(red,green,blue);//合成RGB值m_EE.SetBackgroundColor(color);//设置背景颜色m_EE.SetTextColor(16777215-color);//设置字体颜色CString colorstr,redstr,greenstr,bluestr;colorstr.Format("%d",color);//颜色字符串化SetDlgItemText(IDC_EDIT,colorstr);redstr.Format("%d",red);greenstr.Format("%d",green);bluestr.Format("%d",blue);SetDlgItemText(IDC_EDIT_RED,redstr);//修改各种颜色的数值SetDlgItemText(IDC_EDIT_GREEN,greenstr);SetDlgItemText(IDC_EDIT_BLUE,bluestr);}3.编译、链接生成可执行文件进行测试。

MFC中设置static text控件的背景色

MFC中设置static text控件的背景色

MFC中设置static text控件的背景色、字体、字号和颜色在实际的应用中,可以用WM_CTLCOLOR 消息改变MFC中控件的颜色,比如现在就来改变一个static text控件的字体、字体大小、字体颜色和背景色。

例如对话框的类为CTestDlg:1. 在对话框的类中添加两个变量.方法:在classview选项卡中,选择CTestDlg,右键,add member variable. CBrush m_brush;CFont m_font;在OnInitDialog()函数中添加:// TODO: ……m_font.CreatePointFont(150,"华文行楷");//代表15号字体,华文行楷m_brush.CreateSolidBrush(RGB(0,255,0));//画刷为绿色2 添加WM_CTLCOLOR 消息响应,添加的方法为:add windows message handler->WM_CTLCOLOR->add and edit3 在HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 函数中的todo后添加代码,即:,HBRUSH CYourDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC hereif (pWnd->GetDlgCtrlID() == IDC_STATICText){pDC->SetBkColor(RGB(0,255,0));//背景色为绿色pDC->SetTextColor(RGB(255, 0, 0));//文字为红色pDC->SelectObject(&m_font);//文字为15号字体,华文行楷return m_brush;}// TODO: Return a different brush if the default is not desiredreturn hbr;}这样就可以改变static text的背景色、字体、字体大小和字体颜色了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、设置背景颜色的三种方法:
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文件夹里。

相关文档
最新文档