我有一个父窗口(MFC对话框),上面有一些控件(编辑框,按钮等),如下所示:
在运行时(OnInitDialog
),我使用以下代码创建另一个子窗口,该窗口覆盖并隐藏对话框中的所有其他控件:
RECT r;
GetClientRect(&r);
m_layer.Create(NULL, NULL, WS_CHILD | WS_VISIBLE, r, this, 0);
m_layer
对象是继承自CLaywerWnd
的类CWnd
的实例。在本课程中,我重写了以下方法:
BOOL CLayerWnd::OnEraseBkgnd(CDC* pDC)
{
CBrush b(RGB(0, 100, 100));
RECT r;
GetClientRect(&r);
pDC->FillRect(&r, &b);
return TRUE;
}
现在我的窗口看起来像这样:
问题是,当我移动鼠标光标或点击这个新的子窗口时,消息被转发到父窗口(我使用Spy ++检查),其他子控件重新绘制在新的子窗口上,如波纹管。
我不明白为什么会发生这种情况,我想知道如何避免这种行为。
答案 0 :(得分:0)
我可能错了,但我想知道你是否在代码中混淆了两个对话框的句柄,这样你就会将消息发布到错误的对话框中?
答案 1 :(得分:0)
避免它的一个简单方法需要两个步骤:
SetWindowPos
。