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()을 사용하여 이미지를 버튼 크기에 맞춘다.
물론, 작업 다 해놓은 파일을 첨부하니 이 작업을 매번 할 필요는 없다.
두 파일을 프로젝트 소스코드가 있는곳에 복사해 넣고, CBitmapButton 변수가 있는 곳에서
#include "MyBitmapButton.h" 로 헤더를 포함시켜준다.
그리고 CBitmapButton 변수명 으로 되어 있을 것을 CMyBitmapButton 변수명 으로 수정한다.
혹시나 버튼 이미지 구현부에 SizeToContent(); 문이 있다면 지우던가 주석처리 해버린다.
이제 이미지 크기에 맞춰 버튼크기가 수정되는 것이 아니라, 버튼 크기에 맞춰 이미지 크기가 수정된다.
참조사이트 : https://support.microsoft.com/ko-kr/kb/134421