1 / 50

Visual C++ 프로그램 구조 및 작성단계

2 주차. Visual C++ 프로그램 구조 및 작성단계. 1. 3 MFC 의 개요 (1) MFC 의 구조 (2) 클래스 구성 1.4 Visual C++ 프로그램 구조 및 작성단계 (1) Visual Developer Studio 의 구성 (2) Visual C++ 프로그램 작성 단계 < 실습 1-5> 간단한 문서 편집기 작성 편집기 작성 < 실습 1-6> Hello Program [SDI Application type]

parker
Download Presentation

Visual C++ 프로그램 구조 및 작성단계

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2주차 Visual C++ 프로그램 구조 및 작성단계 Visual C++

  2. 1. 3 MFC의 개요 • (1) MFC의 구조 • (2) 클래스 구성 • 1.4 Visual C++ 프로그램 구조 및 작성단계 • (1) Visual Developer Studio의 구성 • (2) Visual C++ 프로그램 작성 단계 • <실습 1-5>간단한 문서 편집기 작성 편집기 작성 • <실습 1-6> Hello Program [SDI Application type] • <실습 1-7> Hello Program[Dialog Based] Visual C++

  3. 1장 • Visual Developer Studio의 구성 Visual C++

  4. 1장 • Visual C++ 프로그램 작성 단계 • 첫 번째 과정 : 프레임워크 생성 • 두 번째 과정 : 자원편집 • 세 번째 과정 : Class 멤버변수 정의 및 초기화 • 네 번째 과정 : Class 멤버함수 코딩 • 다섯 번째 과정 : Build 및 실행 • ※ 응용마법사와 클래스 마법사 Visual C++

  5. 1장 2주차 MFC 프로그램 • 복잡한 API를 마이크로소프트사가 응용프로그래머가 편리하게 사용할 수 있도록 클래스로 포장하여 MFC(Microsoft Foundation Classes) 라는 라이브러리에 넣어 제공 Visual C++

  6. MFC 상속 < 응용프로그램의 프레임워크 클래스 > 1장 • 응용마법사 - SDI 프로토타입 생성시 SDI형 프로토타입 생성  4개의 클래스 생성 Visual C++

  7. MFC 상속 1장 • 응용마법사 - Dialog Based 프로토타입 생성시 대화상자형 프로토타입 생성  2개의 클래스 생성 대화상자를 통한 입출력 수행 기능은 CDlg 클래스에서 작성 Visual C++

  8. 1장 <실습 1-7> Hello Program[Dialog Based] Visual C++

  9. 대화상자 • 대화상자 기반과 SDI 또는 MDI 기반의 차이점 • View 클래스와 Document 클래스가 만들어지지 않음 • 입출력 수행시  대화상자의 각종 컨트롤을 통해서 행함 • 프로그램에서 발생되는 자료들  별도의 클래스를 만들어서 처리 또는 Dlg 클래스에서 별도 처리해야 함.

  10. 대화상자 • 다이얼로그 기반의 프로그램 • 애플리케이션 클래스와 다이얼로그 클래스로 구성

  11. 대화상자 2가지 유형 • 모달 대화상자 • 현재 사용중인 대화상자 종료후에 다른 대화상자 사용가능한 형태 • 예) 삭제시 나타나는 대화상자 • 비모달대화상자 • 현재 사용중인 대화상자 종료 전에도 다른 대화상자 사용가능한 형태 • 예) 찾기 대화상자 Visual C++

  12. 대화상자 • 메시지 박스 사용 • 가장 단순한 형태의 대화상자 • MFC 클래스 라이브러리 이용 • AfxMessageBox 함수 이용함 int AfxMessageBox (본문내용, 버튼 | 아이콘) 예) AfxMessageBox(“덮어쓸까요?“ , MB_YESNO | MB_ICONQUESTION); Visual C++

  13. 대화상자 int n = AfxMessageBox("덮어쓸까요?", MB_YESNOCANCEL | MB_ICONQUESTION); if(n == IDYES) pDC->TextOut(50,50, "예 선택했군요"); else if(n == IDNO) pDC->TextOut(50,50, "아니오 선택했군요"); else pDC->TextOut(50,50, "취소 선택했군요"); Visual C++

  14. SetWindowText 함수 • CWindow::SetWindowText • 윈도우 제목줄의 문자열 변경시에 사용하는 함수임. • 사용예 SetWindowText(“제목줄 문자열 출력내용임”); BOOL SetWindowText( LPCTSTR lpszString ) throw();

  15. EnableWindow 함수 • CWnd::EnableWindow • 객체의 활성화/ 비활성화를 결정지음 • 사용예 m_btnAmp. EnableWindow(TRUE);  m_btnAmp에 연결된 컨트롤을 활성화시켜라. BOOL EnableWindow(BOOL bEnable);

  16. ShowWindow 함수 • CWnd::ShowWindow • 윈도우를 화면에 출력하는기능을 함 • nCmdShow : 윈도우를 화면에 출력하는 방법을 지정하며 다음과 같은 매크로 상수들이 정의되어 있다. • SW_HIDE : 윈도우를 숨긴다. • SW_SHOW : 윈도우를 활성화시켜 보여준다. • SW_MINIMIZE : 윈도우를 최소화시키고 활성화시키지 않는다. • SW_RESTORE : 최대, 최소화된 윈도우를 이전 위치로 복구한다. • 사용예 : m_btnAmp.ShowWindow(SW_HIDE); BOOL ShowWindow(intnCmdShow);

  17. SetWindowText 함수 • CWindow::SetWindowText • CWnd 클래스를 상속받은 각 컨트롤들이 이 함수를 사용하게 되면 해당 컨트롤의 문자열변경이 가능하다. • 사용예 CEdit m_ed; m_ed.SetWindowText(“홍길동”); 명령 실행후

  18. GetWindowText 함수 • CWindow::GetWindowText • CWnd 캡션 타이틀을 괄호안의 bstrText에 복사함 • 사용예 CString str; m_str.GetWindowText(str); BOOL GetWindowText( BSTR& bstrText )

  19. CString 함수 • CString • 문자열 형태의 자료형 및 문자열 처리 함수들의 집합체인 클래스 • 사용예 CStringstr; str = “안녕”; • Format 함수 사용예 CStringstr = “나이는 “, sz; int age = 20; sz.Format(“%s %d 입니다”, str, age); AfxMessagebox(sz);

  20. 컨트롤과 클래스 연결 • 대화상자의 데이터 관리를 도와주는 함수임 • DDV(dialogData Validation) • 컨트롤과 변수에 연결된 데이터를 확인하는데 사용함 • DDX(dialogData eXcahnge) • 대화상자의컨트롤에 데이터를 보내거나 받을때 사용함. Visual C++

  21. 컨트롤과 클래스 연결 • 컨트롤과 클래스의 연결방법- 1번째 • DDX를 이용하는 방법 • 컨트롤과 연결되는 방법 • Value : • 컨트롤과 변수를 연결하여 컨트롤에 입력된 값을 변수에 저장 • DDX_Text계열 함수를 이용하여 자원에 연결

  22. 컨트롤과 클래스 연결 Control형 멤버변수 CComboBox m_cb; • Control : • 해당 컨트롤을 제어할 수 있는 컨트롤 클래스와 연결 • DDX_Control계열 함수를 이용하여 자원에 연결

  23. 컨트롤과 Value형 멤버 변수 연결 • 다이얼로그 템플릿에서 Value형 멤버 변수와 연결시키려는 컨트롤을 선택[Ctrl]키를 누른 상태에서 마우스 버튼을 더블 클릭

  24. 컨트롤과 Value형 멤버 변수 연결 dlg 생성자함수 CxxxDlg::CxxxDlg(CWnd* pParent /*=NULL*/) : CDialog(CNameDlg::IDD, pParent) { //{{AFX_DATA_INIT(CNameDlg) m_strName = _T(""); m_nAge = 0; //}}AFX_DATA_INIT } • 코드의 변화 dlg.h class CxxxDlg : public CDialog { //… //{{AFX_DATA(CNameDlg) enum { IDD = IDD_DIALOG1 }; CString m_strName; int m_nAge; //}}AFX_DATA //… }; void CxxxDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CNameDlg) DDX_Text(pDX, IDC_EDIT1, m_strName); DDX_Text(pDX, IDC_EDIT2, m_nAge); //}}AFX_DATA_MAP } DoDataExchange

  25. 컨트롤과 클래스 연결 • 컨트롤과 클래스의 연결방법- 1번째 • DDX 관련 함수 • DDX_Control : 리스트박스, 콤보박스등과 같은 컨트롤들에 대한 리소스를 해당 멤버변수에 연결함 • DDX_Text : 에디터상자 컨트롤을 CString, int, long, UINT 형태의 멤버변수에 연결할때 사용함. • DDX_Check : 체크상자 컨트롤을 int, BOOL 형태의 멤버변수에 연결할때 사용함. • DDX_Radio : 라디오버튼 컨트롤을 해당 멤버 데이터에 연결할때 사용함

  26. 컨트롤과 클래스 연결 • 컨트롤과 클래스의 연결방법- 2번째 • 컨트롤의 핸들로 클래스와 연결하는 방법 • 핸들을 얻기 위해 컨트롤의 포인터를 받을 포인터 변수를 선언 • GetDlgItem()함수를 이용하여 컨트롤의 포인터를 선언된 포인터 변수에 치환한다. • 클래스의 멤버를 이용하여 컨트롤을 다룬다. • 예) CListBox *pList; pList = (CListBox *)GeDlgItem(IDC_LIST1); pList->AddString(“데이터”);

  27. 컨트롤과 클래스 연결 • DoDataExchange 함수 • MFC 프레임워크가 호출하게 되는 가상함수 • 컨트롤과 대화상자 멤버변수 사이의 자료전송과정을 처리함 • DDX_Text 함수, DDX_Control 함수 이용해 자원과 연결 • DDX_Control 형태로 연결되었을 경우  변수가 클래스를 상속 받으므로 클래스의 멤버 변수를 마음대로 사용할 수 있다. • 이 함수를 직접 호출할 필요없음 • 대신, UpdataData() 함수를 호출함 Visual C++

  28. 컨트롤과 Value형 멤버변수사이의 데이터전송 • UpdateData() 함수 • DDX_Value 형태로 연결되었을 경우에 이 함수를 사용하여 자원을 updata 함. • UpdateData(TRUE) : 컨트롤의 데이터  연결 변수에 할당 • UpdateData(FALSE) : 변수의 값  컨트롤에 할당 • UpdateData 함수는 내부적으로 DoDataExchange 함수를 호출

  29. 사칙연산 대화상자 만들기 • <실습 3_1> 사칙연산 대화상자 • 두 개의 정수 데이터를 입력받아 사직연산을 수행하는 사용자 정의 대화상자를 만들어 보자. 에디터 박스에 대해 멤버 변수를 선언하고 DDE내에 DDX 계열 함수들을 사용하여 대화상자와 프로그램간의 정보전달을 어떻게 수행하는지 자세히 살펴보기로 하자.

  30. atof 함수 • atoi() : 문자열 인수에 해당하는 int 값 반환. • atoi(“234”)  문자열 234를 정수로 변환 • itoa() : 정수를 문자열로 반환 • itoa(234, buf, n)  buf에 234를 n진수로 변환 • atof() : 문자열 인수에 해당하는 double값 반환. • atof(“23.4”)  문자열 23.4를 실수로 변환 • 실수를 문자열로 변환하는 것은 sprintf 이용할 것 • fcvt,gcvt  - 실수를 text로 변환 CString -> char * 변환시 CString str;str = "Hello";char* ss = LPSTR(LPCTSTR(str));

  31. sprintf 함수 • Sprintf 함수 • argument를 format 형식에 맞춰서 값을 변환해 buffer에 저장함 • Printf는 내용을 화면에 출력하는 것이고, sprintf는 메모리에 출력하는 것만 다르다. • 예) intsprintf(char*buffer,constchar*format [,argument] ... ); int i = 10.537;char str[80];sprintf(str, "%.2f", i); i의 값을 문자열로 변환해서 str에 저장함

  32. Create 윈도우를 생성 ShowWindow : 컨트롤을 보이기, 감추기 SW_SHOW ,SW_HIDE EnableWindow 윈도우를 활성화 시키거나 비활성화 시킴 SetWindowPos 윈도우의 크기와 위치를 변경 SetWindowText 윈도우의 메인 텍스트를 변경 CWnd 클래스

  33. 다이얼로그 상자가 생성될때 발생되는메시지임 주로 컨트롤들의 값 초기화를 할때 사용됨 WM_INITDIALOG

  34. GetSel 선택된 부분의 문자열을 얻어옴 SetSel 특정 부분을 선택 영역으로 설정 ReplaceSel 선택된 부분의 텍스트를 지정한 텍스트로 치환 GetLineCount 편집 박스의 텍스트의 줄 수 반환 GetLine 지정된 라인의 텍스트를 얻어옴 CEdit 클래스

  35. 문자열을 추가 함수 : AddString, InsertString AddString 리스트박스의 마지막줄에 항목 추가 리스트박스에 sort 설정시, 새로 추가되는 문자열 자동 정렬됨. m_listBox.AddString(“장미”); InsertString 리스트상의 특정 위치에 항목 추가 m_listBox.InsertString(0, “장미”);  0번째 위치에 장미 항목 추가 보통 리스트박스, 콤보박스의 항목 추가는 프로그램실행 초기에 일어나도록 한다. 이때 항목 초기화를 해주는 함수는 OnInitDialog 함수이다. CListBox, CComboBox 클래스

  36. DeleteString 지정한 위치의 문자열 삭제 m_list.DeleteString(8);  9번째 항목 삭제 ResetContent m_list.ResetCount(); CListBox, CComboBox 클래스

  37. CListBox, CComboBox 클래스 • GetCount • 리스트내에 저장된 항목의 개수 반환 • int cnt = m_list.Getcount(); • GetCurSel • 현재 항목의 첨자값 반환 • int cnt = m_list.GetCursel(); int nItems = listBox.GetCount(); while(nItems > 3 && nItems !=LB_ERR) nItems = listBox.DeleteString(nItmes-1); 4번째 항목부터 마지막항목까지 삭제 Visual C++ 37

  38. GetCurSel, SetCurSel 선택된 문자열의 인덱스 반환하거나 설정 인덱스는 0부터 시작 GetText 현재 선택한 줄의 항목을 제시한 문자열변수에 할당함. m_list.GetText(n, sz); DeleteString, ResetContent : 문자열을 삭제 DeleteString  한 행씩 삭제 ResetContent 전체 행 삭제 GetCount 컨트롤에 들어있는 총 문자열의 수를 반환 CListBox, CComboBox 클래스

  39. ListBox 실습 리스트박스에 InitDialog를 통해서 항목추가를 하고, 항목을 더블클릭하면 해당 항목이 메시지박스를 통해서 출력되도록 한다. 수행 과정 OnInitDialog에 항목추가 코딩 Ctrl + W (클래스 위저드)  리스트박스의 더블클릭메시지 (LBN_DBLCLK) 선택  Add Function 선택  EditCode 선택 CListBox, CComboBox 클래스

  40. ListBox 실습 수행 과정 CListBoxDlgDlg::OnDblclkList1() 함수에 코딩함. CListBox, CComboBox 클래스 int n = m_list.GetCurSel(); if(n != LB_ERR) { CStringsz; m_list.GetText(n, sz); AfxMessageBox(sz); }

  41. CListBox, CComboBox 클래스 • ListBox 실습 • 수행 과정 • 대화상자에 에디트박스와 • 버튼 3개를 추가함 • 리스트박스의 속성에서 • SORT 항목 체크해제함 • Ctrl + W (클래스 위저드)  • Member Variable  • IDC_EDIT 더블클릭  • 멤버변수 할당함

  42. CListBox, CComboBox 클래스 • ListBox 실습 • 코딩

  43. WM_INITDIALOG 메시지 (OnInitDialog 메시지 핸들러 함수) 컨트롤의 초기화 루틴은 여기 들어간다. 통지 (NOTIFICATION) 메시지 통지 메시지는 컨트롤에 발생한 사건을 알려주기 위해 그 컨트롤을 품고 있는 부모 윈도우인 다이얼로그 박스로 메시지를 보냄 통지 메시지의 전달 통지 메시지는 다이얼로그로 전달이 된다. 컨트롤의 제어

  44. Button BN_CLICKED, BN_DBLCLK Edit Box EN_CHANGE, EN_SETFOCUS, EN_KILLFOCUS List Box LBN_DBLCLK, LBN_SELCHANGE, LBN_SETFOCUS, LBN_KILLFOCUS Combo Box CBN_DBLCLK, CBN_SELCHANGE, CBN_SETFOCUS, CBN_KILLFOCUS, CBN_EDITCHAGE Notification Message

  45. 에디트컨트롤과 리스트박스가 결합된 형태의 컨트롤임. 종류 단순콤보박스 : 에디트컨트롤과 리스트박스가 함께 표시됨. 드롭다운 콤보박스 : 리스트박스가 감추어진 형태. 드롭다운 리스트박스 : 드롭다운과 비슷함. 단, 에디트컨트롤을 사용할 수 없다. 콤보박스

  46. 속성 GetLBText 콤보박스내 리스트박스의 선택된 값을 반환 M_combo.GetLBText(1, str) ;  2번째 항목의 문자열을 str에 저장함 FindString 콤보박스안의 특정 문자열 검색해서 그 문자열이 위치해 있는 첨자번호를 반환함 M_combo.FindString(-1, “찾고자하는 문자열”) ;  -1 다음행부터 제시한 문자열로 시작하는 문자열을 콤보박스내에서 찾음. 콤보박스

  47. 메시지 CBN_CLOSEUP 콤보박스의 리스트박스가 열렸다 닫힐때 발생하는 메시지 CBN_EDITUPDATE 콤보박스의 에디트컨트롤에 문자열을 입력한 경우에 발생하는 메시지. 콤보박스

  48. ASSERT 프로그래머가 의도한 대로 입력 값 또는 결과가 정확하게 존재하는지를 확인하기 위한 작업이다 Assert() 는 FALSE 일 때 실패했다고 나타낸다. assert(FALSE) : 메시지로 Assert() 안의 내용이 넘어온다. assert( !"TEST" ) 콤보박스

  49. 대화상자에 생성된 컨트롤의 주소를 얻는데 사용함. 프로그래머는 기본적으로 리소스 편집기에서 편집할때 사용한 컨트롤 번호만을 알고 있기 때문에 이 컨트롤 번호를 이용하여 해당 컨트롤의 주소를 얻을 때, 이 함수를 사용합니다. 함수원형 nID : 컨트롤 ID 사용예 CWnd *p_wnd = GetDlgItem(IDC_MY_EDIT); CEdit *p_edit = (CEdit *)GetDlgItem(IDC_MY_EDIT); GetDlgItem CWnd *GetDlgItem(int nID) const; 

  50. 본문예제 설명 Visual C++

More Related