싱클턴 클래스를 하나 만들어서
메모리 버퍼를 가져와 관리 하도록 하겠다.
ST.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
#pragma once
#include "header.h"
class ST{
private:
ST(){}
public:
static *ST instance;
static *ST Call()
{
if( instance != NULL ) instance = new ST;
return instance;
}
void CreateBuffer( HWND hWnd );
HBITMAP CreateBitmap( int Index );
void DeleteMemory();
}; |
cs |
헤더 파일을 새로 하나 만들어준다.
함수 이름 |
설명 |
void CreateBuffer( HWND hWnd ); |
메모리 버퍼들을 만들어주는 함수. |
HBITMAP CreateBitmap( int Index ); |
비트맵을 불러오는 함수. |
void DeleteMemory(); |
생성된 메모리를 지워주는 함수. |
초기화
메인cpp에 WM_CREATE에 있는 메모리 생성 부분을 ST클래스의 CreateBuffer함수로 가져온다.
DoubleBuffer.cpp
ST.h
버퍼들을 ST클래스의 CreateBuffer로 옮겨 줍시다.
DoubleBuffer.cpp
ST.h
불러온 비트맵을 반환 해줍니다.
LoadBitmap의 첫 번째 인자로 윈도우 핸들이 필요하므로 멤버 변수로 m_hInstance를 만들어 줍니다.
m_hInstance의 초기화는 CreateBuffer 그러니까, 메모리가 만들어 질때 해주면 됩니다.
만들어진 핸들은 로드 비트맵 함수의 첫 번째 인자에 넣어 주도록 합시다.
메인 함수로 돌아와
필요 없어진 LoadBitmap을 지워주도록 합시다.
ST에 있는 버퍼 만드는 함수를 불러와 주시고
마찬가지로 비트맵을 불러오는 함수를 불러줍시다.
그리고 이제 g_hBackBuffer와 g_hMemDC는 필요 없으므로
Init에서 지워줍시다.
Object,
Object_BackGround,
Object_Hero
에 함수의 매개변수로 있는 g_hBackBuffer와 g_hMemDC를 다 지워주도록 합시다.
Object에는 g_hBackBuffer와 g_hMemDC의 맴버 변수도 필요 없어졌으므로 지워줍시다.
1
2
3
4
5
6
7
8
9
10
11
12
13 |
case WM_CREATE:
{
ST::Call()->CreateBuffer(hWnd);
g_hBGA = ST::Call()->CreateBitmap(IDB_BITMAP1);
g_hHero = ST::Call()->CreateBitmap(IDB_BITMAP2);
g_CBGA = new BackGround;
g_CBGA->Init( g_hBGA );
g_CHero = new Hero;
g_CHero->Init( g_hHero );
break;
} |
cs |
아직도 길기 때문에 조금더 줄여 주도록 하겠습니다.
이젠 만들어진 메모리를 삭제 합시다.
1
2
3
4
5
6 |
void ST::DeleteMemory()
{
DeleteObject(g_hBackBitmap);
DeleteDC(g_hMemDC);
DeleteDC(g_hBackBuffer);
} |
cs |
1
2
3
4
5
6 |
case WM_DESTROY :
{
ST::Call()->DeleteMemory();
PostQuitMessage(0);
break;
} |
cs |
메모리를 저렇게 따로 지우는 이유는 WM_DESTROY()가 호출된다고 해서
프로그램이 바로 종료 되는것이 아니고
while루프를 몇번 더 돌기 때문에 메모리에 쓰레기값이 생깁니다 그렇기 때문에
while이 종료된 후에 지워주는 것이 더 확실하게 지워주는 것임돠
결과
잘 되네영
'API > 이론' 카테고리의 다른 글
캐릭터 점프 (0) | 2016.05.01 |
---|---|
메모리 생성을 각 클래스 안으로 넣기. (0) | 2016.04.30 |
싱글턴 패턴 (0) | 2016.04.30 |
이미지 깜박거림 없앰. (0) | 2016.04.29 |
캐릭터 뒷배경 검정색 없애기. (0) | 2016.04.29 |