资源分配、释放表
| 资源 | 分配函数 | 清除函数 | 需要手动清除 |
| 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# |
| 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 |
|
| Load Resource | 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(系统内定资源)
变量分配时会有两种情况,一个是在栈中分配,一个是在堆中分配。
在栈中分配的变量不用delete的,函数结束后自动释放;
在堆分配,也就是用malloc或new等分配的内存,要自己调用相应的free和delete释放。
DeleteObject( )这个函数经常会遇到,比如CPen 的DeleteObject,CDC的DeleteObject,CBitmap的DeleteObject。
这个DeleteObject函数是用来清除CBitmap ,CPen,CDC中选入的对象的。比如CBitmap用LoadBitmap载入的位图。CPen用CreatePen建出来的笔。
只有在DeleteObject清除这些对象中的对象数据之后才能选入其他的东西。只有DeleteOBject之后CBitmap对象才能调用LoadBitmap第二次载入位图,CPen对象才能第二次创建新画笔。
当CDC不使用选入的对象时,都要用SelectObject选入旧的对象,这样刚才使用的那些对象都自由,这样就可以被释放了。
Delete CBitmap对象,Delete CPen对象才能把对象删除。

浙公网安备 33010602011771号