MFC 프로그래밍 시 GUI를 만들기 위해서 CBitmapButton으로 버튼에 이미지를 씌우는 작업을 한다.


m_btnXXXX.LoadBitmaps(IDB_비트맵ID);

m_btnXXXX.SizeToContent();


문제는 SizeToContent() 함수를 사용했을 때 버튼의 크기가 무조건 비트맵 이미지 

크기와 같게 수정된다는 점이다. 

또, SizeToContent() 함수를 사용하지 않을 때에는 비트맵 이미지 크기가 버튼보다 클 

경우 비트맵의 좌측상단 기준으로 일부분만 나오게 된다.


이를 해결 하기 위해 CBitmapButton을 상속하는 새로운 비트맵 버튼 클래스를 만들고,

일부 함수를 오버라이드 하여 수정한다.


새로운 클래스명은 심플하게 CMyBitmapButton 으로 정하며, 각 h, cpp 파일의 이름은

MyBitmapButton.h, MyBitmapButton.cpp로 한다.


CMyBitmapButton 클래스는 CBitmapButton 클래스를 상속한다.

CBitmapButton 클래스 중 BOOL AutoLoad(UINT nID, CWnd* pParent) 함수와

void DrawItem(LPDRAWITEMSTRUCT lpDIS); 함수를 오버라이드 한다.


AutoLoad() 함수 안에서 리턴문 바로 위의 SizeToContent(); 함수호출부를 주석처리 하고,

DrawItem() 함수 안에서 StretchBlt()을 사용하여 이미지를 버튼 크기에 맞춘다.


물론, 작업 다 해놓은 파일을 첨부하니 이 작업을 매번 할 필요는 없다.



MyBitmapButton.cpp

MyBitmapButton.h



두 파일을 프로젝트 소스코드가 있는곳에 복사해 넣고, CBitmapButton 변수가 있는 곳에서

#include "MyBitmapButton.h" 로 헤더를 포함시켜준다.


그리고 CBitmapButton 변수명 으로 되어 있을 것을 CMyBitmapButton 변수명 으로 수정한다.


혹시나 버튼 이미지 구현부에 SizeToContent(); 문이 있다면 지우던가 주석처리 해버린다.


이제 이미지 크기에 맞춰 버튼크기가 수정되는 것이 아니라, 버튼 크기에 맞춰 이미지 크기가 수정된다.




참조사이트 : https://support.microsoft.com/ko-kr/kb/134421




1