티스토리 뷰
MFC 프로그레스 컨트롤
오랜 시간이 걸리는 작업의 진행 상황을 시각적으로 표시하는 용도로 사용한다.
1. 프로그레스 컨트롤 스타일
- Border : 경계선 유무
- Vertical : 세로 방향
- Smooth : 그래프 바 이미지 공백이 없다.
2. 프로그레스 컨트롤 클래스
- 범위 설정과 현재 범위 얻기
void CProgressCtrl::SetRange(short nLower, short nUpper);
void CProgressCtrl::GetRange(int& nLower, int& nUpper);
기본값은 0~100 이므로 사용하기 전에 용도에 맞게 최소, 최대 범위를 설정해야 한다.
- 위치 설정과 현재 위치 얻기
int CProgressCtrl::SetPos(int nPos);
int CProgressCtrl::GetPos();
nPos : SetRange() 로 정한 범위에 속해야 한다.
3. 증감
int CProgressCtrl::OffsetPos(int nPos);
현재 위치에 nPos 값을 더한다. nPos 값이 음수면 현재 위치가 감소한다.
int CProgressCtrl::SetStep(int nStep);
int CProgressCtrl::StepIt(); // SetStep()으로 설정한 크기인 nStep 값을 매번 현재 위치에 더한다.
nStep 값이 음수면 StepIt() 을 호출할 때마다 현재 위치가 감소한다.
Border : true
Smooth : True 로 속성 지정
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
32
33
34
35
36
37
38
39 |
class CMFCApplication15View : public CFormView
{
...
public:
CProgressCtrl m_progress;
bool m_bNowProgress;
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnTimer(UINT_PTR nIDEvent);
};
BEGIN_MESSAGE_MAP(CMFCApplication15View, CFormView)
ON_WM_LBUTTONDBLCLK()
ON_WM_TIMER()
END_MESSAGE_MAP()
void CMFCApplication15View::OnLButtonDblClk(UINT nFlags, CPoint point)
{
if (m_bNowProgress == false)
{
m_bNowProgress = true;
m_progress.SetRange(0, 10);
m_progress.SetPos(0);
SetTimer(100, 500, NULL); // ID=100 인 타이머 생성
}
CFormView::OnLButtonDblClk(nFlags, point);
}
void CMFCApplication15View::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == 100)
{
if (m_progress.GetPos() < 100)
m_progress.OffsetPos(1);
else
KillTimer(100);
m_bNowProgress = false;
}
CFormView::OnTimer(nIDEvent);
} |
cs |