如何让对话框只显示一次

yangw79 2004-08-16 05:42:37
我写了个DLL程序 里面的导出函数

VOID SHOWDLG()
{
CDIALOG* YANG= NEW CDIALOG;
YANG ->CREATE(id);
YANG->SHOWwindow(SW_SHOW);
}

我在主程序如下调用

LOADLIBRARY()
GETPROADRRESS;
。。。


现在的问题是我每次调用就会出现一个对话框
我想在调用前做个判断如果已经出现了DLL里面的对话框就让EXE程序不调用并让DLL的对话框出现在最前面(就是激活)

如果没调用就调用这个DLL

但我不希望让这个DLL里面的对话框以模态出现
...全文
146 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2004-08-16
  • 打赏
  • 举报
回复
同意 lixiaosan(小三),一个好办法,(呵呵,我怎么想不到呢 :P)
两种途径。
BringWindowToTop(Handle);
SetWindowPos函数,指定窗口的 最顶风格,用WS_EX_TOPMOST扩展窗口的风格

//设置顶层窗口
  SetWindowPos( Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE||SWP_NOSIZE);

//取消顶层窗口
  SetWindowPos( Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE||SWP_NOSIZE);
Gozhhu 2004-08-16
  • 打赏
  • 举报
回复
MoveWindow(.....,TOPMOST)
yangw79 2004-08-16
  • 打赏
  • 举报
回复
那我如何让已经存在的对话框到最前面(可能它现在是没有激活的状态)
biliangxia 2004-08-16
  • 打赏
  • 举报
回复
YANG 作为全局变量;
这样只有YANG为NULL 时
才调用
YANG= NEW CDIALOG;
YANG ->CREATE(id);
YANG->SHOWwindow(SW_SHOW);
lixiaosan 2004-08-16
  • 打赏
  • 举报
回复
创建互斥量
对话框CXXapp中
HANDLE mMutex = CreateMutex(NULL, FALSE, "XXX");
if (mMutex == NULL)
{
// Failure
AfxMessageBox("Initialize failed!");
return FALSE;
}
else if (GetLastError() == ERROR_ALREADY_EXISTS)
{
AfxMessageBox("The program already exist!");
return FALSE;
}
DentistryDoctor 2004-08-16
  • 打赏
  • 举报
回复
用Singleton模式,或简单的为对话框类加一静态变量(BOOL),通过它来控制对话框的创建。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧