怎么理解MFC 中的CDC 类,它的作用和意义是什么?

追_逐 2013-11-08 09:23:16
怎么理解MFC 中的CDC 类,它的作用和意义是什么?

CDC 跟画刷画笔有什么区别? 它可以画,但是好像跟画刷画笔有关系,前后者是否可以单独画图或者写字什么?
...全文
702 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
追_逐 2013-11-08
  • 打赏
  • 举报
回复
引用 5 楼 yaozhiyong110 的回复:
[quote=引用 4 楼 su_787910081 的回复:] [quote=引用 3 楼 yaozhiyong110 的回复:] HDC的封装类 可以理解成这是一个 “画家” 你可以给画家准备好笔、刷子、位图等等东西 画的时候只要 告诉画家画什么就行了 它会用你给的装备开始绘画...
给CDC 一个位图,我现在想要CDC给我画一个位图呢。保存到CBitmap 中这个怎么做呢? 用CBitmap::CreateCompatibleBitmap() 还是CBitmap::CreateDiscardableBitmap()?[/quote] 前一个应该就可以了 然后选进设备 然后画矩形椭圆什么的 刷的就是这个位图...[/quote] 上面的代码不对,下面这个是我新改的。
// 绘制默认图片
void CPictureButton::DefaultDraw()
{
	CRect rcPic;
	GetClientRect(&rcPic);

	CClientDC dc(this);
	CDC memDC;
	memDC.CreateCompatibleDC(&dc);
	//CBitmap m_bmpCurPic;
	HBITMAP hOldBmp = (HBITMAP)m_bmpCurPic.Detach();
	BOOL bCreate = m_bmpCurPic.CreateCompatibleBitmap(&memDC, rcPic.Width(), rcPic.Height());
	if (!bCreate)
	{
		m_bmpCurPic.Attach(hOldBmp);
		return ;
	}

	CBitmap* pOldBmp = memDC.SelectObject(&m_bmpCurPic);

	// 用黑画刷填充整个矩形框内容
	CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(BLACK_BRUSH));
	HGDIOBJ OldObj = memDC.SelectObject(pBrush);
	CRgn rgn;
	rgn.CreateRectRgnIndirect(rcPic);
	memDC.PaintRgn(&rgn);
}
追_逐 2013-11-08
  • 打赏
  • 举报
回复
引用 5 楼 yaozhiyong110 的回复:
[quote=引用 4 楼 su_787910081 的回复:] [quote=引用 3 楼 yaozhiyong110 的回复:] HDC的封装类 可以理解成这是一个 “画家” 你可以给画家准备好笔、刷子、位图等等东西 画的时候只要 告诉画家画什么就行了 它会用你给的装备开始绘画...
给CDC 一个位图,我现在想要CDC给我画一个位图呢。保存到CBitmap 中这个怎么做呢? 用CBitmap::CreateCompatibleBitmap() 还是CBitmap::CreateDiscardableBitmap()?[/quote] 前一个应该就可以了 然后选进设备 然后画矩形椭圆什么的 刷的就是这个位图...[/quote]
// 绘制默认图片
void CPictureButton::DefaultDraw()
{
	CRect rcPic;
	GetClientRect(&rcPic);

	CDC memDC;
	//CBitmap m_bmpCurPic;
	m_bmpCurPic.Detach();
	m_bmpCurPic.CreateCompatibleBitmap(&memDC, rcPic.Width(), rcPic.Height());
	CBitmap* pOldBmp = memDC.SelectObject(&m_bmpCurPic);

	CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(BLACK_BRUSH));
	HGDIOBJ OldObj = memDC.SelectObject(pBrush);
	CRgn rgn;
	rgn.CreateRectRgnIndirect(rcPic);
	memDC.PaintRgn(&rgn);
}
这段代码对不对啊?
yaozhiyong110 2013-11-08
  • 打赏
  • 举报
回复
引用 4 楼 su_787910081 的回复:
[quote=引用 3 楼 yaozhiyong110 的回复:] HDC的封装类 可以理解成这是一个 “画家” 你可以给画家准备好笔、刷子、位图等等东西 画的时候只要 告诉画家画什么就行了 它会用你给的装备开始绘画...
给CDC 一个位图,我现在想要CDC给我画一个位图呢。保存到CBitmap 中这个怎么做呢? 用CBitmap::CreateCompatibleBitmap() 还是CBitmap::CreateDiscardableBitmap()?[/quote] 前一个应该就可以了 然后选进设备 然后画矩形椭圆什么的 刷的就是这个位图...
追_逐 2013-11-08
  • 打赏
  • 举报
回复
引用 3 楼 yaozhiyong110 的回复:
HDC的封装类 可以理解成这是一个 “画家” 你可以给画家准备好笔、刷子、位图等等东西 画的时候只要 告诉画家画什么就行了 它会用你给的装备开始绘画...
给CDC 一个位图,我现在想要CDC给我画一个位图呢。保存到CBitmap 中这个怎么做呢? 用CBitmap::CreateCompatibleBitmap() 还是CBitmap::CreateDiscardableBitmap()?
yaozhiyong110 2013-11-08
  • 打赏
  • 举报
回复
HDC的封装类 可以理解成这是一个 “画家” 你可以给画家准备好笔、刷子、位图等等东西 画的时候只要 告诉画家画什么就行了 它会用你给的装备开始绘画...
shen_wei 2013-11-08
  • 打赏
  • 举报
回复
For specific uses, the Microsoft Foundation Class Library provides several classes derived from CDC . CPaintDC encapsulates calls to BeginPaint and EndPaint. CClientDC manages a display context associated with a window's client area. CWindowDC manages a display context associated with an entire window, including its frame and controls. CMetaFileDC associates a device context with a metafile.
worldy 2013-11-08
  • 打赏
  • 举报
回复
cdc相当于画布,你可以使用笔、刷、位图、字体等在画笔上画图,就这么简单

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧