이번 단계는 기능 적인 구현보다 그럴듯 해보일 수 있게 툴바에 이미지를 넣는 방법을 설명하겠습니다.
리소스에서 비트맵을 추가해 이미지를 추가 하는 방법을 설명할겁니다. 그런데 이 방법은 비효율적인 방법이지만 단순하게 접근할 수 있습니다.
png파일로 이미지 추가 하는 방법을 나중에 포스팅하겠습니다.
step 1)
리서스 뷰에 아래 사진처럼 ①우클릭 -> 리소스 추가 -> ②Bitmap 선택 후 가져오기 버튼 클릭 -> 비트맵 파일이 있는 위치에서 비트맵 파일 선택
step 2)
헤더 파일에 리소스에 추가된 비트맵을 읽어서 사용할 객체를 추가합니다.
CBitmap *p_bitmap;
CBitmap 객체에 저장된 이미지를 화면에 출력할 때 사용할 DC도 추가합니다.
CDC m_mem_dc;
리소스에서 비트맵을 읽어서 CBitmap 객체에 저장하고
더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
void WJ_ToolBar::AddButton(const wchar_t *ap_name, int a_command_id, int a_bmp_id)
{
if (m_btn_count < MAX_COMMAND_COUNT) {
// 버튼을 눌렀을 때 사용할 메시지 ID를 저장한다.
m_btn_list[m_btn_count].command_id = a_command_id;
m_btn_list[m_btn_count].bmp_id = a_bmp_id;
if (m_btn_list[m_btn_count].bmp_id) { // 비트맵 리소스 아이디가 0이 아닌경우
// 리소스에 저장된 비트맵을 읽기 위한 객체를 만든다.
m_btn_list[m_btn_count].p_bitmap = new CBitmap;
// 리소스에서 비트맵을 읽어서 CBitmap 객체에 저장한다.
m_btn_list[m_btn_count].p_bitmap->LoadBitmap(a_bmp_id);
}
else m_btn_list[m_btn_count].p_bitmap = NULL;
}
}
|
cs |
이미지 객체를 메모리 DC 객체에 연결합니다.
더보기
1
2
3
4
5
6
7
|
if (p_btn->p_bitmap != NULL) { // 이미지가 로드된 상태라면
CClientDC dc(this);
CRect r;
m_mem_dc.SelectObject(p_btn->p_bitmap); // 이미지 객체를 메모리 DC 객체에 연결한다.
// 메모리 DC에 연결된 비트맵을 화면 DC에 출력한다. (버튼의 x축 방향 가운데 위치시킨다.)
dc.BitBlt(p_btn->x + p_btn->width / 2 - 16, 10, 32, 32, &m_mem_dc, 0, 0, SRCCOPY);
}
|
cs |
비트맵 정보를 파괴 하는 코드입니다.
더보기
1
2
3
4
5
6
7
8
9
10
11
12
|
void WJ_ToolBar::OnDestroy()
{
// 버튼 이름을 저장하기 위해 할당했던 메모리를 제거한다.
for (int i = 0; i < m_btn_count; i++) {
delete[] m_btn_list[i].p_name; // 버튼 이름을 저장하던 메모리 해제
if (m_btn_list[i].p_bitmap != NULL) { // 버튼에 비트맵을 사용하는지 체크한다.
m_btn_list[i].p_bitmap->DeleteObject(); // 비트맵 정보를 제거한다.
delete m_btn_list[i].p_bitmap; // 비트맵 객체를 제거한다.
}
}
CWnd::OnDestroy();
}
|
cs |
실행 결과
실행파일
'MFC > MFC 사용법 따라하기' 카테고리의 다른 글
출력 디렉터리 이름, 출력 이름 변경 (0) | 2023.01.02 |
---|---|
[MFC] edit control 문자 추가 (0) | 2022.09.27 |
[MFC] 폴더 선택 다이얼로그 (0) | 2022.01.25 |
[MFC] 툴바 구현하기 - Step2 (0) | 2021.07.26 |
[MFC] 툴바 구현하기 - Step1 (0) | 2021.07.08 |