MFC 如何判别非模态对话框已创建 ,如何防止生成同样的对话框?
5个回答
展开全部
全局变量 CXXDlg *g_pdlg
初始赋值为null,如果对话框打开给g_pdlg赋值,在打开对话框之前判断g_pdlg是否为null就行了,不为null就不再打开,关闭对话框的时候给g_pdlg赋值为空
初始赋值为null,如果对话框打开给g_pdlg赋值,在打开对话框之前判断g_pdlg是否为null就行了,不为null就不再打开,关闭对话框的时候给g_pdlg赋值为空
更多追问追答
追问
我定义了一个Bool g_pdlg; CMyDlg* myWnd ;
利用判断:if(!g_pdlg){myWnd=new CMyDlg; myWnd->Create(); myWnd->ShowWindow(SW_SHOW); g_pdlg = ture;}
else{if(myWnd!=Null ){myWnd->Destroywindow(); delete myWnd; myWnd=Null; g_pdlg=False;}
}
还是有问题,连续点击两次按钮,还是出现两个对话框。
你说的g_pdlg 怎么赋值?赋什么值
追答
你这里别用g_pdlg了,你定义了CMyDlg* myWnd 已经有一个非模态对话框的指针了,你就判断这个指针是否为空就是了,myWnd给它赋个初值null
展开全部
; cpp/h/资源文件都定义好了。
CDlg* pOneDlgObj = new CDlg;
if ( pOneDlgObj)
{
BOOL ret = pOneDlgObj->Create(IDD_MYDIALOG,this);
}
pOneDlgObj->ShowWindow(SW_SHOW);
这样就行了,IDD_MYDIALOG为你的对话框资源ID;
CDlg* pOneDlgObj = new CDlg;
if ( pOneDlgObj)
{
BOOL ret = pOneDlgObj->Create(IDD_MYDIALOG,this);
}
pOneDlgObj->ShowWindow(SW_SHOW);
这样就行了,IDD_MYDIALOG为你的对话框资源ID;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只允许一个对话框对象对吧?典型的Singleton模式嘛,看下这个文章就明白了:http://www.pconline.com.cn/pcedu/empolder/gj/c/0407/421424.html
更多追问追答
追问
我是利用控件生成一个非模态对话框,但是当再次点击时又生成一个,。我要的结果是当再次点击时还原为上次已经出现的那个对话框,有实例吗?
追答
你的问题太含糊了,没法回答。至少给出伪代码说清楚有哪些接口哪些步骤,别人才能告诉你怎么做啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你把对话框定义成类的成员变量,创建对话框然后显示隐藏就可以了,每次都是同一个。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Mutex吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询