zoukankan      html  css  js  c++  java
  • 如何编写背景透明的MFC ActiveX控件

        我找了很久这方面的文章,一直觉得要做很复杂的工作,其实非常简单。MFC本身就给我们提供了很好的实现:无窗口激活。

        看看MSDN的说明:

    执行窗口创建代码(即调用 CreateWindow 时发生的事情)的费用很大。维护屏幕窗口的控件不得不管理窗口的消息。因此无窗口控件比有窗口控件快。

    无窗口控件的另一个优点在于,与有窗口控件不同,无窗口控件支持透明绘制非矩形屏幕区域。透明控件的一个常见示例是具有透明背景的文本 (Literal) 控件。文本 (Literal) 控件绘制文本但不绘制背景,因此文字下方的内容都显露出来。较新的窗体常使用非矩形控件,如箭头和圆按钮。


        只需要在建立项目的时候(VS.NET 2003),在“控件设置”中选择“无窗口激活”,就可以了。

        如果已经建立了项目,也不要紧,只需要重写GetControlFlags()函数就可以了。具体实现如下:

    DWORD CTransRectCtrl::GetControlFlags()
    {
     DWORD dwFlags = COleControl::GetControlFlags();


     dwFlags |= windowlessActivate;
     return dwFlags;
    }

        不过使用了无窗口激活之后,控件就没有了自己的窗口,刷新就成了问题,Invalidate()是不能用的,否则,ASSERT(::IsWindow(m_hWnd));可不是吃素的。

        这个时候就要使用InvalidateControl()来进行刷新了。

        还有其他的问题,可参考:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/_core_providing_windowless_activation.asp。虽然简单,总比没有的好。呵呵

  • 相关阅读:
    查看占用内存cpu top10
    free 详解
    find
    服务器硬件查看
    firewalld命令使用
    firewalld-zone概念介绍
    Jenkins rpm包安装
    攻击防御案例
    filebeat收集系统登陆日志
    nginx转换json格式
  • 原文地址:https://www.cnblogs.com/s5689412/p/152753.html
Copyright © 2011-2022 走看看