为什么不需要类型转化 h可以接受HBITMAP类型参数
HGDIOBJ SelectObject(HDC hdc,HGDIOBJ h)// 不需要类型转化 h可以接受HBITMAP类型参数
DeleteObject(HBM);//删除位图 //例子2对吗????例子1释放对吗???
HBITMAP hOldHdc=(HBITMAP)LoadImage(NULL,".//res//u.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
hOldBitmap = (HBITMAP)SelectObject(hdcmen,hOldHdc);
//BitBlt(hdc, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom, hdcmen,0,5, SRCCOPY);
::SelectObject(hdcmen, hOldBitmap);
::DeleteDC(hdcmen);
CDC MemDC;
HBITMAP HBM;//1、创建一个位图对象,下面进行初始化
HBM=(HBITMAP)LoadImage(NULL,L"C:\\test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
//载入位图
BITMAP bitmap;
GetObject(HBM,sizeof(bitmap),&bitmap);//获得位图信息
MemDC.CreateCompatibleDC(NULL); //2、创建兼容DC
SelectObject(MemDC,HBM);//3、选入位图至内存DC
DeleteObject(HBM);//删除位图
//将内存DC中的位图复制到客户区DC中
BitBlt(dc,0,0,bitmap.bmWidth,bitmap.bmHeight,MemDC,0,0,SRCCOPY);//4、显示位图
[最优解释]
1.可能会造成资源泄露,最好加deleteobject(hbitmap),原因见注.
2.可能Bitmap与PEN有些不同,可以直接删除,因为你一般不会再去在hdcmem上用bitmap改写什么,却可以用Pen划线之类,那么也是正确的.
注:
MSDN说Bitmap删除只有在LR_SHARED才是非法的,我认为相当于深度copy和浅层copy的关系.selectobject(hbitmap)是深度copy,所以我认为删除安全.
[其他解释]
都是HANDLE类型,typedef而已
MSDN Remarks
Do not delete a drawing object (pen or brush) while it is still selected into a DC.
[其他解释]
我原来也觉得这个怎么可以接受不同的参数
CBrush br(RGB(128,128,128));原来是一堆的重载函数。
CBrush*pbr = pDC->SelectObject(&br);
CPen pen(0,1,RGB(128,128,128));
CPen*ppen = pDC->SelectObject(&pen);
[其他解释]
第一个例子 释放资源对吗???
第二个例子 释放资源对吗????
[其他解释]
都不对
1.hdcmem不知从何而来,
An application must not delete a DC whose handle was obtained by calling the GetDC function. Instead, it must call the ReleaseDC function to free the DC.
2.
Do not delete a drawing object (pen or brush) while it is still selected into a DC.
[其他解释]
hdcmen 是HDC
狮哥有正确的例子吗????