一个关于窗口背景刷的问题

时间:2021-03-06 23:27:23
我自己从CWnd派生了一个类,并在PreCreateWindow()中重新注册了一个不带背景刷的窗口类。如此应该使本窗口不绘制背景,从而将其后面的父窗口显现出来,这是我想要的效果。但实际的效果是,本窗口是没有刷背景,但透过来的不是父窗口,而是桌面!真是奇怪。我在Create本窗口时没有使用参数WS_CLIPCHILDREN,父窗口应该不会把此块区域剪裁掉的呀,是不是还有别的什么要设置呢?
    有哪位大虾见过类似现象,知道其中缘由,请指点一二,定以高分相抱!

6 个解决方案

#1


子窗口不会刷新背景,其客户区应该是创建时,它所覆盖区域显示的图像
如果它的创建在父窗口之前,(且当前显示桌面),那么它的背景就是桌面了

#2


同意楼上的

#3


look ^ study

#4


谢谢王进的回复。但我的问题还没能解决,希望能再指点一下:
我是在父窗口(是主Dialog)的OnInitDialog()中Create此子窗口的,我认为这样做应该是先创建父窗口(因为在OnInitDialog被调用之前父窗口应该已经创建了)的,但实际却是子窗口创建在先了。这是为什么呢?是我理解有误吗?正确创建子窗口的位置应该在哪个函数里呢?
谢谢!

#5


父窗口已经被创建了,但是还没有开始画

Command what is yours
Conquer what is not

#6


多谢jiangsheng提醒,依你之见,我是没救了吗?而且照这样看来,CWnd::Create()中的参数WS_CLIPCHILDREN不论设置与否,父窗口都不会去刷子窗口所占区域,那么要此参数何用呢?望指教。

#1


子窗口不会刷新背景,其客户区应该是创建时,它所覆盖区域显示的图像
如果它的创建在父窗口之前,(且当前显示桌面),那么它的背景就是桌面了

#2


同意楼上的

#3


look ^ study

#4


谢谢王进的回复。但我的问题还没能解决,希望能再指点一下:
我是在父窗口(是主Dialog)的OnInitDialog()中Create此子窗口的,我认为这样做应该是先创建父窗口(因为在OnInitDialog被调用之前父窗口应该已经创建了)的,但实际却是子窗口创建在先了。这是为什么呢?是我理解有误吗?正确创建子窗口的位置应该在哪个函数里呢?
谢谢!

#5


父窗口已经被创建了,但是还没有开始画

Command what is yours
Conquer what is not

#6


多谢jiangsheng提醒,依你之见,我是没救了吗?而且照这样看来,CWnd::Create()中的参数WS_CLIPCHILDREN不论设置与否,父窗口都不会去刷子窗口所占区域,那么要此参数何用呢?望指教。