现在有两个程序,暂且分别称做:主程序,和向导程序我现在在一个程序中点击按钮, 打开一个向导程序,在向导程序的App文件中 我添加如下代码:
/** 不显示原始对话框*/
// CFileCreatorDlg dlg;
// int nResponse = dlg.DoModal();
所以程序一启动就进入了向导的第一个page而且我想点击主程序按钮的时候,只产生一个向导程序, 如果当前已经有一个向导程序再运行,则使他保持在最前端 g_mutex = CreateMutex(NULL, TRUE, "FileCreator");
DWORD dwLastError = GetLastError();
if(g_mutex && dwLastError == ERROR_ALREADY_EXISTS)
{
HWND hWnd = FindWindow(NULL, "设置数据库-step1");
if(hWnd)
{
SetForegroundWindow(hWnd);
}
return FALSE;
}
其中“设置数据库-step1” 是我向导的第一个page的标题问题就在SetForegroundWindow(hWnd);他需要的参数是要被前端显示的窗口句柄,
所以, HWND hWnd = FindWindow(NULL, "设置数据库-step1");所以这个函数就不行了, 我总不能一个page一个page的找吧请问有什么好的方法??
/** 不显示原始对话框*/
// CFileCreatorDlg dlg;
// int nResponse = dlg.DoModal();
所以程序一启动就进入了向导的第一个page而且我想点击主程序按钮的时候,只产生一个向导程序, 如果当前已经有一个向导程序再运行,则使他保持在最前端 g_mutex = CreateMutex(NULL, TRUE, "FileCreator");
DWORD dwLastError = GetLastError();
if(g_mutex && dwLastError == ERROR_ALREADY_EXISTS)
{
HWND hWnd = FindWindow(NULL, "设置数据库-step1");
if(hWnd)
{
SetForegroundWindow(hWnd);
}
return FALSE;
}
其中“设置数据库-step1” 是我向导的第一个page的标题问题就在SetForegroundWindow(hWnd);他需要的参数是要被前端显示的窗口句柄,
所以, HWND hWnd = FindWindow(NULL, "设置数据库-step1");所以这个函数就不行了, 我总不能一个page一个page的找吧请问有什么好的方法??
解决方案 »
- 获取进程路径的问题
- 初学者问,怎样做出像VS那样,窗口分成了很多个区域的东西?
- 关于套接字connect不成功的处理问题(超时设定不能成功)?希望大家帮帮忙
- 一个MDI的view怎么才能让它不能被切换或者关闭呢?
- 怎么创建CSocket对象老出错呢?
- 请教一个关于CComboBox控件类型由dropdown改变为dropdownlist的问题!谢谢!急!
- 一个关于richedit控件的怪问题,但请高手前辈指教!(请进)
- MFC中怎样找到加入project 的文件?
- 关于框架的客户区与View的关系
- alphagx 老兄,大恩不言谢,既然这样你好人作到底,再帮我一次吧!我想用图片代替滚动条,帮帮我吧!
- 求vc中对word中柱形图数据改变
- WML格式的文件或内容可以用XML的方式解析吗?
{
// 将共享内存映射到当前进程
LPVOID pAddr = MapViewOfFile(g_hFileMapping, FILE_MAP_WRITE, 0, 0, sizeof(HWND));
if(pAddr)
{
// 将当前主窗口句柄写入共享内存
*(HWND*)pAddr = this->m_hWnd;
// 撤销内存映射
UnmapViewOfFile(pAddr);
}
}
g_hFileMapping是定义在App文件的全局变量。
然后在,App文件的InitInstance函数中
// 创建共享内存
g_hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(HWND),
"FileCreator{60869E30-4223-4e45-90CD-2F7FF0EDFBD8}");
// 实例已经存在
if(g_hFileMapping != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
{
// 将共享内存映射到当前进程
LPVOID pAddr = MapViewOfFile(g_hFileMapping, FILE_MAP_READ, 0, 0, sizeof(HWND));
if(pAddr)
{
// 读取共享内存中的窗口句柄
HWND hWnd = *(HWND*)pAddr;
if(hWnd && IsWindow(hWnd))
{
// 将已经存在的窗口实例放置到前台
SetForegroundWindow(hWnd);
}
// 释放共享内存映射
UnmapViewOfFile(pAddr);
}
return FALSE;
}