티스토리 뷰

예전에 ProgressBar 색상을 쉽게 변경한 적이 있어 같은 방법으로 시도하다가 실패하여 그 기록을 남기고자 글을 씁니다.


Progress bar의 색은 현재 Windows시스템이 어떤 테마를 사용하느냐에 달려 있습니다.


만약에 "Windows Classic" 테마를 쓴다면 CProgressCtrl 함수에 있는 SetBarColor 함수를 사용하면 됩니다.


COLORREF  SetBarColor(COLORREF clrBar); 


예제 코드는 아래와 같네요.


CProgressCtrl m_progressCtrl;

m_progressCtrl.SetBarColor(RGB(255, 0, 0)); 


위와 같이 작성하면 바뀝니다.


하지만 Aero 테마를 쓴다면 녹색만 표시 되고 위의 코드에 의해 다른 색으로 변경되지 않습니다.


Progress Bar는 시스템에서 사용하는 테마를 기반으로 색을 표시하기 때문인데요.


따라서 Progress Bar의 색상을 바꾸기 위해서는 테마를 바꿔야 합니다.


현재 사용하고 있는 테마 관련 파일은


==> C:\Windows\Resources\Themes\aero


에 위치 해 있을 것이고, 이를 수정하면 되는데 어렵습니다.



테마를 변경하지 않고 색상을 변경하는 방법이 한가지 더 있는데요, 바로 Progress bar의 상태를 바꾸는 것입니다.


Aero-style의 Progress bar는 normal, paused, error라는 세가지 상태를 가지고 있습니다.


normal의 경우 녹색, paused의 경우 노란색, error의 경우 빨간색으로 색을 채웁니다.



상태를 바꾸는 방법은 아래와 같습니다.


 CProgressCtrl m_progressCtrlYellow;

 CProgressCtrl m_progressCtrlRed;


 m_progressCtrlYellow.SetState(PBST_ERROR);

 m_progressCtrlRed.SetState(PBST_PAUSED);



사실 Aero style에서 위의 색은 각각의 의미를 가지고 있어서 위와 같이 색을 바꾸는 것은 권장하는 방법은 아닙니다.

(ProgressBar Guideline: https://msdn.microsoft.com/en-us/library/dn742475.aspx?f=255&MSPPError=-2147217396)


따라서 상황에 맞게 상태를 변경하며 잘 사용해야 합니다.


상태 변경은 위의 방법 외에


 m_progressCtrlYellow.SendMessage(PBM_SETSTATE, PBST_PAUSED, 0); 


으로도 바꿀 수 있습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함