2010-07-20 5 views
3

C++, MFC으로 작성된 기존 시스템이 있습니다. LoadBitmap()이 (가) LoadImage() API로 바뀌 었음을 확인했습니다. 코드에 기록 된 주석은 "LoadBitmap()은 커널 메모리의 Paged 풀을 사용하고 최대 사용량에 도달하면 페인트 문제가 나타납니다. 따라서 LoadImage API를 사용해야합니다"라고되어 있습니다.LoadBitMap() API가 페인트 문제를 생성합니까?

나는 이것을 조금 봤지만 많은 정보를 얻지 못했습니다. 나는 MSDN을 선택하면, 그들은 "OEM 비트 맵을로드 할 LoadBitmap의 사용은 사용되지 않으며 이전 버전과의 호환성 지원되는 주"라고

내 질문은 : LoadBitmap() API에 문제가 1.이 있습니까? LoadBitmap() 이상으로 LoadImage()을 선호하는 이유는 무엇입니까? 2. OEM bitmaps은 무엇입니까? LoadBitmap으로 정상 BMP를로드하면 문제가 있습니까?

답변

3

LoadBitmap()은 장치 독립적 비트 맵 (DIB)이 아닌 디스플레이 호환 비트 맵 만 작성합니다. 그리고 LoadBitmap() documentation 자체가 말하듯이 상단에서 "이 기능은 LoadImage 기능으로 대체되었습니다." LoadBitmap()이 여전히 주위에 있다는 것은 놀랍습니다. 왜냐하면 Windows 95 이후 LoadImage()가 대체되었습니다. ! (그냥은 이전 버전과의 호환성을 드롭하는 것이 얼마나 어려운 보여 간다!)

OEM 비트 맵 OBM_BTNCORNERS, OBM_CHECKBOXES처럼 (A NULL HINSTANCE 매개 변수와 마법의 lpBitmapName를 전달하여 요청할 수 있습니다 시스템 전체의 미리 정의 된 이미지입니다 , 등). 이 을 사용하여 UI에서 다양한 부분을 그릴 때 Windows에서 사용하지만 이제는 DrawFrameControl()으로 처리됩니다. 다시 말하지만, OEM 비트 맵은 오래되고 낡은 것이고 "새로운"동작은 오랫동안 사용되어 왔습니다.

LoadBitmap()을 사용해야 할 강력한 이유가 없다면 문서화 된 제안에 따라 LoadImage()를 사용합니다.)

새로운 코드에서
LoadImage(hInstance, lpBitmapName, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); 

당신이 실제로 당신이 은 LoadImage를 (사용이있는 경우, 장치 독립적 인 비트 맵을 원하는 아마 것, 마지막 인수가 : - LoadBitmap()를 얻으려면 해당 동작을 사용 "LR_CREATEDIBSECTION"이어야합니다. 기존 코드를 사용하는 경우 "LR_DEFAULTCOLOR"를 사용하는 것이 더 안전 할 수 있습니다.