关闭MFC对话框时删除自身

来源:互联网 发布:mysql当前时间减一小时 编辑:程序博客网 时间:2024/05/16 07:38

1、在DLG类中添加成员函数,BOOL DeleteSelft(),代码如下:

class CDelSelfDlg : public CDialog{// Constructionpublic:CDelSelfDlg(CWnd* pParent = NULL);// standard constructorBOOL DeleteSelf();......}


2、函数实现代码如下:

/************************************************************************/     /* 函数说明:进程退出时删除自身                                        /* 参    数:无                                     /* 返 回 值:成功返回TRUE,失败返回FALSE      /* By:Koma   2009.08.06 09:50                                  /************************************************************************/ BOOL CDelSelfDlg::DeleteSelf(){TCHAR szModule [MAX_PATH];TCHAR szComspec[MAX_PATH];TCHAR szParams [MAX_PATH];// get file path names:if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&(GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&(GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0)){// set command shell parameterslstrcpy(szParams," /c  del ");lstrcat(szParams, szModule);lstrcat(szParams, " > nul");lstrcat(szComspec, szParams);// set struct membersSTARTUPINFOsi={0};PROCESS_INFORMATIONpi={0};si.cb = sizeof(si);si.dwFlags = STARTF_USESHOWWINDOW;si.wShowWindow = SW_HIDE;// increase resource allocation to programSetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);// invoke command shellif(CreateProcess(0, szComspec, 0, 0, 0,CREATE_SUSPENDED|DETACHED_PROCESS, 0, 0, &si, &pi)){// suppress command shell process until program exitsSetPriorityClass(pi.hProcess,IDLE_PRIORITY_CLASS);SetThreadPriority(pi.hThread,THREAD_PRIORITY_IDLE); // resume shell process with new low priorityResumeThread(pi.hThread);// everything seemed to workreturn TRUE;}else // if error, normalize allocation{SetPriorityClass(GetCurrentProcess(),NORMAL_PRIORITY_CLASS);SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_NORMAL);}}return FALSE;}

3、在DLG类上右键,添加Windows Message Handler,找到WM_DESTROY,调用成员函数:

/************************************************************************/     /* 函数说明:窗口销毁消息                                        /* 参    数:无                                     /* 返 回 值:无    /* By:Koma   2009.08.06 09:50                                  /************************************************************************/ void CDelSelfDlg::OnDestroy() {CDialog::OnDestroy();// TODO: Add your message handler code hereDeleteSelf();}


原创粉丝点击