MDI 中如何激活已打开的窗口 多文档程序中如何激活已经打开的窗口呢?要激活的子窗口的title已得到,在网上搜索了一下用 FindWindowEx没得到子窗口的句柄,请高手门详细说下如何激活指定子窗口,不胜感激 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://community.csdn.net/Expert/topic/5565/5565768.xml 感谢支持,现在我发现不是我的子窗口没激活,而是发生了不可思意的事情。我在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,有高手进来解答下吗?写这么多,郁闷啊,各位看官见笑了。 下面的不知道是不是你想要的:////////////////////////////利用互斥对象保证只有一个程序窗口#pragma data_seg("MySec") //声明一个节,MySec处长度不能大于8,否则会自动截断为8HWND 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("第一次运行此程序"); } }*************************************} 你把“激活前一个、后一个窗口”的消息响应放到App或者Frame里,因为这是个全局的管理函数,放在Doc里不妥,具体当然得看你的代码,但是放在全局管理容易一些。另外,还得看你的视图中OnUpdate的代码。建议你好好看看我给你的链接。 感谢 Mackz(在相互) 果然如此,申明为全局变量后问题就解决了,学习。感谢大家捧场,散分。 HTTP协议奇怪现象,求大神解释 菜鸟求助:CJ60LIB 请问这样的网络服务该如何实现 经过微软签名过的CAB包为什么在有些机器上不能正常下载安装? 数据转换 <求助>扩展名为img的文件怎么打开啊??急 请问“LPBITMAPV5HEADER”结构是如何定义的? 怎样才能调试 dll_process_attach 关于MFC编译链接的问题 本人菜鸟有几个小小的弱智问题 没分了 不好意思 看我这2段代码 怎么优化下 自己感觉太垃圾了 子线程怎样向Dialog通信???
////////////////////////////利用互斥对象保证只有一个程序窗口
#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("第一次运行此程序");
}
}
*************************************
}
另外,还得看你的视图中OnUpdate的代码。
建议你好好看看我给你的链接。