Programming/MFC

Example 13 : Controls

부풍 2009. 8. 27. 15:33

Resource Editor

  • IDC_SPIN
    • Auto Buddy : 탭 순서가 바로 이전인 Edit Control과 연결됨.
    • Set Buddy Integer : Edit Control의 캡션이 자동 변경됨
    • DDX : CSpinButtonCtrl m_ctrlSpin
  • IDC_EDIT
    • DDX : int m_nAmount
  • IDC_SLIDER
    • DDX : CSliderCtrl m_sliderCtrl
  • IDC_PROGRESS
    • DDX : CProgressCtrl m_ctrlProgress
  • IDC_ANIMATION
    • DDX : CAnimateCtrl m_ctrlAnimation

CEx13View.h

	int m_nAmount;
	CSpinButtonCtrl m_ctrlSpin;
	CSliderCtrl m_ctrlSlider;
	CProgressCtrl m_ctrlProgress;
	CAnimateCtrl m_ctrlAnimation;

CEx13View.cpp (생성코드)

void CEx13View::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT, m_nAmount);
	DDX_Control(pDX, IDC_SPIN, m_ctrlSpin);
	DDV_MinMaxInt(pDX, m_nAmount, 0, 100);
}
 
void CEx13View::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
 
	m_ctrlSpin.SetRange(0, 100);
	m_ctrlSlider.SetRange(0, 100);
}

WM_HSCROLL

void CEx13View::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
	m_nAmount = m_ctrlSlider.GetPos();
	UpdateData(FALSE);
 
	CFormView::OnHScroll(nSBCode, nPos, pScrollBar);
}

Progress Bar

void CEx13View::OnBnClickedStart()
{
	m_ctrlProgress.SetRange(0, 100);
	m_ctrlProgress.SetPos(0);
	m_ctrlProgress.SetStep(1);
 
	for(int i = 0; i < 100; i++) {
		m_ctrlProgress.StepIt();
		Sleep(50);
	}
 
	AfxMessageBox("테스트가 성공적입니다.");
}
 
// 혹은 
void CEx13View::OnBnClickedStart()
{
	m_ctrlProgress.SetRange(0, 100);
 
	for(int i = 0; i < 100; i++) {
		m_ctrlProgress.SetPos(i);
		Sleep(50);
	}
 
	AfxMessageBox("테스트가 성공적입니다.");
}

Animation

#define AVI_FILE "C:\\clock.avi"
 
void CEx13View::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
 
	m_ctrlSpin.SetRange(0, 100);
	m_ctrlSlider.SetRange(0, 100);
 
	m_ctrlAnimation.Open(AVI_FILE);
}
 
void CEx13View::OnBnClickedPlay()
{
	m_ctrlAnimation.Play(0, -1, -1);
}
 
void CEx13View::OnBnClickedStop()
{
	m_ctrlAnimation.Stop();
}