Resource Leaking
프로그래밍2007. 8. 13. 18:33
MFC 에서, 컨트롤의 색상을 변경하고자 할 때, OnCtlColor()을 사용한다. (버튼 컨트롤 제외)
HBRUSH CPppDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if( pWnd->GetDlgCtrlID() == IDC_DIC)
{
hbr = CreateSolidBrush( RGB(0,0,255) );
pDC->SetBkMode( TRANSPARENT );
pDC->SetBkColor( RGB(0,0,255) );
pDC->SetTextColor( RGB(255,255,0) );
return hbr;
}
return hbr;
}
여기서 문제가 있다. 이 메소드는 해당 컨트롤을 다시 그려야 할 이유가 생길 때 마다 자동적으로 호출된다.
따라서, 프로세스의 메모리 점유가 늘어날 수 밖에 없다.
계속해서 CreateSolidBrush()를 통해 계속해서 브러시를 생성하기 때문.
프로그램 시작시, 단 한번만 브러시를 생성하고 프로그램 종료 시, 생성된 브러시를 파괴해 주는 것으로 이 부분은 해결된다. 코드는 다음과 같다.
생성자에 다음과 같은 코드를 삽입한다.
물론 hBkBrush 는 HBRUSH type 이며, 클래스 정의부분에 명시해 둔다.
hBkBrush = CreateSolidBrush(RGB(0,0,255));
그리고 위의 코드 중, 붉은색으로 된 부분을 다음과 같이 변경한다.
hbr = hBkBrush;
마지막으로, 프로그램 종료시 호출되는 파괴자나, 기타 메소드 중에 적당한 곳을 골라 브러시 객체를 파괴한다.
DeleteObject(hBkBrush);
'프로그래밍' 카테고리의 다른 글
C# TIP 몇가지 (0) | 2007.10.04 |
---|---|
구글 가젯 만들기, Part1 (1) | 2007.08.21 |
WebPage Redirect (MFC / API) (0) | 2007.05.16 |
SetTimer() (0) | 2007.05.14 |
ROBOCODE Master의 비밀!!! (0) | 2007.04.23 |
간단하고 편리한 영어단어 암기 프로그램 Memod
디.아이.와이2007. 5. 25. 21:38
Memod Version 0.1 Beta
프로그램의 이름은 Memorize 와 Word 를 합성하여 붙였습니다.
워낙에 컴퓨터 앞에 앉아 있는 시간이 많다 보니,
좀 더 효과적으로 영어 단어를 외우는 방법은 없을까 해서 간단하게 만들어 보았습니다.
Data 파일의 형식만 지킨다면, 영어 단어 암기 외의 용도로도 사용할 수 있을 것 같습니다.
사용하시는 분들의 많은 버그레포팅 부탁합니다.
사실 너무 간단한 프로그램이라 내놓기에도 민망하지만 -_ -;
[사용법]
실행파일과 함께 들어 있는 dic.txt 파일을 메모장으로 EDIT 합니다.
구분자 '|'를 기준으로 좌측은 영단어, 우측은 뜻이나 의미 등을 기술합니다.
저장 후, 메모드를 실행시키고, Play 버튼을 클릭하면 기록한 데이터가 일정 간격으로 회전합니다.
회전 시간 변경은 Play 버튼 우측의 ComboBox를 통해 할 수 있습니다.
[주의사항]
dic.txt 파일 내에 공백(space)이 존재할 경우, 정상적인 출력이 불가능합니다.
하나의 단어에 여러개의 의미를 부여할 경우, '|'를 사용하여 구분할 수 있습니다.
example)
dog|개|멍멍이|강아지
cat|고양이|야옹이
[사용 예]
저는 화면 우상단에 최대 최소화, 종료버튼이 가리지 않을 만큼에 위치에 두고 씁니다;
다음 버전에서 수정할 사항
1. 공백이 들어간 문자열 표시 기능 (단어 외 숙어 표시 가능)
2. Stop 버튼
3. Stop 된 상태에서 단어의 자세한 의미를 알고자 할 경우, 네이버 OpenAPI를 이용, 서비스
[추가중]
프로그램의 이름은 Memorize 와 Word 를 합성하여 붙였습니다.
워낙에 컴퓨터 앞에 앉아 있는 시간이 많다 보니,
좀 더 효과적으로 영어 단어를 외우는 방법은 없을까 해서 간단하게 만들어 보았습니다.
Data 파일의 형식만 지킨다면, 영어 단어 암기 외의 용도로도 사용할 수 있을 것 같습니다.
사용하시는 분들의 많은 버그레포팅 부탁합니다.
사실 너무 간단한 프로그램이라 내놓기에도 민망하지만 -_ -;
[사용법]
실행파일과 함께 들어 있는 dic.txt 파일을 메모장으로 EDIT 합니다.
구분자 '|'를 기준으로 좌측은 영단어, 우측은 뜻이나 의미 등을 기술합니다.
저장 후, 메모드를 실행시키고, Play 버튼을 클릭하면 기록한 데이터가 일정 간격으로 회전합니다.
회전 시간 변경은 Play 버튼 우측의 ComboBox를 통해 할 수 있습니다.
[주의사항]
dic.txt 파일 내에 공백(space)이 존재할 경우, 정상적인 출력이 불가능합니다.
하나의 단어에 여러개의 의미를 부여할 경우, '|'를 사용하여 구분할 수 있습니다.
example)
dog|개|멍멍이|강아지
cat|고양이|야옹이
[사용 예]
저는 화면 우상단에 최대 최소화, 종료버튼이 가리지 않을 만큼에 위치에 두고 씁니다;
invalid-file
Memod 다운로드
다음 버전에서 수정할 사항
1. 공백이 들어간 문자열 표시 기능 (단어 외 숙어 표시 가능)
2. Stop 버튼
3. Stop 된 상태에서 단어의 자세한 의미를 알고자 할 경우, 네이버 OpenAPI를 이용, 서비스
[추가중]
'디.아이.와이' 카테고리의 다른 글
블로그 문장 번역기, Blog Translator 위젯. (2) | 2009.02.10 |
---|---|
손쉽게 폴더 및 드라이브를 동기화 해 주는 프로그램 EasySync (12) | 2007.09.15 |
글자 수 세기 프로그램 CharacterCounter (바이트 단위 지원) (34) | 2007.09.08 |
ASP.NET 평점 계산기 (0) | 2007.03.10 |
API로 만든 네트워크 빙고 게임 (7) | 2007.02.26 |