如何更改qq对话框将CFileDialog对话框的背景色更改

如何改变对话框的背景颜色 - CSDN博客
如何改变对话框的背景颜色
1、如何改变对话框的背景颜色
方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下:---- ① 新建一个基于Dialog的MFC AppWizard应用程序ExampleDlg。---- ② 在CExampleDlgApp ::InitInstance()中添加如下代码:BOOL CExampleDlgApp: : InitInstance ( ){&CExampleDlgDm_pMainWnd = &//先于DoModal()调用,将对话框设置为蓝色背景、红色文本SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));int nResponse = dlg.DoModal();&}---- 编译并运行,此时对话框的背景色和文本色已发生了改变。值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。
方法二:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准):void CExampleDlgDlg::OnPaint(){if (IsIconic())&else{CRCPaintDC dc(this);GetClientRect(rect);dc.FillSolidRect(rect,RGB(0,255,0)); //设置为绿色背景CDialog::OnPaint();}
方法三:重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):---- ①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量:class CExampleDlgDlg : public CDialog{...protected:CBrush m_...};---- ②在OnInitDialog()函数中添加如下代码:BOOL CExampleDlgDlg::OnInitDialog(){...// TODO: Add extra initialization herem_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子...}---- ③利用ClassWizard重载OnCtlColor(&),即WM_CTLCOLOR消息:HBRUSH CExampleDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){/*** 这里不必编写任何代码!**下行代码要注释掉** HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);*/return m_ //返加绿色刷子}
&方法四:还是重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):---- 步骤①、②同上方法三中的步骤①、②。---- 步骤③利用ClassWizard重载OnCtlColor(&)(即WM_CTLCOLOR消息)时则有些不同:HBRUSH CExampleDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);//在这加一条是否为对话框的判断语句if(nCtlColor ==CTLCOLOR_DLG)return m_ //返加绿色刷子
2、 如何在OnCtlColor里使对话框透明(以及如何改變對話框外觀)
方法一:HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){//设置透明背景模式pDC-&SetBkMode(TRANSPARENT);//设置背景刷子为空return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);}
方法二:我们可以改变对话框的背景颜色,或对话框中的控件颜色以使得程序界面不至于千篇一律,如何做呢?每个控件和对话框在显示之前回发送WM_CTLCOLOR消息,如果派生对话框类对WM_CTLCOLOR消息进行了映射,就可以设定文本的前景色和背景色。同时还可以为控件或对话框的非文本区域选择一个刷子。  WM_CTLCOLOR消息对应的函数为OnCtlColor,OnCtlColor函数的原型为:afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor );其中参数pDC是:一个指向设备环境的指针。pWnd:指定特定的控件。nCtlColor:指明控件类型。可以有以下类型:CTLCOLOR_BTN button controlCTLCOLOR_DLG dialog boxCTLCOLOR_EDIT edit controlCTLCOLOR_LISTBOX list boxCTLCOLOR_MSGBOX message boxCTLCOLOR_SCROLLBAR scroll barCTLCOLOR_STATIC static text, frame, or rectangle现在为了突出显示文本框的显示号码,我们将文本框的文字背景设为黄色。步骤1、添加一个成员变量 HBRUSH m_hB步骤2、用Class Wizard为CGuessDlg加入WM_CTLCOLOR消息,并编辑OnCtlColor函数:HBRUSH CGuessDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){if(nCtlColor==CTLCOLOR_EDIT){pDC-&SetBkColor (RGB(255,255,0));//EDIT控件文字背景为黄色return m_hB}return CDialog::OnCtlColor (pDC,pWnd,nCtlColor);}&
本文已收录于以下专栏:
相关文章推荐
一、TeeChart 控件导入VS的用法和vc6有很大的不同,特别是在一些函数调用那里,当然。控件导入也是很不一样的,安装好控件后就可以在工程里加入teechart控件了:1、添加...
重载OnCtlColor   (CDC*  pDC,   CWnd*   pWnd,  UINT   nCtlColor), 即WM_CTLCOLOR消息
.h头文件...
方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。  
----   其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。
下面的例子是将应用程序对话框设...
原文地址:http://blog.csdn.net/stavck/article/details/1252556
1、如何改变对话框的背景颜色
方法一:调用CWinApp类的成员函数SetDi...
---- 方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。
---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对话框设置为...
方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。
其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。
下面的例子是将应用程序对话框设置为蓝色背景和红色...
vc对话框添加图片背景及改变背景颜色( 15:19:07)
一、改变对话框背景颜色的方法
方法一:调用CWinApp类的成员函数SetDialogBkColor...
一、改变对话框背景颜色的方法方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
等你忘了我是谁- 浪哥
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
(1)可以在CLotteryApp::InitInstance()设置更新对话框的背景颜色&& & &调用SetDialogBkColor(RGB(160,32,240)) 即可以改变背景颜色&&& & & &注意这里绘制的颜色是针对程序中所有的对话框&&& & & SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));&& & & &前一个RGB是背景色,后一RGB是文本颜色&& (2)也可以再CLotteryDlg::OnPaint() 函数里的 else 之后括号里插入如下代码:&& & & &CR&&& & & &CPaintDC dc(this);&&& & & &GetClientRect(rect);&&& & & &dc.FillSolidRect(rect,RGB(189,250,200)); &颜色可以自己随便设置&&(3) 利用ClassWizard重载OnCtlColor(),即WM_CTLCOLOR消息&& 在要着色的对话框中申明一个变量,CBRUSH &m_然后在项目的Dlg类初始化函数中给m_hbrush赋值。m_brush.CreateSolidBrush(RGB(0, 255, 0));然后在OnCtlColor(...)返回该画刷就可以了,如下。HBRUSH CLotteyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)&{&HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);&&&switch (nCtlColor)&{&case CTLCOLOR_DLG:&&HBRUSH aB&&aBrush = CreateSolidBrush(RGB(0, 150, 0));&&hbr = aB&&&}&&&}再介绍一下:如何清空编辑框里的内容&& &清空指定的编辑框内容:SetDlgItemText(IDC_EDIT,""); //更新编辑框里的内容更多可以参看:个人博客里的那篇 彩票3D 智能预测软件 源代码。
阅读(6714)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_080064',
blogTitle:'MFC
如何改变对话框的默认背景颜色',
blogAbstract:'下面介绍三种方法:实现改变对话框的默认背景颜色:(1)可以在CLotteryApp::InitInstance()设置更新对话框的背景颜色&& & &调用SetDialogBkColor(RGB(160,32,240)) 即可以改变背景颜色&&& & & &注意这里绘制的颜色是针对程序中所有的对话框&&& & & SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));&& & & &前一个RGB是背景色,后一RGB是文本颜色',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:9,
publishTime:3,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'等你忘了我是谁- 浪哥',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}一个定制CFileDialog对话框的实例 - VC++教程 - 编程入门网
一个定制CFileDialog对话框的实例
很多程序员都喜欢让自己的代码运行效果与众不同。Windows系统的应用程序打开某个文件一般使用的都是默认的CFileDialog。但是这个默认的CFileDialog往往满足不了用户的要求。我就碰到一个这样的用户,他的要求如下:
1、在默认的CFileDialog对话框中加一个预览窗格,以便在选中ASCII文件时能看到所选文件的内容,也就是用*.txt作为文件过滤条件。
2、在默认的CFileDialog对话框中加一个&全部&按钮来选择某个目录中所有的.txt文件。
3、如果选择的目录中没有.txt文件时,要将&全部&按钮disable,也就是置灰这个按钮。
实现上面这些需求必须要改装CFileDialog对话框。当最后写完程序时,功能到是全都实现了,但在Windows 2000环境测试中,用户发现了这样一个问题:如果先选中某个文件,然后再去选某个文件夹,预览窗格仍然显示的那个文件的内容。尽管在OnFileNameChange中对CDN_SELCHANGE进行了处理,为了获取所选的文件/路径名,也调用了CFileDialog::GetPathName。但是即使是选中了文件夹,GetPathName仍然返回的是文件的名字。即便尝试用其它的通知消息和函数,比如 CDN_FOLDERCHANGE 和 GetFileName,但仍旧存在同样的问题。必须承认在Windows 2000中,CFileDialog是个不完美的对话框,确实存在上述问题。正是有这些不完美,程序员们才忙得个不亦乐乎......那么到底如何判断用户选中的是文件还是文件夹呢?下面就让我们从用户需求开始,一个一个解决所碰到的问题。
首先简单介绍下本文引入的三个辅助类:CFileDialogHook;CFileDialogOwnerHook和CFileDlgHelper,这三个类很简单,其功能分别是:子类化文件对话框;子类化文件对话框的父窗口或宿主窗口,这两个类只在CFileDlgHelper类中使用,一些重要的处理都在CFileDlgHelper中。它的使用方法很简单,实例化CFileDlgHelper以后调用Init即可。
class CMyOpenDlg ... {
protected:
 CFileDlgHelper m_//实例化
BOOL CMyOpenDlg::OnInitDialog()
 m_dlghelper.Init(this)//初始化
初始化CFileDlgHelper以后,便可以用它来获取列表控制以及判断选项是否有文件夹属性,例如:
CListCtrl* plc = m_dlghelper.GetListCtrl();
POSITION pos = plc-&GetFirstSelectedItemPosition();
while (pos) {
 int i = plc-&GetNextSelectedItem(pos);
 if (fdh.IsItemFolder(i)) {
  // 显示&(FOLDER)&&&
 } else {
  // 显示其它内容
毫无疑问,要改装CFileDialog对话框,必须建立一个它的派生类以及一个新的对话框资源。&全部&按钮的实现代码是这样的:
void CMyOpenDlg::OnSelectAll()
 CListCtrl* plc = m_dlghelper.GetListCtrl();
 for (int i=0; i&plc-&GetItemCount(); i++) {
  CString fn = plc-&GetItemText(i,0);
  if (IsTextFileName(fn)) {
   plc-&SetItemState(i,LVIS_SELECTED,
    LVIS_SELECTED);
 plc-&SetFocus();VC&改变对话框的背景色
方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。&&
----&其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。&
下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下:&&
----&①&新建一个基于Dialog的MFC&AppWizard应用程序ExampleDlg。&&
----&②&在CExampleDlgApp&::InitInstance()中添加如下代码:&&
BOOL&CExampleDlgApp:&:&InitInstance&(&)&
CExampleDlgDlg&&
m_pMainWnd&=&&&
//先于DoModal()调用,将对话框设置为蓝色背景、红色文本&
SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));&
int&nResponse&=&dlg.DoModal();&
----&编译并运行,此时对话框的背景色和文本色已发生了改变。值得注意的&
是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变&
应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。&&
----&方法二:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准):&&
void&CExampleDlgDlg::OnPaint()&&
if&(IsIconic())&
CPaintDC&dc(this);&
GetClientRect(rect);&
dc.FillSolidRect(rect,RGB(0,255,0));&//设置为绿色背景&
CDialog::OnPaint();&
----&方法三:重载OnCtlColor&(CDC*&pDC,&CWnd*&pWnd,&UINT&nCtlColor),&
即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):&&
----&①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量:&&
class&CExampleDlgDlg&:&public&CDialog&
protected:&
CBrush&m_&&
----&②在OnInitDialog()函数中添加如下代码:&&
BOOL&CExampleDlgDlg::OnInitDialog()&&
//&TODO:&Add&extra&initialization&here&
m_brush.CreateSolidBrush(RGB(0,&255,&0));&//&生成一绿色刷子&&
----&③利用ClassWizard重载OnCtlColor(…),即WM_CTLCOLOR消息:&&
HBRUSH&CExampleDlgDlg::OnCtlColor&
(CDC*&pDC,&CWnd*&pWnd,&UINT&nCtlColor)&&
return&m_&//返加绿色刷子&
----&方法四:还是重载OnCtlColor&(CDC*&pDC,&CWnd*&pWnd,&UINT&nCtlColor),&
即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):&&
----&步骤①、②同上方法三中的步骤①、②。&&
----&步骤③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息)时则有&
些不同:&&
HBRUSH&CExampleDlgDlg::OnCtlColor&
(CDC*&pDC,&CWnd*&pWnd,&UINT&nCtlColor)&&
HBRUSH&hbr&=&CDialog::OnCtlColor(pDC,&pWnd,&nCtlColor);&
//在这加一条是否为对话框的判断语句&
if(nCtlColor&==CTLCOLOR_DLG)&
return&m_&//返加绿色刷子&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。用户名:mapdll
文章数:19
访问量:390801
注册日期:
阅读量:1297
阅读量:3317
阅读量:584973
阅读量:470511
[匿名]w s ni a :
[匿名]51cto游客:
[匿名]Willing:
51CTO推荐博文
一、设置背景颜色的三种方法:1、我们知道程序在运行的时候会调用OnPain函数,那么我们可以在这里设置背景颜色。void
CFlipCardsDlg::OnPaint() {if (IsIconic())&{//保持不变&}&else&{&&&CRect&&
&&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_然后在项目的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 aB&&aBrush = CreateSolidBrush(RGB(0,
150, 0));&&hbr = aB&&&}&// TODO: Return a
different brush if the default is not desired&}这样
为对话框着色就可以实现了。二、给MFC添加背景图图片代码:定位到&& void
CXXXDlg::OnPaint(),在if()...else()中的else()下添加如下代码:&
//CDialog::OnPaint();//要禁止这个调用&& &&&&& CPaintDC& dc(this);&& &&&&&
CRect&&& &&GetClientRect(&rect);&& &&CDC& dcM&& &&dcMem.CreateCompatibleDC(&dc);&&
&&CBitmap& bmpB&& &&bmpBackground.LoadBitmap(IDB_BITMAP);&
&&//IDB_BITMAP是你自己的图对应的ID
&&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文件夹里。
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

更多关于 mfc 更改对话框大小 的文章

 

随机推荐