多文档程序中如何激活已经打开的窗口呢?要激活的子窗口的title已得到,在网上搜索了一下用 FindWindowEx没得到子窗口的句柄,请高手门详细说下如何激活指定子窗口,不胜感激

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/5565/5565768.xml
      

  2.   

    感谢支持,现在我发现不是我的子窗口没激活,而是发生了不可思意的事情。我在DOC里响应了工具栏上按钮事件,由此来激活前一个后一个窗口,每个窗口上都是打开的图片。我把当前打开的所有图片的路径都存在一个数组里,然后用一个int 变量(conut)来指示当前激活的窗口上的图片的数组下标(这么长,终于把情景都叙述完了,下面该问题了)。在程序的结尾处我用 UpdateAllViews(NULL,WM_USER_NEWIMAGE);  刷新了所有的视图,问题就在这里发生了,如果在程序结尾处加上这句之后那么刚才我激活的视图(假设newView吧)又被它之前的视图(假设为oldView吧)取代了,屏幕闪了一下,最终的结果还是我要激活的新窗口(newView)没有激活(实际是先激活又被取代了)没激活;还是老窗口。写到这里或许大家都说那你为什么不把这句注释了,不更新所有视图,且听我说下面如果注释的问题。如果把UpdateAllViews(NULL,WM_USER_NEWIMAGE); 这句注释掉,则我用来保存当前窗口的图片的数组下标的变量count就会出意想不到的问题,举个例子吧,假设现在count=2,就是激活了第三个图片窗口,点完工具按钮之后count++时的count应该=2,++后count=3这时应该激活激活第四个窗口,然而我调试到程序发现这时count=0(神啊,为什么啊?为什么count不是2呢?请相信我没有在其他地方给count赋值为0,而且这也是在程序运行中,不会再去初始化),所以这次就激活了第二个图片的窗口(其实我要激活第四个啊,:(),然后再这么往下点有时候count的值又对了,或许我再点的时候count又=4,正是我想要激活的第五个窗口了。我的问题是为什么在不UpdateAllViews(NULL,WM_USER_NEWIMAGE); 的情况下,Doc里的全局变量(count)有时候取值会是0呢?试了很多次了,只要值不对就是0,有高手进来解答下吗?写这么多,郁闷啊,各位看官见笑了。
      

  3.   

    下面的不知道是不是你想要的:
    ////////////////////////////利用互斥对象保证只有一个程序窗口
    #pragma data_seg("MySec")   //声明一个节,MySec处长度不能大于8,否则会自动截断为8
    HWND currentHwnd=NULL;      //必须初始化,才有可读可写权限,用于保证窗口只有一个句柄
    #pragma data_seg()          //表明节的结束
    #pragma comment(linker,"/section:MySec,RWS"); //设置为共享节,才能被其它进程访问
    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    HANDLE hMetux = CreateMutex(NULL,TRUE,"tickets");
    if(!(ERROR_ALREADY_EXISTS==GetLastError())){ //当互斥对象不存在,取得第一次的窗口句柄
    currentHwnd=this->m_hWnd;                //设置当前窗口句柄
    } if(hMetux){
    if(ERROR_ALREADY_EXISTS==GetLastError()){ //已经存在此互斥对象
    ::ShowWindow(currentHwnd,SW_SHOWNORMAL); //显示已经存在的窗口,成功
    return -1;
    }else{
    MessageBox("第一次运行此程序");
    }
    }
    *************************************
    }
      

  4.   

    你把“激活前一个、后一个窗口”的消息响应放到App或者Frame里,因为这是个全局的管理函数,放在Doc里不妥,具体当然得看你的代码,但是放在全局管理容易一些。
    另外,还得看你的视图中OnUpdate的代码。
    建议你好好看看我给你的链接。
      

  5.   

    感谢 Mackz(在相互)  果然如此,申明为全局变量后问题就解决了,学习。感谢大家捧场,散分。