解决:中泰板卡在电脑关闭时候会程序崩溃的问题+MFC响应电脑关机指令

目录

一、目的

1、想:解决中泰板卡在电脑关闭时候会程序崩溃的问题(20200802)

二、参考

1、MFC Windowproc函数(20200802)

2、MFC中OnClose和OnDestroy的调用(20200802)

3、::PostQuitMessage(0) MFC中这个函数什么用途(20200802)

三、操作一

1、CFLYDlg.h头文件:声明函数:

2、CFLYDlg.cpp源程序:定义函数


一、目的

1、想:解决中泰板卡在电脑关闭时候会程序崩溃的问题(20200802)

 

二、参考

1、MFC Windowproc函数(20200802)

https://blog.csdn.net/whh_1218/article/details/8467855

原文:

MSDN:

The WindowProc function is an application-defined function that processes messages sent to a window. TheWNDPROC type defines a pointer to this callback function.WindowProc is a placeholder for the application-defined function name.

WindowProc函数是一个应用程序定义的函数处理消息的发送到一个窗口。指向的类型定义了一个指向这个回调函数。WindowProc是一个占位符为应用程序定义的函数名。

LRESULT CALLBACK WindowProc(      
    HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
);

参数:

hwnd:指向窗口的句柄。

uMsg:指定消息类型。

wParam:指定其余的、消息特定的信息。该参数的内容与UMsg参数值有关。

IParam:指定其余的、消息特定的信息。该参数的内容与uMsg参数值有关。

返回值:返回值就是消息处理结果,它与发送的消息有关。

 

通过重写这个函数,我们可以自定义窗口消息响应,做出相应的处理。

LRESULT CToolTipDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	switch(message)
	{
	case WM_COMMAND:
		{
			AfxMessageBox("1");
			if(wParam == SC_CLOSE)
			{
				afxMessageBox("Close");
				AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
				
				return 0;
			}
		}
		break;
	}
	return CDialog::WindowProc(message, wParam, lParam);
}

实例中做出了对 WM_COMMAND消息的响应处理

 

2、MFC中OnClose和OnDestroy的调用(20200802)

https://blog.csdn.net/u014350471/article/details/38437287

原文:

OnClose和OnDestroy:

OnClose():消息响应函数,响应WM_CLOSE消息,当"关闭"按钮被单击的时候(而不是我们眼睛所见的对话框从屏幕上消失时),该函数被调用。

OnDestroy():消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送。

在单视图程序中,程序退出时执行的操作顺序为:
(1)用户点击退出按钮,发送了WM_CLOSE消息;
(2)在WM_CLOSE消息的处理函数中,调用DestroyWindow();
(3)在DestroyWindow()中发送了WM_DESTROY消息;
(4)在WM_DESTROY消息中调用PostQuitMessage(),发送WM_QUIT消息,结束消息循环。

 

综上,程序先调用OnClose()(也可能不调用),然后调用OnDestroy()(必调用),所以,如果要进行程序结束时的清理工作,应该在OnDestroy()中,而不是在OnClose(),否则就有可能会出现内存泄漏的危险了!

 

 

3、::PostQuitMessage(0) MFC中这个函数什么用途(20200802)

https://wenwen.sogou.com/z/q88776951.htm

原文:

函数功能:该函数向系统表明有个线程有终止请求。通常用来响应WM_DESTROY消息。

    函数原型:VOID PostQuitMessage(int nExitCode);

    参数:

    pExitCode:指定应用程序退出代码。此值被用作消息WM_QUIT的wParam参数。

    返回值:无。

    备注:PostQuitMessage寄送一个WM_oUT消息给线程的消息队列并立即返回;此函数向系统表明有个线程请求在随后的某一时间终止。

    当线程从消息队列里取得WM_QUIT消息时,应当退出消息循环并将控制返回给系统。返回给系统的退出值必须是消息WM_QUIT的wParam参数。

    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;输入库:user32,lib:Uhicode:在Wihdows NT环境下以Unicode和ANSI方式实现。

 

三、操作一

1、CFLYDlg.h头文件:声明函数:

virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  • 总结:发现找不到添加这个函数的方法 ,所以自己手动添加。

 

2、CFLYDlg.cpp源程序:定义函数

LRESULT CFLYDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	// TODO: 在此添加专用代码和/或调用基类
	switch (message)
	{
	case WM_QUERYENDSESSION:
	case WM_ENDSESSION:
	{
		//ShutdownBlockReasonCreate(m_hWnd, L"");
		//卸载ZT840板卡
		ZT8408_CloseDevice(g_cardNO);
		//ShutdownBlockReasonDestroy(m_hWnd);
		PostQuitMessage(0);
		break;
	}
	case WM_DESTROY:
	{
		PostQuitMessage(0);
		break;
	}
	}

	return CDialogEx::WindowProc(message, wParam, lParam);
}
  • 总结:因为中泰板卡和阿尔泰板卡不一样,程序运行时候,直接关机会报错,所以需要让程序获得计算机估计指令,然后关闭板卡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值