API

커스텀 프로그레스바 만들어 보기

디버그정 2012. 10. 19. 17:55

윈도우에서 기본적으로 제공하는 공용컨트롤의 프로그레스바는 색깔이 너무 단조롭고 프로그레스바에 문자열도 못 쓴다.

최소한의 골격만 작성했고, 영역 색깔이나 글자 색, 크기 등 더 세세한 설정을 하려면

멤버변수를 추가하고 프로시저의 WM_PAINT 코드를 수정하면 될 것이다.

특정 윈도우의 자식으로 들어가는 경우와 독립적인 별개의 윈도우로 존재하는 경우(부모 윈도우를 NULL로 설정시) 2가지 모두 가능하다.

생성자로  바로 생성할 수도 있고, 디폴트 생성자를 실행 후 나중에 Create함수로 생성할 수도 있다.

 

참고로 골조만 짜고 그때그때 실사용하는 소스에서 알맞게 수정하는 것도 좋은 방법인 것 같다.

너무 옵션을 많이 주면 쓸데없이 코드가 길어지고, 중요한 것도 아닌데 일반화하기 애매한 경우 스트레스~~~!!!

 

 

구현 소스: 

CCustomProgressBar.h

CCustomProgressBar.cpp

 

/////////////////////// 커스텀 프로그레스바 ///////////////////////

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);
};