1、MFC 学习 设置对话框的背景颜色及设置透明 (2012-03-20 20:57:28) 现说设置背景颜色。 我用了很多方法都不行,查了很多资料,现在说一下解决方案吧。 在 XXXXXXDlg.头文件的 protected:中加入 CBrush m_brush; 在 XXXXXXDlg.cpp 文件中的 OnInitDialog()初始化函数中加入画刷m_brush.CreateSolidBrush(RGB(255,255,255);RGB 中的颜色自己定义。 然后在类向导中添加 WM_CTLCOLOR 消息函数。在里面只写一句话 :return m_brush; 背景颜色就改了。 现在说怎么
2、设计透明了,那就更简单了。 在 OnInitDialog()初始化函数中添加两行代码: SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE)|WS_EX_LAYERED); SetLayeredWindowAttributes(0,200,LWA_ALPHA); 第二行中的 200 为透明度, 0 为全透明, 255 为不透明。 MFC 改变标题栏的颜色 分类: MFC2009-02-06 17:15 2641 人阅读 评论 (0) 收藏 举报 mfc 1、创建一个普通的对话框; 2、重
3、写 WM_NCPAINT 的实现函数; 3、在实现函数中绘制标题栏,如果需要实现系统按钮,利用 DrawFrameControl 实现; 4、如果有系统按钮,重写 (WM_NCLBUTTONDOWN, WM_NCHITTEST, WM_NCLBUTTONUP)的实现函数; 带源码的例子请参考: http:/ VC 标准对话框的标题栏,是有 windows 系统控制颜色的(你可以通过修改桌面属性中的配色方案调整,看到实际效果),也就是说,在通常情况下,这个是不受程序控制的。 作为新手,不推荐做这个改变,比较麻烦。 简单介绍一下修改标题栏颜色和样式的两个方案:(都比较麻烦) 1. 修改对话框属性,
4、去掉系统标题栏,然后自己在客户区自绘一个假的标题栏,加上自定义的几个系统消息 响应按钮。这是多数漂亮的 MFC 工程界面常用的一种手段,优点是不仅可以改变颜色,而且可以改变形状,实现异形窗口和标题栏等等。百度搜 “VC 自绘标题栏 ”可以看到很多文章。 2. 3. 禁止并重载部分 NC 非客户区消息,可以实现改变标题栏颜色,缺点是在一些极端情况下,效果不好(比如弹出模态子对话框或者 AfxMessageBox 之类,会变成系统控制,颜色修改无效)。重载消息包括:WM_NCPAINT| WM_NCACTIVATE|WM_NOTIFY|WM_SETTEXT,主要是第一个,重载后在通常状态下,就改变
5、了颜色, 注意重载后不要调用基类虚函数。 4. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 void CTestPopDlg:OnNcPaint() / TODO: Add your message handler code here CBitmap bmp; bmp.LoadBitmap( IDB_BITMAP1 ); CWindowDC dc ( this ); CDC memDC; memDC.CreateCompatibleDC( CRect rect; GetWindowRect( memDC.SelectObject( dc.StretchBlt( 0, 0, rect.Width(), 25, / Do not call CDialog:OnNcPaint() for painting messages 方案二大概就是这个样子。 方案一是彻底的解决办法,但代码很零散而且多(提示:可以使用界面库实现),方案二相对代码较少,但效果强差人意。