2011년9월15일_winAPI_비트맵 리소스(임시제목)와 간단히 코드를 프로젝트에 추가하는 법
● 프로젝트에 관련 파일들을 불러오는 법
현재 워크스페이스(작업공간, 프로젝트)에는 어떤 파일도 존재하지 않는다.
메뉴 – Project – Add to Project - Files를 선택하면,
파일삽입 대화상자가 뜨고,
파일을 선택하고 OK버튼을 누르면,
이렇게 자동으로 분류되어 들어간다.
그런데 문제가 있다. 리소스파일이 소스파일폴더에 들어가 버렸다.
드래그하여 폴더를 옮기자.
● Bitmap예제
<실행결과>
CreateCompatibleDC()의 인자로 화면DC의 핸들을 넣으면 동일한 특성을 가진 메모리DC의 핸들을 반환한다.
비트맵은 화면DC로 바로 화면에 출력이 불가능하므로 메모리DC를 생성하여 그린 후 나중에 복사한다.
이 함수의 원형은 다음과 같다.
HDC CreateCompatibleDC(HDC hdc); |
MAKEINTRESOURCE() 매크로함수는 쉽게 설명하자면 상기와 같이 정수값을 문자형포인터 타입으로 캐스팅한다.
(과거에는 리소스의 ID를 “MyMenu”와 같이 문자열을 사용했으나 기계는 숫자를 다루기 편하기 때문에...(생략))
g_hInst는 WinMain()시작부에 현재 실행 중인 이 프로그램의 인스턴스핸들을 대입하니 그것을 가지고 있다.
즉, 비트맵리소스를 불러와 현재 프로그램에 적재하는 함수이다.
리소스는 실행파일과 분리되어 있어 프로그램실행시 메모리에 로딩되지 않는다.
그러니 실행 중에 로딩하는 것.
LoadBitmap()의 원형은 다음과 같다.
HBITMAP LoadBitmap(HINSTANCE hInstance, // 인스턴스의 핸들
LPCTSTR lpBitmapName); // 비트맵리소스의 ID |
GetModuleHandle()는 MSDN 에 의하면 GetModuleHandlle은 모듈의엔트리 포인트를 넘겨주는 함수이다.
[출처] GetModuleHandle 과 LoadLibrary|작성자 야구광
헉 출처남네..한 줄 복사는 참아주삼 ㅠㅠ
NULL을 인자로 넘기면 현재 실행 중인 모듈의 엔트리포인트를 반환한다. (모듈 = 함수 = 코드 = 프로그램?)
윈도우즈는 여러 개의 프로그램이 동시에 실행되는 멀티 태스킹 시스템에 하나의 프로그램이 여러 번 실행될 수도 있다.
그래서 WinMain()호출시 인자로 HINSTANCE타입의 hInstance(인스턴스 핸들)을 받아 프로그램이 자신을 알게 된다.
(동사무소에서(운영체제로부터) 주민증(인스턴스핸들)를 받는 것과 같은가? 인생이 끝나면 소멸되니..)
//잠시 그만하고 도서관리할래 ㅠㅠ
● DrawBitmap예제
관련 주요 소스코드만 아래에 삽입..
//내일 해야지~
참조(Reference) |
책 ”windows API 정복“
p.176 – 6-3 비트맵
p.177 – 예제 Bitmap
p.178 – 6-3-나. 메모리DC
p.180 – 6-3-다. BitBlt
6-3-라. StretchBlt
p.182 – 예제 DrawBitmap