MFC:CBitmapCreateCompatibleBitmap() 根据传递给它的两个兼容 CDC 给出不同的结果? [复制]
Posted
技术标签:
【中文标题】MFC:CBitmapCreateCompatibleBitmap() 根据传递给它的两个兼容 CDC 给出不同的结果? [复制]【英文标题】:MFC: CBitmapCreateCompatibleBitmap() gives different results based on two compatible CDC's passed to it? [duplicate] 【发布时间】:2020-08-29 01:06:40 【问题描述】:为什么将兼容 DC 和兼容 DC 所基于的 DC 传递给 CreateCompatibleBitmap()
会给出不同的结果?
这个创建一个单色位图:
CDC dcMem;
dcMem.CreateCompatibleDC(mydc);
destBitmap->CreateCompatibleBitmap(&dcMem, rect.Width(), rect.Height());
CBitmap* pBmpOld = dcMem.SelectObject (destBitmap);
// ... Draw on to the DC ....
dcMem.SelectObject (pBmpOld);
这个创建正确的颜色位图:
CDC dcMem;
dcMem.CreateCompatibleDC(mydc);
destBitmap->CreateCompatibleBitmap (mydc, rect.Width(), rect.Height());
CBitmap* pBmpOld = dcMem.SelectObject (destBitmap);
// ... Draw on to the DC ....
dcMem.SelectObject (pBmpOld);
TIA!!
【问题讨论】:
见CreateCompatibleBitmap下的备注。 我记得 20 年前 dxiv 指出的问题... 进行 win32/MFC 开发的提示:首先,比如说,您使用 API 调用 5-10 次,请阅读相应的 MSDN 文章从头到尾。看起来这会花费很多时间,而且确实会,但它会得到回报 - 几乎每个电话都有许多隐含的假设和上下文知识。但是文档是一流的,经常阅读并熟悉它是能够使用 API 的关键。 【参考方案1】:根据 cmets,请查看 CreateCompatibleBitmap
文档:
注意:创建内存设备上下文时,它最初会选择一个1×1单色位图。如果在
CreateCompatibleBitmap
中使用此内存设备上下文,则创建的位图是单色位图。要创建彩色位图,请使用用于创建内存设备上下文的 HDC,如以下代码所示...
【讨论】:
以上是关于MFC:CBitmapCreateCompatibleBitmap() 根据传递给它的两个兼容 CDC 给出不同的结果? [复制]的主要内容,如果未能解决你的问题,请参考以下文章