본문 바로가기
Windows/MFC 강좌 & Tips

[Widget] 버튼 클릭하여 메모장 실행 & 버튼 비트맵 이미지

by 미티치 2016. 12. 8.

1. 리소스에(프로젝트이름.rc) 버튼에 입힐 이미지 파일 추가

- 리소스 추가 >> 가져오기 >> 파일 선택

- IDB_BITMAP1 로 추가됨

 

2. 프로젝트이름.rc\Dialog에 있는 다이얼로그 화면에 버튼 추가

- 버튼 >> 우클릭 >> 속성에서 ID 지정, Owner Draw 를 True로 설정

 

3. 버튼 >> 우클릭 >> 변수 추가

- 변수 형식 기본으로 CButton으로 되어 있음.

- 변수 이름 설정하고 마침

 

4. 프로젝트이름Dlg.h에 public 속성으로 버튼 변수 추가되어 있음

- CButton으로 되어있는 버튼 형을 CBitmapButton으로 강제 변경

 

5. 프로젝트이름Dlg.cpp >> DoDataExchange(CdataExchange* pDX) 메소드에 변수 추가 되어 있는 거 확인

 

     DDX_Control(pDX, BTN_Notepad, btn_Notepad);

 

6. 프로젝트이름Dlg.cpp >> OnInitDialog() 에 버튼변수명.LoadBitmaps( 버튼에 입힐 이미지, NULL, NULL, NULL ); 추가

- 여기서는 IDB_BITMAP1가 버튼에 입힐 이미지에 들어감

- LoadBitmaps 함수의 인자 순서는 첫 번째는 버튼이 아무 동작도 안할 때 그냥 보이는 이미지, 그 뒤는 버튼 클릭 시 이미지 이런 인자가 들어가면 됨. 여기서는 NULL로 설정했음

 

     btn_Notepad.LoadBitmaps(IDB_BITMAP1,NULL,NULL,NULL);

 

7-1. 이미지 크기에 버튼 크기를 설정하려면 위의 소스 코드 밑에 btn_Notepad.SizeToContent();  추가

 

7-2. 버튼 크기에 버튼에 입힐 이미지를 맞추려면 다음 소스코드를 추가하고 4번에서 했던 CBitmapButton을 CMyBitmapButton으로 변경

 

 

 

- CMyBitmapButton은 CBitmapButton 상속받아서 메서드를 고친 클래스임 ( 출처 http://cloudtree.tistory.com/267 )

- MyBitmapButton 변수가 선언되어 있는 소스 파일에 #include "MyBitmapButton.h" 해줘야함

- 다 하고 나서 헤더파일을 찾는 동안 예기치 않게 끝났다고 에러가 한번 떴음. 그래서 stdafx.h를 include 해줌

( 참고 http://ingorae.tistory.com/1656 )

 

 

 

여기까지 이미지 버튼 설정


 

7. 프로젝트이름.rc\Dialog에 있는 다이얼로그 화면에 추가한 버튼을 더블 클릭

- 프로젝트이름Dlg.cpp 에 메소드 자동 추가됨

- 해당 메소드 안에 ShellExecute 함수 추가

- 만약 경로를 지정해서 프로세스를 실행 시키는 경우에는, 경로에 들어간는 백슬래쉬 \를 \\로 바꿔줘야함. ( 이스케이프 시퀀스 )
  ex ) C:\\Program Files (x86)\\folder\\program.exe

 

void CwTest4Dlg::OnBnClickedNotepad()
{
     // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
     ShellExecute(NULL, _T("open"),_T("notepad.exe"),NULL,NULL,SW_SHOW);   

}