CreateCompatibleBitmap返回NULL,GetLastError却返回0
来源:互联网 发布:中国如何注册io域名 编辑:程序博客网 时间:2024/05/01 08:45
memBM = CreateCompatibleBitmap(m_baseDC, bmp->width, bmp->height); if ( memBM == NULL ) { XExit(XEXIT_CODE_GDI, "CreateCompatibleBitmap(0x%x, %d, %d) fail: %d\n", m_baseDC, bmp->width, bmp->height, GetLastError()); }
今天发现了一个新问题,CreateCompatibleBitmap返回NULL,GetLastError却返回0。且用MessageBox弹出来的框中的字体也都变成黑体了,且窗口显示破碎。
原因:一开始以为是内存不足造成的,后来在任务管理器中看到此应用程序的GDI对象一列一直在上升,应用程序把GDI对象耗尽。
后来发现是因为没有把CreateRectRgn得到的HRGN释放掉造成的。
参考资料:VC资源分配、释放表
http://zf0026.blog.163.com/blog/static/17826211320119264324359/
======================================================================
Accelerators LoadAccelerators N/A No
Atoms GlobalAddAtom GlobalFreeAtom Yes
Bitmaps CreateBitmap DeleteObject Yes *
CreateBitmapIndirect DeleteObject Yes *
CreateCompatibleBitmap DeleteObject Yes *
CreateDIBitmap DeleteObject Yes *
CreateDiscardableBitmap DeleteObject Yes *
LoadBitmap DeleteObject Yes Brushes CreateBrushIndirect DeleteObject Yes
CreateDIBPatternBrush DeleteObject Yes
CreateHatchBrush DeleteObject Yes
CreatePatternBrush DeleteObject Yes
CreateSolidBrush DeleteObject Yes
Carets CreateCaret DestroyCaret No #
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
Clipboard OpenClipboard CloseClipboard Yes
Comms Ports OpenComm CloseComm Yes
Cursor CreateCursor DestroyCursor Yes
LoadCursor N/A No
DC CreateDC DeleteDC Yes
CreateCompatibleDC DeleteDC Yes @
GetDC ReleaseDC Yes
GetWindowDC ReleaseDC Yes
BeginPaint EndPaint Yes
DialogBox CreateDialog DestroyWindow No
CreateDialogIndirect DestroyWindow No
CreateDialogIndirectParam DestroyWindow No
CreateDialogParam DestroyWindow No
File OpenFile _lclose No
Fonts CreateFont DeleteObject Yes
CreateFontIndirect DeleteObject Yes
AddFontResource RemoveFontResource Yes
GDIStockObj GetStockObject N/A No &
Hook SetWindowsHook UnhookWindowsHook Yes
IC CreateIC DeleteDC Yes
Icon CreateIcon DestroyIcon Yes
LoadIcon N/A No
Library LoadLibrary FreeLibrary Yes
Memory AllocDStoCSAlias FreeSelector Yes
AllocSelector FreeSelector Yes
GlobalAlloc GlobalFree No
GlobalDOSAlloc GlobalDOSFr No
GlobalFix GlobalUnfix No
GlobalLock GlobalUnlock No
GlobalPageLock GlobalPageUnlock No
GlobalRealloc GlobalFree No
GlobalWire GlobalUnwire No
LocalAlloc LocalFree No
LocalLock LocalUnlock No
LocalRealloc LocalFree No
Menu CreateMenu DestroyMenu No %
CreatePopupMenu DestroyMenu No %
LoadMenu DestroyMenu No %
LoadMenuIndirect DestroyMenu No %
GetSystemMenu N/A No
MetaFile CreateMetaFile DeleteMetaFile Yes
Palette CreatePalette DeleteObject Yes
Pen CreatePen DeleteObject Yes
CreatePenIndirect DeleteObject Yes
Regions CreateEllipticRgn DeleteObject Yes
CreateEllipticRgnIndirect DeleteObject Yes
CreatePolygonRgn DeleteObject Yes
CreatePolyPolygonRgn DeleteObject Yes
CreateRectRgn DeleteObject Yes
CreateRectRgnIndirect DeleteObject Yes
CreateRoundRectRgn DeleteObject Yes
Resource AllocResource FreeResource No
FindResource N/A No
LoadResource FreeResource No
LockResource UnlockResource No
Sound OpenSound CloseSound Yes
String LoadString N/A No
Thunk MakeProcInstance FreeProcInstance No
Timer SetTimer KillTimer No
Window CreateWindow DestroyWindow No
CreateWindowEx DestroyWindow No
* 位图资源在释放的时候必须从选中它的DC中脱离。
% 当菜单失去焦点和窗口不再关联或者应用程序结束的时候占用资源必须被释放。
@ DC被释放前必须和它关联(选中)的位图取消联系
# 如果脱字符指定了位图,位图必须被释放
& 对DeleteObject的调用不会销毁常规的StockObject(系统内定资源)
- CreateCompatibleBitmap返回NULL,GetLastError却返回0
- CreateWindowEx返回句柄为0, GetLastError却返回0
- LoadLibrary返回NULL,GetLastError返回998
- GetLastError返回
- CreateCompatibleBitmap的GetLastError返回错误码8的原因及解决方案
- UpdateLayeredWindow()失败,GetLastError()返回0
- parentNode明明有却返回null
- getlasterror返回值大全
- GetLastError()返回值
- GetLastError返回值
- getlasterror返回值
- GetLastError()返回值列表
- GetLastError()返回值
- GetLastError返回值查询
- GetLastError返回代码含义
- GetLastError()返回参数
- GetLastError 返回值意义
- GetLastError的返回值
- 语音识别 Windows 语音识别编程
- Codeforces Round #181 (Div. 2) B. Coach
- UVa:10324 - Zeros and Ones
- rsync服务器与客户端配置文件
- 双端队列(dequeue)链表实现
- CreateCompatibleBitmap返回NULL,GetLastError却返回0
- 新人第一篇,JAVA中获取本地tomcat路径
- function template函数模版
- VC鼠标拖动动态画矩形框
- 徐子:坐保成业,“百战百胜”(1)
- ARP:地址解析协议
- 转:ubuntu 下code blocks 安装全过程 && codeblocks 快捷键 && 解决调试终端不能粘贴问题
- 使IP最后一个点后面变成*
- Hook :VC++消息钩子编程