유돌이

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Notice

2009. 3. 21. 11:34 C/C++/MFC

멤버변수를 추가 합니다.

CBitmapButton m_btnButton;

 

OnInitDialog() 함수에 아래와 같이 초기화 합니다.

 

m_btnButton.Create(NULL, WS_CHILD|WS_VISIBLE|BS_OWNERDRAW, CRect(230,50,0,0), this, 1000);

CRect(230,50,0,0) 는 위치와 크기

1000은 적용시킬 버튼의 리소스 아이디 입니다. 

만약 1로 하면 확인버튼의 기능을 동일하게 사용합니다.

 

 

m_btnButton.LoadBitmaps(IDB_BTNFRAME,IDB_BTNFRAME_FOC,IDB_BTNFRAME_SEL,IDB_BTNFRAME);

사용할 리로스 , 버튼이 선택되었을때의 리소스,

버튼이 포커스 돼었을때의 리소스, 해제되었을때의 리소스

 

 

m_btnButton.SizeToContent();

리소스의 크기에 맞게 버튼을 설정해주는 함수입니다.

 

---------------------------------------------------------------------------

 

* CBitmapButton 만드는 법_1

CBitmapButton으로 만든 버튼은 push button 형식이다.
1) 먼저 Form에 버튼을 만들고 Style에서 Owner Draw를 꼭 체크
2) 버튼의 캡션을 간단하게 지정(중요)

예를 들어 캡션이 "ONE"이라면..

3) 이제 리소스에 버튼 그림들을 추가합니다.

이때 추가 하는 리소스 이름은
2번에서 지정한 캡션의 이름뒤에 "D" "F" "U" "X" 를 붙입니다
이를테면 "ONED" "ONEF" "ONEU" "ONEX" 같은 식으로 말입니다.
"U"=UP/ "D"=Down/ "F"=포커스/ "X"=disable 의 뜻

4) CBitmapButton 객체를 멤버변수로 만듭니다.

CBitmapButton m_ButtonOne;

5) OnInitialUpdate() 에 다음과 같이 씁니다

m_ButtonOne.AutoLoad(IDC_BUTTON_ONE,this);


* CBitmapButton 만드는 법_2

방법 1과 크게 다르지 않고, 맵 연결 방법에서 차이가 있다.
1) 버튼의 속성중에 property -> style 에서 Owner draw 꼭 check !!
2) 비트맵으로 씌울 그림들을 프로젝트의 Bit 멥 부분에 Insert 시킴

(정적인 느낌을 피하기 위해 그림은 두개를 준비)

3) 해당 다이알로그 박스의 버튼에 해당하는 변수를 추가시켜 줌(물론 해드에 변수를 정의)
.h 파일 부분에서 public 부분에 만들어 주시고

CBitmapButton m_OK;
CBitmapButton m_Cancel;

.cpp 부분에

void CADD_AND_DEL_FRIEND::DoDataExchange(CDataExchange* pDX)
{

CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CADD_AND_DEL_FRIEND)
...
DDX_Control(pDX, IDOK, m_OK); // 변수를 해당 아이디와 연결 시켜준다.
DDX_Control(pDX, IDCANCEL, m_Cancel);
//}}AFX_DATA_MAP

}

4) 다이알로그가 생성되는 초기화 부분에서 버튼과 이미지를 연결시켜준다.

BOOL CADD_AND_DEL_FRIEND::OnInitDialog()
{

CDialog::OnInitDialog();
// 버튼이 눌러지기전 이미지와 눌렸을때 이미지를 설정해 준다.
m_OK.LoadBitmaps( IDB_OKU, IDB_OKD );
m_Cancel.LoadBitmaps( IDB_CancelU, IDB_CancelD );

// 버튼을 이미지 크기에 맞춰서 씌워준다.
m_OK.SizeToContent();
m_Cancel.SizeToContent();
return true;

}


posted by 유돌이