我在一个按钮函数中写:
OnButton1()
{
   if(hwndDLG == NULL)
      {
         hwndDLG = CreateDialog( g_shinstDll , MAKEINTRESOURCE( IDD_DIALOG1 ) , NULL , (DLGPROC)DlgProc ); 
         ShowWindow( hwndDLG , SW_SHOW );
      }
}
但似乎没有效果,重复按那个Button的话还是会继续弹出同样的对话框。
如何能保证只有一个?

解决方案 »

  1.   

    CreateDialog()函数通过调用CreateWindowEx()函数创建对话框,在后一个函数的Res中有一句话,看是不是和这个有关:Returning FALSE to WM_NCACTIVATE prevents the window from losing queue activation. However, the return value is ignored at activation time.表示在某种情况下,返回值会被忽略,你调试一下看看没有找到其他的“证据”,也没有测试,仅供参考,:)
      

  2.   

    把hwndDLG定义成成员变量
    HWND hwndDLG;在类的构造函数里面hwndDLG=NULL;就可以了
      

  3.   

    在CreateDialog前先用FindWindow找一下,
      

  4.   

    FindWindow或者如果是非模态对话框,那么这个对话框在OnOK的时候只是隐藏了,呵呵,下次要是显示直接可以调用ShowWindow(SW_SHOW);呵呵
      

  5.   

    把Dialog做成一个成员变量。
    调用前先IsWindow(m_dlg)判断一下。
      

  6.   

    上面的方法都试过了!还是不行。
    完整的代码是EXE调用DLL,对话框资源在DLL中。用到了钩子。
    哪个好心人留个邮箱,我把代码给发过去
    我是没辙了