帮我查查内存泄漏(应该是资源泄漏)

CBEMA CBEMA 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
void CExButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CDC*pDC;
pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
UINT state = lpDrawItemStruct->itemState;

CRect leftRect, rightRect,Rect,focusRect; //将控件分成两个区域,显示两种颜色
leftRect.CopyRect(&lpDrawItemStruct->rcItem);//将控件的区域复制给它
rightRect.CopyRect(&lpDrawItemStruct->rcItem);//将控件的区域复制给它
focusRect.CopyRect(&lpDrawItemStruct->rcItem);//将控件的区域复制给它
Rect.CopyRect(&lpDrawItemStruct->rcItem);//将控件的区域复制给它
leftRect.right = (leftRect.right+leftRect.left)/2;//重新设置控件的左区域的右侧位置
rightRect.left = leftRect.right;//重新设置控件的右区域的左侧位置
//设置虚线框
focusRect.left +=2;
focusRect.right -=2;
focusRect.top +=2;
focusRect.bottom -=2;

//按钮标题
TCHAR buffer[512];

GetWindowText(buffer,512);

//绘制按钮
DrawFilledRect(pDC, leftRect, GetBGColor_left());
DrawFilledRect(pDC, rightRect, GetBGColor_right());
DrawFrame(pDC,Rect);
//如果按纽处于选中状态则在其上绘制选中虚线框
if(state&ODS_FOCUS)
{
DrawFocusRect(lpDrawItemStruct->hDC,(LPRECT)&focusRect);
}
DrawButtonText(pDC,Rect,buffer);//绘制按钮上的文本

ReleaseDC(pDC);
}

void CExButton::DrawFilledRect(CDC *DC, CRect R, COLORREF color)
{

B.CreateSolidBrush(color);
DC->FillRect(R,&B);
B.DeleteObject();
}

COLORREF CExButton::GetBGColor_left()
{
return m_leftBG;
}

COLORREF CExButton::GetBGColor_right()
{
return m_rightBG;
}

void CExButton::DrawFrame(CDC *DC, CRect R)
{
int nLeft = R.left;
int nTop = R.top;
int nBottom = R.bottom;
int nRight = R.right-1;

pen.CreatePen(PS_SOLID,1,RGB(0,0,255));//创建黑色画笔
::SelectObject(DC->GetSafeHdc(),pen);//将画笔选入设备
DC->SetBkMode(TRANSPARENT);
//左边竖线
DC->MoveTo(nLeft,nTop);
DC->LineTo(nLeft,nTop);
DC->LineTo(nLeft,nBottom);
//右边竖线
DC->MoveTo(nRight,nTop);
DC->LineTo(nRight,nTop);
DC->LineTo(nRight,nBottom);
//上边横线
DC->MoveTo(nRight,nTop);
DC->LineTo(nRight,nTop);
DC->LineTo(nLeft,nTop);
//下边横线
DC->MoveTo(nRight,nBottom);
DC->LineTo(nRight,nBottom);
DC->LineTo(nLeft,nBottom);
pen.DeleteObject();
}

void CExButton::DrawButtonText(CDC *DC, CRect R, const TCHAR *Buf)
{
DC->SetBkMode(TRANSPARENT);
DC->DrawText(Buf,lstrlen(Buf),R,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
}

void CExButton::SetBGColor(COLORREF color_left, COLORREF color_Right)
{
m_rightBG = color_Right;
m_leftBG = color_left;
Invalidate();
}

void CExButton::PreSubclassWindow()
{
// Add BS_OWNERDRAW style
SetButtonStyle(GetButtonStyle() | BS_OWNERDRAW);
CButton::PreSubclassWindow();
} // End of PreSubclassWindow
...全文

相关推荐

C++内存泄漏检测原理+代码

C++内存泄漏检测原理的文档,包括代码,东东来自网络,我亲自整理,欢迎下载。

莫_问

详解SpringCloudGateway内存泄漏问题

主要介绍了详解SpringCloudGateway内存泄漏问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

weixin_38614484

如何排查Java内存泄漏?看完我给跪了!

没有经验的程序员经常认为Java的自动垃圾回收完全使他们免于担心内存管理。这是一个常见的误解:虽然垃圾收集器做得很好,但即使是最好的程序员也完全有可能成为严重破坏内存泄漏的牺牲品。让我解释一下。 当不必要地维护不再需要的对象引用时,会发生内存泄漏。这些泄漏很糟糕。首先,当程序消耗越来越多的资源时,它们会对计算机施加不必要的压力。更糟糕的是,检测这些泄漏可能很困难:静态分析通常很难精确识别这些冗余引用,现有的泄漏检测工具会跟踪和报告有关单个对象的细粒度信息,产生难以解释且缺乏精确度的结果。 换句话说,泄漏要么太难以识别,要么使用太过具体而无用术语来识别。 实际上有四类内存问题具有相似和重叠的特征

weixin_38713717

总结python 三种常见的内存泄漏场景

概要 不要以为 Python 有自动垃圾回收就不会内存泄漏,本着它有“垃圾回收”我有“垃圾代码”的精神,现在总结一下三种常见的内存泄漏场景。 无穷大导致内存泄漏 如果把内存泄漏定义成只申请不释放,那么借着 Python 中整数可以无穷大的这个特点,我们一行代码就可以完成内存泄漏了。 i = 1024 ** 1024 ** 1024 循环引用导致内存泄漏 引用记数器 是 Python 垃圾回收机制的基础,如果一个对象的引用数量不为 0 那么是不会被垃圾回收的,我们可以通过 sys.getrefcount 来得到给定对象的引用数量。 In [1]: import sys

weixin_38674415

几个内存泄漏的例子

几个内存泄漏的例子  new和delete要成对使用  new和delete要匹配 经常看到一些C++方面的书籍中这样提及到内存泄漏问题,这样的说法的意思是比较明白,但对于初学C++程序员还是很难掌握,所以下面举几个反面的例子,希望对大家有帮助。

lih2004
评论 4
收藏 已收藏
分享
返回顶部
CBEMA
界面 15,976 成员 115,866 内容