본문 바로가기
C & C++/MFC 컨트롤

[Dialog] 인스턴스 알림창

by izen8 2011. 12. 14.
반응형

NoteExample.zip


실행 화면

 

 
 

개발 환경

 

  1. OS 환경  : WindowXP

2. 사용 언어 : VC++ 6.0

3. 개발에 필요한 환경 : StdAfx.h 파일에 AnimateWindow함수를 사용하기 위해서 윈도우의

                        버전을 강제로 명시하기 위해서 아래와 같이 코드를 추가한다.

 

                        #define WINVER  0x0500

 

  

프로그램 설명

 

 1. 사용자의 선택에 따라 메시지가 사라지는 방식을 두가지로 표현하였습니다.

 2. 첫번째는 메시지 창이 부드럽게 나타났다가 부드럽게 사라지는 방식과 두번째는 메시지 창이

    위에서 아래로 나타났다 다시 위로 사라지는 방식입니다.

    (메신저에서 주로 상대방이 접속했다는 상황을 알려줄 때 주로 사용하는 방식이다.)

 

 

중요소스 설명

 

CDialog에서 계승받은 NoteExampleDlg클래스에 OnInitDialog()함수와 OnTimer()함수를 아래와 같이

코드를 추가합니다.

 
  BOOL CNoteExampleDlg::OnInitDialog()
   {
       ((CButton *)GetDlgItem(IDC_BLEND_RADIO))->SetCheck(1);
 
       // 메시지 창을 팝업하기 위한 타이머를 생성한다.
       SetTimer(1, 1000, NULL);
 
       return TRUE;
   }
 
===========================================================================================
 
   void CNoteExampleDlg::OnTimer(UINT nIDEvent)
   {
       if(nIDEvent == 1){
          // 타이머를 종료한다.
          KillTimer(1);
 
          NoteDlg ins_dlg;
          // 메시지 알림 방식에 대한 설정 값을 넘겨준다.
          ins_dlg.AnimationType(((CButton *)GetDlgItem(IDC_BLEND_RADIO))->GetCheck());
          ins_dlg.DoModal();
 
          // 위의 작업을 반복하기 위해 타이머를 생성한다.
          SetTimer(1, 3000, NULL);
 
      } else CDialog::OnTimer(nIDEvent);
   }
 
 
 

CDialog에서 계승받은 NoteDlg클래스에 OnInitDialog()함수와 OnTimer()함수 및 AnimationType()

함수를 아래와 같이 코드를 추가합니다.

 
   BOOL NoteDlg::OnInitDialog()
   {
       CDialog::OnInitDialog();
    
       // 팝업되는 창의 시작 위치를 0,0으로 변경한다.
       SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOSIZE);
 
       // 메시지 알림 방식에 따라 AnimateWindow 함수를 호출하여 윈도우를 나타나게 만든다.
       if(m_note_type)   AnimateWindow(this->m_hWnd, 3000, AW_BLEND | AW_ACTIVATE);
       else AnimateWindow(this->m_hWnd, 3000, AW_ACTIVATE | AW_SLIDE | AW_VER_POSITIVE);
 
       // 타이머를 생성하여 출력된 윈도우를 사라지게 만든다.
       SetTimer(1, 3000, NULL);
 
       return TRUE;
   }
 
===========================================================================================
 
   void NoteDlg::OnTimer(UINT nIDEvent)
   {
       if(nIDEvent == 1){
          // 타이머를 종료한다.
          KillTimer(1);
 
          // 메시지 알림 방식에 따라 AnimateWindow 함수를 호출하여 윈도우를 사라지게
          // 만든다.
          if(m_note_type) AnimateWindow(this->m_hWnd, 3000, AW_BLEND | AW_HIDE);
          else AnimateWindow(this->m_hWnd, 3000, AW_HIDE | AW_SLIDE | AW_VER_NEGATIVE);
 
          // 다이얼로그를 종료한다.
          EndDialog(IDOK);
 
        } else CDialog::OnTimer(nIDEvent);
   } 
 
===========================================================================================
 
   void NoteDlg::AnimationType(char parm_type)
   {
       // 알림 방식에 대한 값을 저장한다.
       m_note_type = parm_type;
   }
http://www.tipssoft.com/bulletin/board.php?bo_table=update&wr_id=307
반응형

댓글