我想实现控件白色部分透明,其它颜色的半透明,能隐约看到word文档的字,。我是用VB做的控件,控件设置了picture,maskcolor,maskpicture就是picture本身,设置了backstyle为透明,插入word中,
白色部分能透明,但其它颜色的却看不到背景。不知该如何解决?
实际上文档打印出来后其它颜色就是和word的背景做的alpha混合,但运行时看起来效果却不对。而且这样透明以后,控件对事件的响应有问题。另外这样透明以后,好像不能禁止用户拖动这个控件了,有什么办法解决吗?能用VB或者VC解决都行。请高手指点。先行谢过!

解决方案 »

  1.   

    The BullsEye control has numerous other features that we don't have the space to discuss in depth. It supports drag and drop. It supports transparent areas in the control, and therefore supports two-pass drawing...
    http://www.microsoft.com/msj/0399/atl3activex2/atl3activex2.aspx
      

  2.   

    非常感谢您的回复。但这个控件注册有问题,用regsvr32或者用ActiveX Control Test Container注册都不行。用他自带的VB工程运行时会有问题:run-time error 424 : Object required。用ActiveX Control Test Container测试时报告:failed to create control :未指定的错误!再换了两台机器,有一台运行是OK的,但得到的结果似乎只有背景透明,不想透明的地方没有和背景(word中的内容)做alpha混合。怎么样才能让不想透明的部分和word中的内容做alpha混合呢?
      

  3.   

    It does not blend with background when drawing. You need to change the source code by yourself.
      

  4.   

    怎么让控件和背景混合呢?能讲的详细些吗?因为我没找到word提供的让插入的ActiveX控件透明的选项,所以考虑让控件绘制时自己和背景做alpha混合。但问题是在控件绘制时,无法得到控件的所在区域的word窗口的图片,也就无从混合。我试过在控件的Paint函数中用API截取WORD窗口图片,但截出来的图上在控件那个区域刚好是空白的,其它区域倒是正常的,很郁闷。另外也想过让控件的窗口变成透明的,用SetLayeredWindowAttributes之类,但这个对普通的窗口有效,取UserControl.hwnd做设置时,没有成功,返回值是0。实际上也没有效果。这个我用VB和MFC做都没有成功。MFC返回错误信息87“参数错误”。
      

  5.   

    http://www.codeguru.com/Cpp/W-D/dislog/splashscreens/article.php/c5023/
      

  6.   

    谢谢jiangsheng!我试过了,这个确实可以做alpha混合,但要和word背景做alpha混合还是有问题:1。插入到word中的ActiveX控件是不是要有特殊的处理? 因为同样一个绘制位图的程序,在testContainer中可以,放在word中就不行。2。好像从控件中取不到word的DC,因此没法和word做混合。3。用API取得word的窗口,得到的图片在控件显示的那一块刚好空白的,而不是背景。这些天一直在搞这个,试了很多方法,都不行,太郁闷了!