CSyncObject 예제

NOTE: 실행시 Output 창에 TRACE 출력을 확인할 것.

CCriticalSection 예제
-한번에 하나의 임계영역(Thread1 또는 Thread2의 cs부분)만 작동하는 예
1107007284.zip
CMutex 예제
-한번에 하나의 뮤텍스(MyThread에 mutex부분)만 작동하는 예

1056663372.zip
CSemaphore 예제
-세마포를 사용하여 한번에 2개의 쓰레드가 실행할 수 있는 예
1134171626.zip
CEvent 예제
-수동리셋 이벤트를 사용하여 하나의 쓰레드가 작동된후 다른 모든 쓰레드를 작동시키는 예
1123872691.zip

MFC Worker Thread 예제

SimpleWorkerThread
– 작업자 쓰레드를 사용하여 0~100을 파일출력하고 총합계값을 메시지박스로 출력
-AfxBeginThread(WorkerThreadProc,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);
  UINT WorkerThreadProc( LPVOID Param ) {
    // …
  }
1023606455.zip
SimpleWorkerThreadProgressBar
– 작업자 쓰레드를 사용하여 프로그래스바에 진행도를 나타냄
-AfxBeginThread(WorkerThreadProc,tis,THREAD_PRIORITY_NORMAL,0,0,NULL);
  UINT WorkerThreadProc( LPVOID lParam ) {
     THREADINFOSTRUCT* tis=(THREADINFOSTRUCT*)lParam;
     // …
   }
1204540346.zip

실습숙제 5 (Due by 12/7)

 

□ 단원 : 표준 컨트롤 & 대화상자 & 다양한 뷰 클래스


□ 목표 : MFC 대화상자 디자인 & 콘트롤 클래스 사용 연습


□ 주요 연습 내용 : CDialog, CButton, CStatic, CListCtrl, CSliderCtrl 


□ 준비자료 : SimpleMp3.zip

1379737116.zip
 

[연습문제] Ex5 (Due by 12/7 일 24시까지)


-cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC++ 2005 file, 보고서를 학번_이름_Ex5.zip으로 묶어서 낼 것. 보고서 (30%)


 


참고: VC++는 MFC dialog 기반 응용프로그램을 작성한다.


http://dis.dankook.ac.kr/lectures/hci08/entry/MFC-Dialog-based-Application-Program



 


0. 생성한 프로그램의 메인 프레임의 Title을 “HCI2_Ex5_이름_학번”으로 바꾼다. (힌트: Resource View에서 String Table의 IDR_MAINFRAME에 Caption을 “HCI2_Ex5_<이름>_<학번>”으로 하면 됨)




1. SimpleMp3라는 대화상자기반 프로젝트를 생성한다. (즉, Application Type에서 SDI나 MDI 대신, Dialog-based를 선택한다.) 그리고, MP3 파일을 재생할 수 있도록 fmod 사운드 라이브러리를 추가한다. (fmod.h와 fmoddvc.lib를 프로젝트에 추가하고, 프로젝트 속성에서 Linker->Additional Dependencies에 comctl32.lib odbc32.lib odbccp32.lib shlwapi.lib를 넣는다)




2. Resource View의 Bitmap에 Play, Pause, Stop, Back, Forward, Open 비트맵을 로딩한다. 그리고 Dialog에서 출력화면을 위한 Dialog (IDD_SIMPLEMP3_DIALOG)를 작성한다. (10%) 


-Toolbox에서 (현재 재생되고 있는 MP3를 보여줄) Static Control, (Play, Pause, Stop, Back, Forward, Open 비트맵으로 로딩한) Button Control, (MP3 파일목록 리스트 출력을 위한) List Control, (MP3 사운드의 볼륨을 조절해주는) Silder Control을 넣는다.


-List Control의 속성 (Properties) 창에서 View를 Report로 바꾼다.


-Slider Control의 속성 (Properties) 창에서 Orientation을 Vertical로 바꾼다.


사용자 삽입 이미지


3. 대화상자에 Static Control을 추가하고 현재 재생되고 있는 MP3 파일 제목을 출력한다. (10%)


-Add Member Variable을 Value variable로 해서 m_strMpName 추가


 DDX_Text(pDX, IDC_TEXT, m_strMpName) 추가됨


-새로운 MP3 파일이 재생될 시, 해당 MP3파일 제목을 출력할 수 있도록, UpdateData(FALSE)를 불러서 정적 콘트롤 값을 업데이트 시킨다.


-현재 MP3 재생을 멈추고 있으면 m_strMpName=“”로 만들어주고, UpdateData(FALSE)를 불러서 정적 콘트롤 값을 업데이트 시킨다.




4. 대화상자에 Slider를 추가하고, 슬라이더를 잡고 위아래로 움직이면 재생 사운드 볼륨을 제어할 수 있다. (10%)


-Add Member Variable을 control variable로 해서 m_ctrlSlider 추가


 DDX_Control(pDX, IDC_SLIDER, m_ctrlSlider) 추가됨


-대화상자의 OnInitDialog 함수에서 SetRange(0,255,FALSE) 등 슬라이더 콘트롤 초기화 (즉: 0=최소볼륨 & 255=최대볼륨)


OnVScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar)를 사용하여 현재 슬라이더의 위치에 따라 Volume 함수를 사용하여 제어된다.




5. 대화상자에 List Control을 추가하고 리스트에 재생하고자 하는 MP3 파일을 선택할 수 있도록 한다. (10%)


-Add Member Variable을 Control variable로 해서 m_ctrlList 추가


 DDX_Control(pDX, IDC_LIST, m_ctrlList) 추가됨


-대화상자의 OnInitDialog 함수에서 InsertColumn 등 리스트 콘트롤 초기화


이때, 리스트의 Column은 No.(번호)와 Name(파일명)과 Path(패스명)로 구성됨


-OnLvnItemchangedList(NMHDR *pNMHDR, LRESULT *pResult)를 사용하여 현재


리스트에서 아이템이 선택되면 바로 그 MP3 파일이 재생(Play)될 수 있도록 한다.




6. 대화상자에서 Open 버튼을 누르면 FileDialog가 나와서 MP3 파일을 원하는 만큼 여러 개 선택할 수 있게 한다. 그리고 파일을 선택하고 열기하면 대화상자의 리스트 콘트롤에 파일들이 추가된다. (10%)


-CFileDialog의 dwFlags를 아래와 같이 바꿔주면 여러 개 파일을 선택할 수 있다. OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_FILEMUSTEXIST| OFN_EXPLORER|OFN_ALLOWMULTISELECT|OFN_LONGNAMES|OFN_ENABLESIZ


-먼저 RemoveAllListRecords함수를 호출하여 리스트에 있는 파일을 지워서 초기화


-그리고, 선택된 파일을 읽어서 AddRecordToList함수를 호출하여 파일명(번호, 파일명, 패스명)을 추가한다.


사용자 삽입 이미지사용자 삽입 이미지
 


7. 대화상자에서 Play, Pause, Stop 버튼을 누르면 리스트에 현재 선택된 MP3 파일을 재생, 잠시멈춤, 멈춤 시킬 수 있다. (10%)


-대화상자 버튼에서 Add Event Handler 로  BN_CLICKED 이벤트에 함수추가


-제공하는 Play(), Pause(BOOL), Stop() 사용




8. 대화상자에서 Back, Forward 버튼을 누르면 리스트에 현재 선택된 MP3 파일의 전후로 옮기면서 MP3 파일을 재생시킬 수 있다. (10%)


-대화상자 버튼에서 Add Event Handler 로  BN_CLICKED 이벤트에 함수추가


-현재 리스트뷰에서 선택된 파일의 위치를 찾아서 그 위치에서 앞뒤로 바뀌어지는 기능을 추가


GetNextItem(-1, LVIS_SELECTED|LVIS_FOCUSED) // 현재 리스트에서 선택되어있는 아이템의 index를 받아옴


-SetSelectionMark(index); // 원하는 index의 아이템을 select


-SetItemState(-1, 0, LVIS_SELECTED|LVIS_FOCUSED); // 전체 아이템을 deselect


-SetItemState(index, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED); // 원하는 index의 아이템을 select하고 focus




9. 본인이 좋아하는 10개 이상의 MP3 파일을 로딩하여, 위에서 언급한 모든 기능을 구현 데모한다. (보고서점수에 포함)



MFC Dialog-based Application Program

.NET2005


  • MFC Dialog-based App 프로젝트 새로 만들기

    • 메뉴에서 File->New->Project->Visual C++ 템플릿->MFC->MFC Application를 선택한 후 “프로젝트 이름(예를 들어, SimpleTextFile)”을 적고 확인버튼을 누른다.
    • Dialog-based, Use MFC in a Shared DLL, 한국어 선택하고 Next 버튼을 누른다.
    • 사용자인터페이스 확인하고 Next버튼을 누른다.
    • Advanced Features에서 ActiveX를 선택해제한다.
    • 그리고, Generated Classes를 확인하고 Finish버튼을 누른다.

    사용자 삽입 이미지사용자 삽입 이미지 


  • 코드 추가

    • Resource 에 Dialog에서 콘트롤을 추가하여 편집한다.
    사용자 삽입 이미지
  • 빌드(F7)와 실행 (F5 or CTRL+F5)
    사용자 삽입 이미지