VC窗体透明而控件不透明以及Static文本背景透明方法

出自http://my.oschina.net/ypimgt/blog/60951

优点:
    1.Dialog 窗体完全透明。 
    2. 窗体上的控件不透明、 DC 绘制的图形不透明。 
    3. 拖动窗体上用 DC 绘制的图形可以移动窗体。 
缺点: 
    1. 窗体设置透明使用是掩码颜色,所以在窗体上用 DC 绘图的过程当中如果采用了和透明掩码颜色相同的颜色将不会显示出来。 
    2. 如果将 Border 属性设置成了 NONE ,那么想通过响应 WM_NCHITEST 消息来实现窗体拖动就无法完成了。只能通过在窗体中增加 DC 绘图的方式来完成。

3.DC绘图时虽然支持半透明绘图,但是透明绘图区域不透明。

1.在OnInitDialog()或OnPaint()中加入:


1

2

3

4

5

<b>COLORREF maskColor = RGB(255,255,255);   //掩码颜色

SetWindowLong(this->GetSafeHwnd(),

              GWL_EXSTYLE,

              GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)| 0x80000);  //设定窗体使用扩展模式

SetLayeredWindowAttributes(maskColor,255,1);  </b>

2.在重载的消息WM_CTLCOLOR中加入:(其中包括Static背景透明方法)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<b>HBRUSH CTimeRemainDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO:  在此更改 DC 的任何特性

    //

    if(nCtlColor == CTLCOLOR_DLG)   //此处设置为窗体透明,CTLCOLOR_DLG表示对话框

    {

        CBrush *brush;

        brush = new CBrush(RGB(255,255,255));

        return (HBRUSH)(brush->m_hObject);

    }

    switch(pWnd->GetDlgCtrlID())   //此处为设置Static Text文本透明。

    {

    case IDC_LEFTTOP:

        pDC->SetBkMode(TRANSPARENT);

        pDC->SetTextColor(RGB(125,0,0));

        return (HBRUSH)GetStockObject(HOLLOW_BRUSH);

    default: break;

    }

    // TODO:  如果默认的不是所需画笔,则返回另一个画笔

    return hbr;

}</b>

时间: 2024-10-11 01:06:13

VC窗体透明而控件不透明以及Static文本背景透明方法的相关文章

VC 透明滑动控件Slider Control

操作系统:Windows 7软件环境:Visual C++ 2008 SP1本次目的:为滑动控件设置背景透明 经常在编写有背景的程序时,滑动控件Slider Control看起来与背景十分不合,我们可以从CSliderCtrl派生自己的类出来,以实现这个功能.下面是效果图: 所参考的资料来自:http://dev.yesky.com/179/2284679.shtml 派生类下载:http://download.csdn.net/source/1851812 使用时,添加滑动控件后,为其添加控件

VC MFC按钮(CButton)控件

VC MFC按钮(CButton)控件 2012年11月11日 19:15   作者:TCEO   分类:技术文章   浏览:4,298 按钮控件 1如何在按钮控件上显示图片 首先确定你要显示在按钮控件的图片类型是什么,这里我是ico图标,由于要在按钮里显示ico图标,所以要把按钮控件的属性改一下, 方法是右击按钮控件,选择属性,单击样式选项卡,把图标这一项给勾上. 然后为这个按钮控件关联一个变量如:m_Quit,类型是”Control”,以后不做说明的话,类型都是”Control”. 按钮控件

WPF中不规则窗体与WindowsFormsHost控件的兼容问题完美解决方案

首先先得瑟一下,有关WPF中不规则窗体与WindowsFormsHost控件不兼容的问题,网上给出的解决方案不能满足所有的情况,是有特定条件的,比如  WPF中不规则窗体与WebBrowser控件的兼容问题解决办法.该网友的解决办法也是别出心裁的,为什么这样说呢,你下载了他的程序认真读一下就便知道,他的webBrowser控件的是单独放在一个Form中,让这个Form与WPF中的一个Bord控件进行关联,进行同步移动,但是在移动的时候会出现闪烁,并且还会出现运动的白点,用户体验肯定不好. OK,

winform窗体中查找控件

private RichTextBox FindControl()        { RichTextBox ret = null;            try            {                Control[] controls = Application.OpenForms["MainForm"].Controls.Find("txtContent", false);                if (controls != nul

VC ON_CONTROL_RANGE多个控件响应一个方法

步骤/方法 分三个步骤 在头文件中声明函数例如 afx_msg void onNum(UINT uID) 在.cpp文件中添加函数体 void CCalculatorDlg::OnNum(UINT uID) { UINT index=uID-IDC_NUM_0; CString num; num.Format(_T("%d"),index); AfxMessageBox(num); } 4 添加消息映射 ON_CONTROL_RANGE(BN_CLICKED,IDC_NUM_0,IDC

TFORMer窗体打印条形码控件

TFORMer-能提供专业的打印方案-能用于大多数应用程序中,如:报告,标签,邮件,商业窗体等等.TFORMer能满足您的标签应用程序, 条形码,和其他报表以及窗体打印的需要. 产品特征: 通过运行时模块(ActiveX and DLL), 软件开发可以整合强大的TFORMer打印引擎到到他们的应用软件中. 产品具体特征如下所示: 可通过预定义的标签模板立即应用于工业和办公等环境. 立即打印-动态数据自动录入(独立于数据库). 免费整合设计器软件 (无需程序技巧也可完成设计). 漂亮的用户界面支

wpf PNG图形窗体 使用webbrowser控件

wpf ,PNG图形半透明窗体 ,使用webbrowser控件 附件:http://files.cnblogs.com/xe2011/WpfApplication1_webbrowser_transparent.rar MainWindow1.XAML <Window x:Name="MainWindow1" x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.co

delphi 窗体只显示控件

procedure TForm1.FormCreate(Sender: TObject);begin    BorderStyle := bsNone;    Brush.Style := bsClear;end; delphi 窗体只显示控件,布布扣,bubuko.com

VC/MFC 在ListCtl 控件中随鼠标移动提示单元格信息

[cpp] view plaincopy BEGIN_MESSAGE_MAP(CTipListCtrl, CListCtrl) //{{AFX_MSG_MAP(CTipListCtrl) ON_WM_MOUSEMOVE() ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTipLis