分别用向导创建了两个程序,假设有窗口A、B,其中A为SDI风格的框架窗口,即CMainFrame,B为对话框风格的对话框,即CMyDialog。现在创建一个窗口C,步骤如下(关于错误处理部分省略了):CWnd         C;C.CreateEx(0,AfxRegisterWndClass(0),"",WS_VISIBLE|WS_CHILD,0,0,0,0,parent,0);
C.SetWindowPos(.NULL,0,0,200,200,SWP_NOACTIVATE|SWP_NOZORDER);
C.Show(SW_SHOW);
C.UpdateWindow();其中,如果C以A为父窗口时(框架风格的程序),该窗口C,不能响应鼠标消息(MOVE等)
     如果C以B为父窗口时(对话框风格的程序),可以响应鼠标消息。请教这是为什么?另外,A、B窗口分别对鼠标移动事件(WM_MOUSEMOVE)进行处理,如下:CDC * hdc;
CRect    rc;


GetClientRect(&rc);
hdc = GetDC();
CBrush bsh(RGB(255,255,255));
hdc->FillRect(&rc,&bsh);
bsh.DeleteObject();
ReleaseDC(hdc);意思是在鼠标移动时把父窗口以白色填充,这个会看到窗口C也会被填充为白色。
于是,得出了如下结论:在父窗口以GetDC方式作图,会影响所有子窗口,这时,您必须亲自处理,让所有子窗口实现自画,来恢复界面。但后来又作了一个试验,创建窗口D,与SDI框架风格中视图为父窗口,在视图中响应鼠标移动消息,同样把视图填充为白色,根据上面的结论,D是肯定会被填充为白色的,但现在窗口B的父窗口是框架窗口A,也被填充为白色了。根据《Windows环境下32位汇编语言程序设计》7.1 GDI原理中所讲,HDC仅仅是一个环境,一个窗口再画图时,会把他下层(所遮挡的)所有窗口的HDC相交部分都覆盖(改写),但不知道这个适不适用用于子窗口。有关子窗口问题相关文档很少,具体消息是怎么响应的?是系统通过父窗口传递的,还是直接发送给子窗口的?一系列问题请教大家,请指点。还有,一般在父窗口上作图,他们是怎么通知子窗口的,是不是有标准流程?谢谢。