文谷首页 | 业界传真 | 网络技术 | 服务器 | 数据库 | 存储技术 | 系统安全 | 无线技术 | Cisco | .Net | Windows | Linux | Unix | Java
电子商务 | 网站工程 | 网页设计 | 平面设计 | 多媒体 | 编程语言 | Oracle | MSSQL | Photoshop | ASP | PHP | 实用技巧 | 进程查询 | 文谷论坛
 websphere   .net framework
您现在的位置: IT文谷 >> 开发平台 >> .net framework >> VC.NET >> 文章正文
创建有个性的对话框之MFC篇2006-7-15创建有个性的对话框之MFC篇2006-7-15创建有个性的对话框之MFC篇
创建有个性的对话框之MFC篇2006-7-15创建有个性的对话框之MFC篇2006-7-15创建有个性的对话框之MFC篇
创建有个性的对话框之MFC篇

创建有个性的对话框之MFC篇2006-7-15创建有个性的对话框之MFC篇2006-7-15创建有个性的对话框之MFC篇
想使自己的软件与众不同就要给软件加点“色”,一个颜色搭配协调的窗口要比windows千篇一律的灰底黑字更能吸引别人的眼球。设想如果html浏览器显示的网页都是白底黑字,还会有那么多的mm喜欢上网吗?可能互联网的人气将下降一半。做个出色的界面对于老手来说可能不在话下,但是对于新手来说还是无从下手,使用BCGControlBar和Xtreme Toolkit是个很好的选择,不过对于一个小程序使用这么大的库未免有头重脚轻的感觉。其实不使用这些庞然大物一样可以做个很“色”的界面,本文就结合CSDN论坛上经常被问起的问题,介绍几个给对话框上色的方法。本文的方法都是针对MFC程序的,其他方法请参看“创建有个性的对话框之ATL/WTL篇”。

  第一步:改变对话框的背景颜色

  如何改变对话框的背景颜色这个问题常常出现在论坛上,可见大家对Windows默认的灰色对话框是多么不满。MFC程序修改对话框的背景和文字颜色最简单的方法就是调用SetDialogBkColor函数,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控件的颜色。不使用SetDialogBkColor函数,直接编写代码控制对话框的背景颜色和控件文字颜色也不是很困难的事情,并且这种方法能够提供更灵活的颜色设置方案,比如对不同类型的控件使用不同的文字颜色,使用高亮度的背景颜色突出某个控件等等,最重要的是能够控制Edit控件的文字和背景颜色,下面就介绍这种方法。

  首先是改变对话框的背景颜色。当Windows系统需要重画某个窗口客户区的背景的时候,就会向该窗口发送WM_ERASEBKGND 消息,窗口的处理过程响应这个消息重新画窗口的背景,这个过程称之为“自画”。改变对话框的背景颜色的原理很简单,就是响应这个消息,用自定义的颜色填充对话框的客户区背景,代替对话框窗口默认的背景填充动作。许多新手经常问:“为什么在class wizard中找不到对话框的WM_ERASEBKGND消息,是不是对话框没有这个消息”?其实对话框也是窗口,它也有WM_ERASEBKGND消息,只是MFC的class wizard使用的dialog过滤器将其过滤掉了(只是在message窗口的显示中过滤了,并不是真的不响应这个消息),为的是代码编写过程中突出对话框专有的消息和控件事件。如图。2 所示,只要在class wizard中的“class info” table标签下将消息过滤器改成Windows就可以在对话框的消息列表中看到WM_ERASEBKGND了。

图.2 修改消息过滤器

现在通过class wizard添加WM_ERASEBKGND的消息响应函数,并如下所示修改这个函数:

BOOL CCustDlgDlg::OnEraseBkgnd(CDC* pDC)
{
  CRect rcClient;
  GetClientRect(&rcClient);
  pDC->FillRect(&rcClient,&m_brBkgnd);

  return TRUE;

//  return CDialog::OnEraseBkgnd(pDC);
}

    m_brBkgnd是个CBrush,在此之前已经初始化过了,关键代码是最后返回TRUE,而不是默认的调用基类函数,返回TRUE意在告诉Windows:“我已经画过背景了,你不要再画了”。现在来看看运行的效果:

图.3 重画背景的效果

使用位图作为对话框的背景也不难,就是在整个客户区画一个位图背景,

 

[1] [2] [3] [4] 下一页  

[1] [2] [3] [4] 下一页  

创建有个性的对话框之MFC篇2006-7-15创建有个性的对话框之MFC篇2006-7-15创建有个性的对话框之MFC篇


  • 上一篇文章:

  • 下一篇文章:
  • 进入论坛讨论

    相关文章
    基于.NET的多线程编程入门
    Microsoft .NET 框架资源基础
    VS2005常用插件搜罗
    .net中用GDI+提高gif图片保存画质
    VS.NET:通过Web服务瞄准电子商务
    对象设计中创建VS使用
    安装/初始化/个性化DotNetNuke
    介绍dotnet原动力(DNN)
    GDI+编程10个基本技巧
    DTE .NET工程的自动化编译
    .Net中如何操作IIS的原理分析
    VS.NETRC5无法创建Add-IN工程
    热门文章最新推荐

    版权与免责声明:
    ① 本网转载其他媒体稿件是为传播更多的信息,此类稿件不代表本网观点,版权归原作者所有,本网不承担此类稿件侵权行为的连带责任。
    ② 在本网BBS上发表言论者,文责自负。
    ③ 如您因版权等问题需要与本网联络,请在30日内联系 。
    创建有个性的对话框之MFC篇2006-7-15创建有个性的对话框之MFC篇2006-7-15创建有个性的对话框之MFC篇
    创建有个性的对话框之MFC篇2006-7-15创建有个性的对话框之MFC篇2006-7-15创建有个性的对话框之MFC篇

    .net framework专题
    人气排行
  • 此栏目下没有文章
  • 最近更新
    普通文章技术介绍 新数据网格简介
    普通文章.NET 开发人员该下载的十个必备
    普通文章深入剖析Asp.net资源文件
    普通文章通过事例学习.net的WebForms技
    普通文章ASP.NET Tips1---合并多个字段
    普通文章微软明年1月份出台.NET专业开发
    普通文章微软下月底前完成Vista大部分功
    普通文章揭开微软 .NET 认证考试的面纱
    普通文章Visual Studio:Microsoft开发工
    普通文章Visual Studio:Microsoft开发工
    全站热点       
    最新推荐
    关于文谷 | 联系文谷 | 免责声明 | 文谷社区
    Tel: 0577-65690019    E-mail: ichenjian@gmail.com    MSN:ichenjian@hotmail.com    QQ:2911194
    Copyright © 2004-2006 wengu.org 文谷 All Rights Reserved
    浙ICP备05000327号