Percent Dialog

 어떤 작업이 오랫동안 진행되는데도 화면에 아무런 변화가 없다면 사용자는 컴퓨터가 다운되었더고 생각할 수도 있다. 그래서 화면에 무언가 작업이 진행되고 있다는 표시를 해주는게 좋다. 여기서 소개하려는 것은 파일을 인스톨할 때 흔히 볼 수 있는 백분율 다이얼로그이다. 작업이 진척되는 정도에 따라 백분율 막대가 점점 길어지고 그 막대 가운데에 숫자로 퍼센트가 표시되는 그런 다이얼로그 말이다.

 알고 있겠지만 이런 형태의 다이얼로그의 경우 알아서 나타났다가 없어질 때도 알아서 없어져야 한다. 그러므로 DoModal() 함수를 사용하지 않고, 다이얼로그를 디스플레이하는 Create() 함수를 호출한다.

- 지원 API

CPercentDialog::Initialize()

CPercentDialog::SetPercent()

 

- 적용하기

1. 소스를 다운받는다. 이 소스들을 프로젝트에 추가한다.

2. 소스에 포함된 Percent.rc 파일을 열어 백분율 다이얼로그 템플릿을 프로젝트에 복사한다. (복사-붙여넣기를 해도 되고, Ctrl-drag 해도 된다.)

3. 사용하기를 원하는 모듈의 처음에 퍼센트 다이얼로그의 헤더파일을 포함한다.

          #include "percent.h"

4. 다음과 같은 코드를 원하는 부분에 넣는다. 여기서는 뷰에서 왼쪽 마우스 버튼을 더블클릭하면 퍼센트 다이얼로그가 나타나도록 해 보았다. 물론 위 3번의 헤더파일도 뷰의 cpp 파일에 포함되었다. 가운데 부분에 넣은 빨간 글씨 부분에 원하는 작업을 넣으면 된다. 여기서는 너무 빠른 속도 때문에 퍼센테이지 다이얼로그를 제대로 볼 수가 없어서 일부러 for 문 2개를 넣어 시간을 지연시켰다.

void CPercentDlgView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
        // TODO: Add your message handler code here and/or call default
        CPercentDialog *pDlg;
        pDlg = new CPercentDialog;
        pDlg->Initialize("Working...", "Please Wait while working.");
        for(int i=1; i<=100; i++) {
                //////////////////////////////////////
                //여기서 작업
                for(int j=0; j<300000; j++);
                for(int k=0; k<300000; k++);
                //////////////////////////////////////

                pDlg->SetPercent(i);
        }
        pDlg->DestroyWindow();
        delete pDlg;
                
        CView::OnLButtonDblClk(nFlags, point);
}