sev*_*axx 6 c++ windows mfc gdi device-context
也许这是一个愚蠢的问题,我不明白为什么我不能在以下代码中创建DC:
HBITMAP COcrDlg::LoadClippedBitmap(LPCTSTR pathName,UINT maxWidth,UINT maxHeight)
{
HBITMAP hBmp = (HBITMAP)::LoadImage(NULL, pathName, IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if (!hBmp)
return NULL;
HDC hdc = (HDC)GetDC();
HDC hdcMem = CreateCompatibleDC(hdc);
if (!hdcMem)
{
DWORD err = GetLastError();
}
...
...
...
Run Code Online (Sandbox Code Playgroud)
位图hBmp加载正常,hdc具有有效值.但是对CreateCompatibleDC()的调用返回一个NULL指针.然后,GetLastError()返回0!有谁能猜出这里发生了什么,拜托?
PS:在此之前没有调用内存分配或GDI例程...所以我认为应该排除内存泄漏.
你不正确地将结果投射GetDC()到了HDC. GetDC()返回指向CDC对象的指针.
要做你想做的事,你可以做以下任何一种.第一个选择更适合MFC喜欢做的事情,但两者都很好用:
CDC *pDC = GetDC();
// Option 1
CDC memDC;
memDC.CreateCompatibleDC(pDC);
// Option 2
HDC hMemDC = CreateCompatibleDC((HDC)(*pDC));
Run Code Online (Sandbox Code Playgroud)
重要的是要注意,选项2与您当前做错的事情不同.所述CDC类具有operator HDC()允许其被转换为HDC构件,但是这并不适用于指针.你必须先取消引用它.
| 归档时间: |
|
| 查看次数: |
2295 次 |
| 最近记录: |