我重载OnEraseBkgnd,在函数里用NULL_BRUSH画一个客房区大的矩形,然后有个问题。

wanglmcy 2006-04-17 01:45:03
这时的效果是:好象窗体透明一样,显示出后面窗体。
如何使用窗口移动到新的位置后,控制我程序的界面上显示当前位置后面窗体上的东西。
...全文
218 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglmcy 2006-04-17
  • 打赏
  • 举报
回复
还有个问题,这个窗口透明的功能我是想用在WORD的签名控件中。是个ACTIVEX控件,我试了一下SetWindowLayerProerty(好象是这个),这个函数不能用,还有好多常见的透明窗体的办法都不能用。哎。咋办呀?
xing_xing_xing 2006-04-17
  • 打赏
  • 举报
回复
根据绘制的内容动态生成一个区域,然后SetWindowRgn
youngwolf 2006-04-17
  • 打赏
  • 举报
回复
透明窗口不是你那样简单的能做出来的,不然就没有那么多关于这方面的教程了。Windows不会给在你窗口下面的窗口发送重绘消息,所以你窗口下面的窗口不会重绘,你的窗口也就不会出现透明的效果了。
除非是像Mackz(在相互)说的那样,把你的窗口限制在区域里,这样你窗口下面的窗口才有可能得到重绘的机会(在区域这外的都会被重绘)。
CUG122032 2006-04-17
  • 打赏
  • 举报
回复
关注一下.
wanglmcy 2006-04-17
  • 打赏
  • 举报
回复
楼上的没有明白我的意思,我的想:
窗体是个规则的矩形,只是想在上面绘制一些东西,窗体上绘制东西的地方可以遮住下面的内容,但没有绘制东西的地方不遮住下面的窗体。
菜牛 2006-04-17
  • 打赏
  • 举报
回复
要使窗体镂空,可以:
SetWindowRgn()
wanglmcy 2006-04-17
  • 打赏
  • 举报
回复
我在OnPaint里写如下代码:
CRect rect;
GetClientRect(&rect);
CPaintDC dc(this); // device context for painting
static HBRUSH hNullBrush = (HBRUSH)GetStockObject(NULL_BRUSH);
FillRect(dc, &rect, hNullBrush);

在OnEraseBkgnd()里返回TRUE

这样可以使用对话框变透明,但当窗口移动时,我的对话框仍然显示移动前窗口所在位置后面的内容,
如何显示移动后对话框新位置后面的内容。
也就是说,这样的窗口如何刷新实时显示窗口后面的内容。
我的想法是实现这个窗口背景是透明的,但上面绘制的东西是正常显示的。
这个方法如果不行,那有没有其它方法呢?

15,975

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧