MFC单文档绘图(四)——进度条、禁止程序多开

4 篇文章 0 订阅

1. 禁止程序多开

常用程序退出方式:

(1)PostQuitMessage(0);//最常用
(2)PostMessage(WM_QUIT,0,0);//最常用
(3)::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CLOSE,0,0);//最常用

 ::PostMessage(AfxGetMainWnd()->m_hWnd,WM_CLOSE,0,0);//最常用
(4)ExitProcess(0);//注意使用时先释放分配的内存,以免造成内存泄露
(5)exit(0) ;//正常终止程序; exit(非0)非正常终止程序
(6)向主窗口发送WM_CLOSE消息SendMessage(WM_CLOSE); 
(7)如果要在其它类关闭应用程序,则AfxGetMainWnd->SendMessage(WM_CLOSE);

       而2,3,6,7均为程序已经启动时退出程序,4,5直接退出进程,需要释放相关内存分配,否则会造成不必要的内存泄露等问题,而1是先启动然后再退出。但是对于MFC程序都需要初始化,而单文档中有MainFrame,Doc,View和App等的初始化,经过调试发现最初调用的是App类,所以在App中进行判断是否打开和退出处理。

       最先想到的是在构造函数中处理,尽可能早的判断,但是需要手动去处理内存问题,通过查Windows下return,exit和ExitProcess的区别和分析发现没必要去处理内存问题,直接交给MFC自己去处理,也就是尽可能使用return,而App类的初始化InitInstance()就通过返回的值来进行对应的处理,TRUE则会进行进一步的初始化(MainFrame,Doc,View),FALSE则系统会对建立的全局或局部变量自动进行析构调用和程序退出处理。

避免程序多开:

    避免程序多开可以通过建立互斥量的方式,当再次打开时会建立相同的互斥量而发生错误,从而通过获取错误退出进行相关退出处理。

<span style="font-size:14px;"><span style="white-space:pre">	</span>// 避免重复打开
	HANDLE hMutex = CreateMutex(NULL, FALSE, "CAD_Aplication"); //创建互斥体
	if(GetLastError() == ERROR_ALREADY_EXISTS)
	{
		// 如果已有互斥量存在则释放句柄并复位互斥量
		CloseHandle(hMutex);
		hMutex = NULL;
		AfxMessageBox("程序已经启动!");
		// 程序退出
		//exit(0);
		//ExitProcess(0);
		//PostQuitMessage(0);//会启动然后再关闭
		return FALSE;
	}</span>


2. 进度条实现

……

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值