MFC-对话框界面卡死

MFC-对话框界面卡死

问题:软件操作一会就会卡死,有时切换到桌面再切换回程序也卡死。

刚开始以为是主线程被阻塞,但感觉又不像。界面灰色,但是按钮对应的事件仍响应。看到网上有人说GDI对象泄漏也可能导致界面卡死。

程序有GDI对象泄漏,导致界面卡死。

对于这种情况。通过任务管理器的GDI数据可以发现问题。

(1)Win7系统下首先任务管理器的【查看】->【选择列】出现如下的界面,选择GDI对象。这样在任务管理器中就可以看到进程的GDI对象数目了。如果GDI对象数达到千数量级,那么很有可能是这个原因。

(2)Win10系统

任务管理器的【详细信息】空白位置右击,选择【选择列】,然后勾选【GDI】对象

运行程序,果然GDI对象增长比较快,在GDI对象数量为10000的时候不在增长,界面卡死。

百度了下:有人说GDI对象的最大值默认为10000,这下确认的问题的根源。

注释掉程序中的构造和初始化程序,运行程序依然存在GDI泄露的情况。

最后想只有消息的问题了,进入代码:

BOOL CSPICalibrationDlg::PreTranslateMessage(MSG* pMsg)

{

// TODO: 在此添加专用代码和/或调用基类

if (pMsg->message == WM_MBUTTONDBLCLK)

{

POINT ptTmp;

GetCursorPos(&ptTmp);//获取鼠标位置

CRect Rect;

CRect rcPIC;

CWnd* pPICWnd = GetDlgItem(IDC_STATIC_RESIMG);

CDC *pDCPIC = pPICWnd->GetDC();

memset(Rect, 0, sizeof(CRect));

pPICWnd->ClientToScreen(Rect);

}

发现 CDC *pDCPIC = pPICWnd->GetDC();

CDC的指针没有被释放。

猜你喜欢 💖

手机屏幕锁定设置在哪?详细步骤一看就会!
beat365官方网址

手机屏幕锁定设置在哪?详细步骤一看就会!

📅 08-02 👁️ 3390
一篇搞懂客服系统:选型、功能和推荐
365bet网上足球比赛

一篇搞懂客服系统:选型、功能和推荐

📅 09-24 👁️ 4013
qq空间我的分享在哪里?qq空间动态设置在哪?
beat365官方网址

qq空间我的分享在哪里?qq空间动态设置在哪?

📅 07-23 👁️ 2992