윈도우에서 기본적으로 제공하는 공용컨트롤의 프로그레스바는 색깔이 너무 단조롭고 프로그레스바에 문자열도 못 쓴다.
최소한의 골격만 작성했고, 영역 색깔이나 글자 색, 크기 등 더 세세한 설정을 하려면
멤버변수를 추가하고 프로시저의 WM_PAINT 코드를 수정하면 될 것이다.
특정 윈도우의 자식으로 들어가는 경우와 독립적인 별개의 윈도우로 존재하는 경우(부모 윈도우를 NULL로 설정시) 2가지 모두 가능하다.
생성자로 바로 생성할 수도 있고, 디폴트 생성자를 실행 후 나중에 Create함수로 생성할 수도 있다.
참고로 골조만 짜고 그때그때 실사용하는 소스에서 알맞게 수정하는 것도 좋은 방법인 것 같다.
너무 옵션을 많이 주면 쓸데없이 코드가 길어지고, 중요한 것도 아닌데 일반화하기 애매한 경우 스트레스~~~!!!
구현 소스:
/////////////////////// 커스텀 프로그레스바 ///////////////////////
class CCustomProgressBar
{
public:
HWND m_hParent; // 부모 윈도우의 핸들, NULL인 경우 독립적인 형태로 생성
HWND m_hProgress; // 생성된 프로그레스바 핸들
double m_dCurPercent; // 현재 퍼센트
unsigned int m_uDirection; // 프로그레스바 진행방향 / 0: 수평, 1: 수직
BOOL m_bShowAtCreation; // 생성시 보임 유무
int m_x; // x좌표
int m_y; // y좌표
int m_cx; // 너비
int m_cy; // 폭
HANDLE m_hEvent; // 독립적인 형태로 생성시 스레드에서 프로그레스바 생성 후 그 시점을 알리는 데 사용
CCustomProgressBar();
CCustomProgressBar(HWND hParent, unsigned uDirection, BOOL bShowAtCreation, int x, int y, int cx, int cy);
~CCustomProgressBar();
HWND Create(HWND hParent, unsigned uDirection, BOOL bShowAtCreation, int x, int y, int cx, int cy);
void SetPercent(double dCurPercent);
void SetDirection(unsigned int uDirection);
BOOL Show(int nCmdShow); // ShowWindow와 같은 인수 사용
static DWORD WINAPI CreateNoParentByThread(LPVOID lp); // Create에서 독립적인 형태로 생성시 내부적으로 사용
static LRESULT CALLBACK ProgressBarProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
};
'API' 카테고리의 다른 글
Adding Counters to a Query (0) | 2012.10.25 |
---|---|
네트워크 사용량 구하는 예제 (0) | 2012.10.25 |
정보: 성능 카운터 및 인스턴스 열거 PDH 샘플 코드 (1) | 2012.10.25 |
프로세스 경로 구할 때 OpenProcess flag 팁 (0) | 2012.10.19 |
비정상적인 explorer 다운 상황 후 발생하는 메시지 및 트레이 아이콘 되살리기 (0) | 2012.10.16 |
비주얼 스튜디오 리소스 편집기에서 에디트 박스 높이가 줄어들지 않을 때 팁 (0) | 2012.03.22 |
WaitForSingleObject의 첫 인수가 스레드 핸들인 경우 유의점 (0) | 2012.03.17 |