自定义窗口 来看看:)

时间:2022-09-08 07:39:16
问题如下:
我自定义一个CWnd,里面处理WM_PAINT事件,绘制一副半透明png图片。
然后我分别在多文档和对话框的程序里面创建了这个CWnd。如下

m_pWnd = new CMyWindow(L"bk.png");
m_pWnd->Create(NULL,"Window",WS_VISIBLE,CRect(0,0,300,300),this,10101);
m_pWnd->ShowWindow(SW_SHOW);
m_pWnd->SetWindowPos(NULL,0,0,300,300,SWP_SHOWWINDOW);


这个时候就会出现一个问题。
基于多文档的程序的这个自定义窗口绘制半透明的时候会剪切到这个程序后面的背景。。比如,如果你这个多文档程序后面是qq,那么这个自定义的窗口在绘制的过程中,半透明部分就会剪切到后面的qq程序的窗口图片,如果只有这个多文档程序。那么它就会把桌面画到这个自定义窗体上来。
而基于对话框的程序,这个自定义的窗口只会把对话框的背景剪切上来。。这应该算是正常的吧。。
请问上面的问题是为什么?如何解决
这个貌似跟windows创建这些窗体时默认的属性有关,因为我尝试过在多文档里面创建一个dialog。然后再在这个dialog上创建这个自定义窗口,并且把多文档主框架的属性赋值给这个dialog。结果情况就和多文档一样了。。

13 个解决方案

#1


自定义窗口 来看看:)
效果大概就上上图。。左边是多文档,右边是对话框。自定义窗口边缘部分是透明

#2


 m_pWnd->SetWindowPos(NULL,0,0,300,300,SWP_SHOWWINDOW); 
在多文档中如果不加这个。。那个自定义窗口感觉就像是只是在主窗口上贴了一张画。。任何东西移动就可以把它擦掉

#3


楼主要实现的效果是跟多文档一样 也能在对话框上 让它能看到桌面么?
你的问题太具体了 或者说 你没有交代你那个窗体具体怎么实现的。 大家很难分析

#4


控件的父窗口去掉WS_CLIPCHILDREN风格

#5


同上,WS_CLIPCHILDREN风格就是在绘制窗口的时候不处理子窗口所占据的区域。

#6


http://download.csdn.net/source/826748

#7


我是想在多文档里面实现的效果和对话框里面的一样- -!

#8


WS_CLipchild 这个去掉或者是添加都没有用的。

#9


多文档和对话框属性我都没有改过。。:)
然后我自定义窗口就只是在OnPaint函数里面添加了一句话。。就是用GDI+的DrawImage画了一副png的画。。。
我要的效果就是在多文档里面这个自定义窗口也能够在透明地方显示的是它父窗口的部分。和对话框一样。。而不是剪切的是另外一个程序的。。

#10


小顶一下

#11


up...

#12


创建的时候加上 WS_CHILD 风格试试。

#13


你是不是禁止了WM_ERASEBKGND消息(简单返回1)?

#1


自定义窗口 来看看:)
效果大概就上上图。。左边是多文档,右边是对话框。自定义窗口边缘部分是透明

#2


 m_pWnd->SetWindowPos(NULL,0,0,300,300,SWP_SHOWWINDOW); 
在多文档中如果不加这个。。那个自定义窗口感觉就像是只是在主窗口上贴了一张画。。任何东西移动就可以把它擦掉

#3


楼主要实现的效果是跟多文档一样 也能在对话框上 让它能看到桌面么?
你的问题太具体了 或者说 你没有交代你那个窗体具体怎么实现的。 大家很难分析

#4


控件的父窗口去掉WS_CLIPCHILDREN风格

#5


同上,WS_CLIPCHILDREN风格就是在绘制窗口的时候不处理子窗口所占据的区域。

#6


http://download.csdn.net/source/826748

#7


我是想在多文档里面实现的效果和对话框里面的一样- -!

#8


WS_CLipchild 这个去掉或者是添加都没有用的。

#9


多文档和对话框属性我都没有改过。。:)
然后我自定义窗口就只是在OnPaint函数里面添加了一句话。。就是用GDI+的DrawImage画了一副png的画。。。
我要的效果就是在多文档里面这个自定义窗口也能够在透明地方显示的是它父窗口的部分。和对话框一样。。而不是剪切的是另外一个程序的。。

#10


小顶一下

#11


up...

#12


创建的时候加上 WS_CHILD 风格试试。

#13


你是不是禁止了WM_ERASEBKGND消息(简单返回1)?