이 함수는 일정개수 이상, 일정사이즈 이상의 메모리를 사용할 경우 FALSE를 리턴하는 경우가 있습니다.
이에 대한 다른방법입니다.
MFC 버전
HBITMAP MakeDIBSection(CDC& dc, int width, int height)
{
BITMAPINFO bmi;
LPVOID pBits;
HBITMAP hBitmap;
memset(&bmi.bmiHeader, 0, sizeof(BITMAPINFOHEADER));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biWidth = width;
bmi.bmiHeader.biHeight = height;
bmi.bmiHeader.biPlanes = 1;
hBitmap = ::CreateDIBSection(dc.GetSafeHdc(), &bmi, DIB_RGB_COLORS, (void**)&pBits, NULL, 0);
return hBitmap;
}
Win32 Api 버전
HBITMAP MakeDIBSection(HDC dc, int width, int height)
{
BITMAPINFO bmi;
LPVOID pBits;
HBITMAP hBitmap;
memset(&bmi.bmiHeader, 0, sizeof(BITMAPINFOHEADER));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biWidth = width;
bmi.bmiHeader.biHeight = height;
bmi.bmiHeader.biPlanes = 1;
hBitmap = ::CreateDIBSection(dc, &bmi, DIB_RGB_COLORS, (void**)&pBits, NULL, 0);
return hBitmap;
}
예제)
CBitmap tmpBmp;
CDC *pDC = GetDC();
CDC srcDC;
srcDC.CreateCompatibleDC(pDC);
tmpBmp.m_hObject = MakeDIBSection(srcDC, cx, cy);//or
ReleaseDC(pDC);
'프로그래밍 팁 > etc' 카테고리의 다른 글
체크박스 WM_CTLCOLOR 사용 방법 (0) | 2013.05.31 |
---|---|
MessageBoxTimeout API(문서화 되지않은 기능) (1) | 2012.02.01 |
다이얼로그 구멍내기 (0) | 2011.11.25 |
비스타에서 권한무시 메세지 전송방법 (0) | 2011.10.12 |
[드래그 & 드롭]어플 -> 바탕화면 (0) | 2011.10.11 |