GetDC和BeginPaint

BeginPaint

通常使用的方式:获取--->操作----->结束

case WM_PAINT:
	// Draw some text centered in the client area of the main window
	hDC = BeginPaint(hWindow, &ps);
	GetClientRect(hWindow, &rect);
	DrawText(hDC, TEXT("This is a skeleton application!"), -1, &rect,
	DT_SINGLELINE | DT_CENTER | DT_VCENTER);
	EndPaint(hWindow, &ps);
	return 0;

GetDC

通常使用的方式:获取--->操作----->释放

case WM_PAINT:
	// Draw some text centered in the client area of the main window
	hDC=GetDC(hWindow);
	TextOut(hDC,0,0,"This is a skeleton application!",strlen("This is a skeleton application!"));
	ReleaseDC(hWindow,hDC);
	return 0;

差别

两者有什么差别呢?打开windows任务管理器,查看cpu使用率,两者最直观的差别立刻呈现眼前,也就是说在在画图时,使用GetDC十分的浪费资源,原因在于:

BeginPaint() 和EndPaint() 可以删除消息队列中的WM_PAINT消息,并使无效区域有效。 

GetDC()和ReleaseDC()并不删除也不能使无效区域有效,因此当程序跳出 WM_PAINT 时 ,无效区域仍然存在。系统就回不断发送WM_PAINT消息,于是程序不断处理WM_PAINT消息。

BeginPaint、EndPaint会告诉GDI内部,这个窗口需要重画的地方已经重画了,这样WM_PAINT处理完返回给系统后,系统不会再重发WM_PAINT,

GetDC没有告诉系统这个窗口需要重画的地方已经画过,在你把程序返回给系统后,系统一直以为通知你的重画命令你还没有乖乖的执行或者执行出错,所以在消息空闲时,它还会不断地发WM_PAINT催促你画,导致程序卡死。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值