在文档类中:(本程序只有一个文档模板)
void CMultiDoc::OnEditCopy() 
{
    CDocTemplate *pTemplate=GetDocTemplate();//获得文档模板对象    POSITION pos=pTemplate->GetFirstDocPosition();//获得所有的文档
    
    POSITION pos2;    CDocument *pDoc; while(pos){
pDoc=pTemplate->GetNextDoc(pos); pos2=pDoc->GetFirstViewPosition();//获得文档对应的视图                pDoc->GetNextView(pos2)->GetParentFrame()->SetFocus();
   
::Sleep(1000);
}
}
我创建了4个MDI子窗口,目的是轮流的让每个子窗口获得焦点,但是这样写达不到效果??????
我知道可以用MDINext(),但是用MDINext不好确定子窗口个数????

解决方案 »

  1.   

    我的另一篇帖子的问题跟这个差不多,请大家去看一下把
    http://topic.csdn.net/u/20081018/17/80c98725-0219-453b-9a5d-97484af8addd.html
      

  2.   

    因为Sleep是阻塞界面消息的。
      

  3.   

    对于楼主的问题  你不要看代码表面 要看消息机制 当你点击按钮的时候 还没有刷新你的窗口 却被你中途sleep掉了.这是对的 textout确实是输出到dc了 但是要刷新才能见到
      

  4.   

    用DC绘制界面不是立即执行,要等到线程取消息时才会执行,如果在Sleep前面加上:
    MSG msg;
    PeekMessage(&msg, 0, 0, 0, 0);
    就会立即显示了。
      

  5.   

    如果把SetFocus();换成MDIActive就可以了是不是MDI子窗口不能用Setfocus获得焦点;
      

  6.   

    多谢提醒,对,我把键盘焦点与活动窗口搞混了,SetFocus()是可以的.是我自己的问题能不能多问一下"键盘焦点与活动窗口" 有什么区别????
      

  7.   

    键盘焦点是窗口(包括控件)的一种特殊状态,系统将键盘消息发给此窗口,同一时间只有一个窗口具有键盘焦点。
    具有键盘焦点的窗口及其各级父窗口都是活动窗口,用SetActiveWindow获得的是顶级窗口(其父窗口是NULL),平时所说的活动窗口通常是指这个顶级窗口。
      

  8.   

    说错了,更正一下,SetActiveWindow获得的窗口是不具有WS_CHILD风格的窗口。
      

  9.   

    活动窗口的父窗口不一定是NULL。