Programming hwp

Size: px
Start display at page:

Download "Programming hwp"

Transcription

1 5 장 SDI 응용프로그램 5.1 문서 / 뷰구조와 SDI 응용프로그램 문서 / 뷰구조 SDI 응용프로그램유형또는 MDI 응용프로그램유형이선택될경우응용프로그램마법사 (AppWizard) 가생성하는프로그램구조는문서 / 뷰 (Document/View) 구조를중심으로이루어진다. 이러한응용프로그램들은문서의전체또는일부를메모리에읽어들인후그내용을어떤형태로든사용자에게보여준다. 이렇게문서의내용을화면을통해사용자에게제시하는것을뷰라고한다. 응용프로그램들중에는하나의문서에대해한가지뷰만제공하는경우도있고여러가지뷰를제공하는경우도있다. 문서를취급하는응용프로그램들중에는한번에한개의문서만을다루는경우도있고동시에여러개의문서를열어둔상태에서작업을수행하는경우도있다. 여러개의문서를동시에다루는경우문서유형은한가지인경우도있고서로다른여러유형의문서들을취급하는경우도있다. 메모장의경우한번에한개의문서만취급하며다루는문서유형도텍스트파일로한정된경우이다. 또뷰의형태도한가지로정해져있다. 웹브라우저의경우일반뷰에서는 HTML 문서를해석한다음출력형식을조정하여사용자가보기좋게보여준다. 또대부분의웹브라우저들은 HTML 문서의소스를텍스트파일로보여주는뷰도제공한다. 또 MS Excel의경우테이블형태로작성된문서에대해히스토그램이나파이차트등여러가지뷰를제공하기도한다. MS 워드의경우입력파일이나문서저장형식은여러종류이다. 그러나 MS 워드프로그램에서작업중인문서형식은 MS 워드문서라는한가지유형이다. 반면에 Visual C++ 의경우, 프로그램소스를나타내는텍스트파일, 아이콘들을나타내기위한이미지파일, 클래스마법사를위한.clw 파일등다양한유형의파일들을동시에열어두고사용한다. 응용프로그램에서문서가나타내는측면은주로파일에저장하거나파일로부터읽어들이는등의외부저장매체와연관된측면인데비해, 뷰의경우는문서의내용을사용자에보여주는측면을담당하고있다. 이러한기능을분리하고있는가장중요한이유는하나의문서에대응되는뷰가둘이상인경우도있기때문이다. 이와같이문서와뷰로이루어지는프로그램구조를지원하기위한클래스로 MFC는 CDocument와 CView를제공하고있다. CDocument 클래스는문서를메모리상에서나타내기위한자료구조의표현과문서의저장및읽어들이기등을주로담당한다. ( 도큐먼트클래스안의자료구조가문서에대응되는파일의데이터전부를메모리안에갖고있을필요는없으며, 특히대용량파일의경우이는불가능하기도하다. 현재뷰가필요로하는문서부분만메모리안에갖고있을수도있고, 또는파일에접근하기위해필요한정보만갖고있을수도있다.) 반면 CView 클래스는문서의내용을화면상에서사용자에게보여주는일과문서에대한

2 사용자의편집행위를문서에반영하는일등을담당한다. 즉, 문서와사용자사이의인터페이스를담당하는것이뷰라고할수있으며, 이러한인터페이스는양방향으로이루어진다. SDI/MDI 응용프로그램유형을선택하면 AppWizard는 CDocument에서파생된클래스와 CView에서파생된클래스를만들어주며, 이러한파생클래스들에필요한멤버들을추가하거나편집하여응용프로그램을만들어나간다. 오른쪽그림은앞에서설명된문서클래스와뷰클래스의관계와이들클래스의기능을요약해보이고있다. 문서클래스는디스크에서읽어들이거나디스크에저장하는기능이필요할때는대체로 Serialize() 함수를사용하도록되어있다. 뷰클래스에서문서클래스의데이터에접근할경우에는잘정의된문서클래스의멤버함수를통해서접근하는것이바람직한방법이다. 뷰클래스는문서클래스의데이터를받아와서화면에보여주고사용자이벤트및시스템이벤트등을처리하기위한코드를포함한다. SDI 응용프로그램의형태 AppWizard가생성하는 SDI 응용프로그램의주실행창을나타내는객체는 CFrameWnd에서파생된클래스인스턴스이며, 기본외형은오른쪽그림과같이메뉴와툴바를포함한다. 문서내용을보여주는데사용되는부분은이창의클라이언트영역이며, 이는 CView에서파생된클래스의인스턴스이다. SDI 응용프로그램의경우에는뷰와문서가 1:1 대응관계에있으며, 문서는대체로디스크에저장되는파일에대응된다

3 5.2 SDI 응용프로그램예제 이절에서다룰예제응용프로그램은행단위의텍스트입력기능을갖춘 SDI 응용프로그램이다. 편집메뉴의 " 추가 (A) Ctrl+A" 메뉴항목을선택하면텍스트입력다이얼로그가나타나며, 입력된행은문서의마지막행으로추가된다. 뷰창에는텍스트행들앞에행번호를붙여표시하는데, 최대 5행까지만표시한다. 행추가기능은메뉴항목을통해서도사용할수있지만단축키 "Ctrl+A" 또는툴바의버튼을통해사용할수도있다. 이응용프로그램은문서의저장, 열기, 인쇄, 인쇄미리보기등의일반파일기능들도지원한다. 또상 / 하화살표키들을이용하여문서의앞쪽또는뒤쪽으로이동할수있다. 프로젝트생성단계 프로젝트이름으로는 "SDI" 를사용하기로한다. 응용프로그램유형은 < 단일문서 >, 프로젝트스타일은 <MFC 표준 > 을선택한다. 나머지대부분의옵션들은변경할필요는없다. 이예제에서는리소스언어로한국어를선택한다. [ 문서템플릿속성 ] 선택화면은문서를저장할때사용하는확장자와파일열기 / 저장다이얼로그나뷰창등에서문서유형을표시하는스트링들을지정하기위한것이다. 문서를취급하는응용프로그램들은흔히가장최근에사용된몇개의파일에대한목록을유지한다. [ 고급기능 ] 선택화면끝의스핀컨트롤은이응용프로그램에서유지할

4 목록의크기를지정하기위해사용되는데, 기본값은 4 이다. 생성된클래스들을보여주는화면은다음과같다

5 위의화면에따르면 AppWizard가생성하는클래스는 4개이며, 각기응용프로그램, 주실행창, 문서, 뷰등을나타내기위한것이다. 이들클래스는각각 CWinAppEx, CFrameWnd, CDocument, CView 등에서파생된클래스이며, 이름은각기 CxxxApp, CMainFrame, CxxxDoc, CxxxView와같이정해지는데, 여기서 xxx는프로젝트이름을나타낸다. 대화상자기반응용프로그램을선택하면 AppWizard는다이얼로그, 아이콘, 스트링테이블, 버전정보등의 4가지리소스를기본적으로생성한다. SDI/MDI 응용프로그램의경우에도이 4가지리소스가포함되며, 여기에메뉴, 단축키 (accelerator), 툴바등 3가지리소스가추가로생성된다. SDI/MDI 응용프로그램에서는메뉴제공이필수이며, 단축키와툴바도자주사용되는메뉴항목에대한접근을용이하게하기위한방법으로제공된다. CxxxDoc 클래스관련작업 도큐먼트클래스에서일반적으로코딩이필요한사항은문서데이터를메모리에서나타내기위해필요한자료구조의정의, 자료구조의초기화, 문서의저장 / 열기를처리하는 Serialize() 함수편집등이다. 도큐먼트클래스안의자료구조가 private 가시성을갖도록선언될경우에는뷰클래스에서문서클래스자료구조에접근할수있도록필요한인터페이스함수들을정의해주어야할것이지만, 이예제에서는자료구조를 public 가시성을갖도록선언하고있다. 이는물론객체지향프로그래밍의정보은닉원리에위배되며바람직하지않은것으로평가되지만, 편리성으로인해많이이용되고있다. 1. 여기에서는텍스트행들을저장하는방법으로크기가 100인 CString 배열을사용한다. 따라서최대 100 행까지입력받을수있다. 또실제입력된행의수를표시하기위한정수형변수가필요하다. 따라서다음과같은변수들을 public 가시성을갖도록선언한다. CString int m_strlines[100]; m_nlines; 2. CxxxDoc::OnNewDocument() 함수를편집하여초기화작업을표시한다. 이함수는문서초기화를담당하는데, 프로그램이시작될때와새파일메뉴항목이선택될때호출되어실행된다. 여기에서는현재입력된텍스트가없음을나타내기위해아래문장을포함시킨다

6 m_nlines = 0; 3. CxxxDoc::Serialize(CArchive &ar) 함수에파일저장및열기를위한코드를아래와같이만들어넣는다. 이함수는 CArchive 객체참조를파라미터로받는데, CArchive는파일에대한입출력을 << 연산자와 >> 연산자를사용하여쉽게표현할수있게해주기위한클래스이다. CArchive 객체는파일 (CFile) 객체에연계되어있으며, 현재저장용으로사용될것인지열기용으로사용될것인지에대한정보를갖고있다. 이객체에 IsStoring() 또는 IsLoading() 함수를적용시켜용도를확인할수있다. CArchive 객체가나타내는파일은파일에대한열기, 저장, 다른이름으로저장등의메뉴항목의처리과정에서정해진다. if (ar.isstoring()) // 저장작업코드 ar << m_nlines; for (int i = 0; i < m_nlines; i++) ar << m_strlines[i]; else // 열기작업코드 ar >> m_nlines; for (int i = 0; i < m_nlines; i++) ar >> m_strlines[i]; 참고사항 : 직렬화 (serialization) 직렬화란프로그램안의객체를디스크파일과같은외부저장매체에출력하거나혹은매체로부터입력받는프로세스를말한다. C++ 프로그램안의객체의데이터부분을나타내는구조체안에는포인터만몇개들어있고, 실제데이터는포인터가가리키는별도의주소에들어있을수도있다. 따라서구조체자체가차지하는메모리부분에들어있는값을출력하는것은무의미할수도있으며, 나중에다시읽었을때의미있는데이터가되기위한출력방법은단순하지않을수도있다. 프로그램안의객체가실제로나타내는데이터는포인터들에의해연결된 2차원적인구조이기쉬우며, 이데이터를의미있게정리하여출력한결과는일차원적인바이트열이다. 직렬화라는단어는객체출력의바로이러한점을잘표현하고있다. 직렬화에의해저장된데이터를다시읽어들여객체를구성하는것은직렬화의반대과정이며, 이를역직렬화 (de-serialization) 라고한다. CxxxView 클래스관련작업 뷰클래스에서도멤버변수의선언및초기화가필요할것이다. 초기화는생성자함수와 OnInitialUpdate() 함수등에서이루어질수있는데, OnInitialUpdate() 함수를이용할경우에는

7 뷰클래스에대해가상함수추가절차가필요하다. 뷰클래스에서가장본질적인기능이라면문서의내용을사용자에게보여주는것이며, 이를위해도큐먼트객체에접근할필요가있다. 뷰클래스안에는연계되어있는도큐먼트객체에대한포인터를리턴해주는 GetDocument() 라는함수가정의되어있으며, 이러한경우에이용된다. 문서내용을화면에표시하는코드는흔히뷰클래스의멤버함수 OnDraw() 안에들어간다. 창의생성시, 또는창의가려졌던부분이다시전면에나타날때, WM_PAINT 메시지가발생하며이메시지는 CWnd::OnPaint() 라는함수에의해처리된다. 이함수는많은경우스스로이작업을처리하기보다뷰클래스의 OnDraw() 함수를호출하여화면표시작업을맡긴다. OnPaint() 함수가 OnDraw() 함수를사용하는이유는인쇄나인쇄미리보기등의메뉴항목을처리하는 OnPrint() 함수가동일한작업을필요로하기때문에공통적인코드를 OnDraw() 함수로만들어두고 OnPaint() 함수와 OnPrint() 함수등에서호출하여사용할수있도록하기위함이다, OnDraw() 함수는 CDC* 타입의파라미터를취하는데, 이파라미터는페인트가필요한화면영역이나프린터를나타내는 DC 객체를가리키는포인터이다. 뷰클래스에서는또한사용자의문서편집작업이나문서안에서의위치이동등의상호작용을처리하기위한메시지처리기함수들을만들어주어야한다. 이상의작업들을하나씩처리해보자. 1. 문서의여러텍스트행중현재어느부분을화면에보여줄지를나타내기위해화면에나타나는첫번째행번호를표시하는정수형멤버변수 m_npos 를둔다. 또예제프로그램에서는화면에최대다섯행까지의텍스트만을보여주며, 이뷰의크기는변경되지는않는다. 그러나추후의확장성을위해뷰의크기를나타내는정수형변수 m_nvusz를둔다. 이변수들을 private 가시성을갖도록다음과같이선언한다. int m_npos; // 화면상첫행의인덱스, 0 <= m_npos < m_nlines ( 도큐먼트크기 ) int m_nvusz; // 뷰의높이 ( 값은 5로초기화한다 ) 2. 생성자 CxxxView() 안에서 m_nvusz 를 5 로초기화한다. m_nvusz = 5; 3. 클래스마법사를불러 [ 가상함수 ] 탭에서가상함수추가절차를사용하여뷰클래스에 CxxxView::OnInitialUpdate() 함수를추가하고, 그안에서 m_npos를 0으로초기화한다. m_npos = 0; 4. 뷰의내용을그려내기위해호출되는 CxxxView::OnDraw() 함수는아래와같은모양으로만들어져있다. 이함수는먼저 GetDocument() 함수를호출하여이뷰에연계되어있는문서객체를가리키는포인터를받아온다. 받아온포인터의유효성을점검하기위해

8 ASSERT_VALID 마크로를사용한다. void CSDIView::OnDraw(CDC* pdc) CSDIDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); if (!pdoc) return; // TODO: 여기에원시데이터에대한그리기코드를추가합니다. 출력대상텍스트행의인덱스는 m_npos에서시작하여 m_npos + (m_nvusz - 1) 까지이다. 그러나이인덱스범위가도큐먼트텍스트마지막행을지나칠경우도큐먼트텍스트마지막행까지만출력한다. 각행의앞에는 행인덱스 : 를덧붙여문서상에서의행위치를표시한다. CString::Format() 함수는 C 표준함수 sprintf() 와유사한방식으로동작하여출력결과가스트링객체의값이된다. CDC::TextOut() 함수에서각행출력위치는 (10, 10), (10, 30), (10, 50),... 등과같이정한다. OnDraw() 함수의 // TODO: 아래에들어가는코드는다음과같다. for (int i = m_npos; i < m_npos + m_nvusz && i < pdoc->m_nlines; i++) CString str; str.format(_t("%d : "), i); pdc->textout(10, *(i - m_npos), str + pdoc->m_strlines[i]); 텍스트입력다이얼로그의추가 [ 편집 ] 메뉴의 [ 리소스추가 ] 메뉴항목을선택한다음리소스형식으로는 Dialog를선택하고 < 새로만들기 > 버튼을누른다. 다이얼로그안에는 < 확인 > 버튼, < 취소 > 버튼, Static text, Edit Box (m_strline 변수 ) 등을둔다. 버튼들은다이얼로그안에기본으로포함되어있는것을지우지않고남겨두는방법으로포함시킨다. 이점은중요한데, 이는이버튼들에연결되어있는 CDialog::OnOK() 함수와 CDialog::OnCancel() 함수를이용할필요가있기때문이다. 만일이버튼들을새로추가하여캡션들을 " 확인 ", " 취소 " 등으로만들어주었다면여기에메시지처리기함수들을만들고그안에서 OnOK() 와

9 OnCancel() 함수를호출해주어야한다. 이러한복잡한일을피하기위해서는원래의버튼들을살려두어야한다. 설계된다이얼로그리소스들은대체로프로그램에서 modal 다이얼로그로사용된다. 이응용프로그램의경우에는 " 추가 (A) Ctrl+A" 메뉴항목을선택하게되면, 이메뉴항목의처리기함수안에서위의다이얼로그를생성하여화면에나타나게만들것이다. 이를위해서는다이얼로그객체를생성하여여기에 CDialog::DoModal() 함수를호출하여야하는데, 객체의생성을위해서는위의다이얼로그를나타내는클래스가필요하다. ( 참고 : modeless 다이얼로그의경우에는 DoModal() 함수대신 Create() 함수가사용되며, 추가로고려해야할사항들이많다.) 다이얼로그리소스가활성화되어있는상태에서, 즉, 다이얼로그편집화면상태에서팝업메뉴를불러 [ 클래스추가 ] 메뉴항목을선택하면아래그림과같은클래스추가마법사가나타난다. 이때클래스이름으로 CInputDialog를입력하면, 이클래스의정의및구현을위한파일이름으로 InputDialog.h, InputDialog.cpp 등이정해진다. 대화상자 ID는위에서만든다이얼로그 ID이다. 행추가메뉴항목 1. 메뉴리소스를편집하여행추가를위한메뉴항목을포함시킨다. SDI 응용프로그램에서는이미메뉴리소스가포함되어있어필요한메뉴나메뉴항목을

10 쉽게추가할수있다. 먼저프로젝트워크스페이스다이얼로그에서리소스뷰탭을클릭한다. 메뉴리소스왼쪽의 아이콘을클릭하여메뉴리소스를펼치면, 주실행창을위한메뉴리소스가나타난다. ( 레이블 : IDR_MAINFRAME) 위의 IDR_MAINFRAME 메뉴리소스를더블클릭하여메뉴를펼친다음 " 편집 (E)" 메뉴끝에분리선을추가한다음행추가를위한메뉴항목 " 추가 (A) Ctrl+A" 을추가한다. 이메뉴항목의 ID는다른메뉴항목 ID들과형식을맞추기위해 ID_EDIT_APPEND로정한다. 메뉴항목속성중 Prompt 속성은메뉴항목위에마우스커서를위치시켰을때주실행창의상태표시줄에나타날메뉴항목에대한간단한설명이다. Prompt 속성값끝의 n 이후부분은툴팁 (tooltip) 이다. 2. ID_EDIT_APPEND 메뉴항목을위한처리기함수 OnEditAppend() 를뷰클래스, 즉, CSDIView 클래스안에추가한다. 이를위해리소스뷰에서 [ 추가 ] 메뉴항목위에팝업메뉴를부른다음 [ 이벤트처리기 ] 메뉴항목을선택하면아래화면과같은 [ 이벤트처리기마법사 ] 화면이나타난다. ( 클래스마법사를통해이벤트처리기를생성할수도있다.) 아래화면에서 < 메시지형식 > 에는 COMMAND, < 클래스목록 > 에는뷰클래스를선택한다. 실제로메뉴항목처리기함수는아무클래스에나만들어넣을수있다, 그러나텍스트행추가와같은문서편집작업은그결과가뷰에도반영되어야하며또문서에도반영되어야한다. 뷰와문서데이터모두에가장손쉽게접근할수있는곳이뷰클래스이며, 따라서문서편집관련처리기함수는뷰클래스안에정의하는것이바람직하다

11 위의화면에서 < 추가및편집 > 버튼을누른후아래코드를만들어넣는다. #include "InputDialog.h" void CSDIView::OnEditAppend() CInputDialog idlg; if (idlg.domodal() == IDOK) CSDIDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); pdoc->m_strlines[pdoc->m_nlines] = idlg.m_strline; pdoc->m_nlines++; pdoc->setmodifiedflag(true); m_npos = pdoc->m_nlines - m_nvusz; if (m_npos < 0) m_npos = 0; Invalidate();

12 OnEditAppend() 함수안에서먼저할일은텍스트행을받아들일다이얼로그박스를띄우는것이며, 이를위해 CInputDialog 객체 idlg를생성한다음이객체에대해 DoModal() 함수를호출한다. 텍스트행의추가는다이얼로그박스에서 OK 버튼을클릭하여닫아줄경우에만이루어져야하는데, 이는 DoModal() 함수의리턴값이 IDOK임을확인하면된다. 입력된텍스트는문서의끝에추가되어야하며, 이를위해먼저문서객체를가리키는포인터를받아와서 pdoc에저장한다. 문서에텍스트행을추가한다음 CDocument::SetModifiedFlag() 함수를호출하는데, 이는문서에변경이있었음을표시하는플래그를설정하기위한것이다. 나중에파일을저장하지않고프로그램을종료하려고하면, 문서에변경이있었음을알리고현재문서내용을저장할것인지묻게된다. 추가된텍스트를뷰에반영하는방법은여러가지가있으나이미만들어져있는 OnDraw() 함수를이용하는것이가장간단한방법이다. CWnd::Invalidate() 함수는클라이언트영역을대상으로 OnDraw() 함수를호출하는결과를초래하게되며, 이과정에서 OnDraw() 함수에전달될 DC 객체도적절히준비된다. 여기에서는먼저텍스트상의출력위치를나타내는 m_npos를적절히설정한다음 Invalidate() 함수를호출한다. AppWizard는응용프로그램유형에따라필요한여러클래스들을만들고이들을사용하는곳에클래스를정의하는헤더파일에대한 #include 명령들을적절하게포함시켜준다. 그러나 CInputDialog는 AppWizard가만든클래스가아니므로이클래스를정의하는헤더파일에대한 #include 명령을넣는것은프로그래머의책임이다. 이예제의경우이명령은 SDIView.h의임의의위치, SDIView.cpp에서 OnEditAppend() 함수가정의되기전의임의의위치에들어가면된다. 행추가메뉴항목을위한단축키 (accelerator) 설정 메뉴항목을사용하기위해서는메뉴를먼저펼친다음원하는메뉴항목을클릭해야하는데, 때로 Ctrl+F와같이특별한키조합을메뉴항목에연계시켜두고이키조합을사용하는것이효율적일수도있다. 이러한키조합을단축키라고부르며, 자주사용되는메뉴항목들에는대개단축키들이설정되어있는경우가많다. 단축키는 Accelerator 리소스를통해설정된다. 아래그림과같이 Accelerator 리소스맨끝에는새로운단축키를설정할수있도록비어있는행이주어져있다. 이행을클릭한후 [ 속성 ] 창에서 ID 속성과동작속성들을설정한다

13 동작속성들은단축키로사용될키조합을표시하는데, 키조합표시방법을모를경우에는선택된단축키리소스행에대해팝업메뉴를부른후 [ 다음입력된키 ] 메뉴항목을선택한다. 옆의그림과같은화면이나타날텐데, 이때단축키로사용될키조합을누르면동작속성들에적절한값이들어간다. 단축키가메뉴항목과동일한작업을수행하도록만들기위해필요한것은단축키를위한 ID와메뉴항목의 ID를일치시켜주는것이며, 이경우단축키를위한별도의처리기함수를만들필요는없다. 앞에서메뉴항목의캡션을 " 추가 (A) Ctrl+A" 와같이지정하였었는데, 캡션에포함된 Ctrl+A는사용자에게단축키를알려주는설명일뿐기능적의미는전혀없다. Ctrl+A가실제로이메뉴항목을위한단축키로작용하기위해서는지금기술한바와같이단축키리소스에서필요한설정을거쳐야한다. 행추가메뉴항목을위한툴바 (Toolbar) 버튼설정 특히자주사용되는메뉴항목들은대개메뉴아래에위치한툴바 (Toolbar) 에버튼으로등록되어있어메뉴에서보다쉽게이용할수있도록만들어져있다. 툴바버튼은툴바리소스를통해설정된다. 아래그림과같이 Toolbar 리소스맨끝에는새로운버튼을설정할수있도록비어있는버튼이주어져있다. 이버튼을편집할수있도록이미지편집기가제공되며, 여기에서 Visual Studio 하단툴바의그리기도구들과화면오른쪽색상선택창을사용하여버튼이미지를그린다. 또속성창에서해당버튼의 ID를메뉴항목의 ID와일치시켜주는것만으로메뉴항목기능과의연계가이루어진다

14 화살표키 (UP) 와 (DOWN) 의기능설정 화살표키들은단축키로서기능한다. 따라서 Accelerator 리소스를통해설정할수있다. 이키들에대한키값은 VK_UP과 VK_DOWN이다. 이키들이갖는기능은메뉴항목에는없으며, 따라서새로운 ID를설정해야하는데, 여기에서는각기 ID_ARROW_UP, ID_ARROW_DOWN 등으로정한다

15 이키들은뷰에서보여주는문서상의텍스트위치를한행위로또는한행아래로이동시키기위해사용된다. 이는 ID_ARROW_UP, ID_ARROW_DOWN 등의 ID들에대해각기 COMMAND 메시지처리기를만들어줌으로써해결될수있다. 이함수들도뷰클래스안에두는것이바람직하다. 이함수들을만들기위해서도이벤트처리기마법사또는클래스마법사를사용할수있다. void CSDIView::OnArrowDown() CSDIDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); (m_npos < pdoc->m_nlines - 1)? m_npos++ : 0; Invalidate(); void CSDIView::OnArrowUp() (m_npos > 0)? m_npos-- : 0; Invalidate(); 연습문제 본문예제에관련된다음질문들에답하라. 1. CSDIDoc 클래스에서문서데이터를표현하기위해사용된 m_strlines 배열과 m_nlines 등의가시성을 private로선언하고이에따라 CSDIDoc 클래스와 CSDIView 클래스를고쳐라. ( 단, friend 메커니즘은사용하지않는다.) 2. 이장에서는텍스트행들의저장을위해고정크기의스트링배열을사용하고있다. 스트링배열대신 char 배열안에텍스트행들을저장하는방식으로프로그램을재작성하라. 이러한변경이원래의프로그램에대해이루어지는경우와위의 1번문제에서수정된프로그램에대해이루어지는경우를비교하여논하라. 3. CStringArray는스트링들을저장하는배열을나타내는 MFC 클래스이며, 저장될스트링들이많아지면자바의 Vector 클래스처럼크기가자동적으로늘어난다. char 배열대신 CStringArray 객체를사용하여앞의 2번문제에대해답하라

16 4. CSDIDoc 클래스에서 m_nlines의초기화를생성자에서수행하지않고 OnNewDocument() 함수안에서수행하고있다. 이초기화를생성자에서수행할경우어떤문제점이생길지조사하고그이유에대해논하라. 5. CSDIView 클래스의경우초기화문장들을생성자안에서처리하는경우와 OnInitialUpdate() 함수안에서처리하는경우사이에실행상가시적차이를관찰할수있는지에대해실험하고논하라. 6. 이프로그램의뷰는화면이가려졌다나타날때에도원래의내용을유지한다. 그이유는무엇인가? 7. 메뉴항목과 accelerator 가동일한기능을갖도록만드는방법을설명하라. 8. 다이얼로그기반의응용프로그램에는포함되지않지만 SDI/MDI 응용프로그램에는자동으로포함되는리소스 3 가지는무엇인가? 9. SDI 응용프로그램을작성할때, 프로그래머가도큐먼트클래스와뷰클래스에포함시키는요소들을기술하라. 프로그램소스 ( 일부 ) InputDialog.h InputDialog.cpp SDIDoc.h SDIDoc.cpp SDIView.h SDIView.cpp ================================================================================= // InputDialog.h : header file #pragma once // CInputDialog 대화상자입니다. class CInputDialog : public CDialogEx DECLARE_DYNAMIC(CInputDialog) public:

17 CInputDialog(CWnd* pparent = NULL); // 표준생성자입니다. virtual ~CInputDialog(); // 대화상자데이터입니다. enum IDD = IDD_DIALOG1 ; protected: virtual void DoDataExchange(CDataExchange* pdx); // DDX/DDV 지원입니다. public: ; DECLARE_MESSAGE_MAP() CString m_strline; ================================================================================= // InputDialog.cpp : 구현파일입니다. // #include "stdafx.h" #include "SDI.h" #include "InputDialog.h" #include "afxdialogex.h" // CInputDialog 대화상자입니다. IMPLEMENT_DYNAMIC(CInputDialog, CDialogEx) CInputDialog::CInputDialog(CWnd* pparent /*=NULL*/) : CDialogEx(CInputDialog::IDD, pparent), m_strline(_t("")) CInputDialog::~CInputDialog() void CInputDialog::DoDataExchange(CDataExchange* pdx) CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_strline); BEGIN_MESSAGE_MAP(CInputDialog, CDialogEx) END_MESSAGE_MAP() // CInputDialog 메시지처리기입니다

18 ================================================================================= // SDIDoc.h : CSDIDoc 클래스의인터페이스 // #pragma once class CSDIDoc : public CDocument protected: // serialization에서만만들어집니다. CSDIDoc(); DECLARE_DYNCREATE(CSDIDoc) // 특성입니다. public: CString m_strlines[100]; int m_nlines; // 작업입니다. public: // 재정의입니다. public: virtual BOOL OnNewDocument(); virtual void Serialize(CArchive& ar); #ifdef SHARED_HANDLERS virtual void InitializeSearchContent(); virtual void OnDrawThumbnail(CDC& dc, LPRECT lprcbounds); #endif // SHARED_HANDLERS // 구현입니다. public: virtual ~CSDIDoc(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // 생성된메시지맵함수 protected: DECLARE_MESSAGE_MAP()

19 #ifdef SHARED_HANDLERS // 검색처리기에대한검색콘텐츠를설정하는도우미함수 void SetSearchContent(const CString& value); #endif // SHARED_HANDLERS ; ================================================================================= // SDIDoc.cpp : CSDIDoc 클래스의구현 // #include "stdafx.h" // SHARED_HANDLERS는미리보기, 축소판그림및검색필터처리기를구현하는 // ATL 프로젝트에서정의할수있으며해당프로젝트와문서코드를공유하도록해줍니다. #ifndef SHARED_HANDLERS #include "SDI.h" #endif #include "SDIDoc.h" #include <propkey.h> #ifdef _DEBUG #define new DEBUG_NEW #endif // CSDIDoc IMPLEMENT_DYNCREATE(CSDIDoc, CDocument) BEGIN_MESSAGE_MAP(CSDIDoc, CDocument) END_MESSAGE_MAP() // CSDIDoc 생성 / 소멸 CSDIDoc::CSDIDoc() // TODO: 여기에일회성생성코드를추가합니다. CSDIDoc::~CSDIDoc()

20 BOOL CSDIDoc::OnNewDocument() if (!CDocument::OnNewDocument()) return FALSE; // TODO: 여기에재초기화코드를추가합니다. // SDI 문서는이문서를다시사용합니다. m_nlines = 0; return TRUE; // CSDIDoc serialization void CSDIDoc::Serialize(CArchive& ar) if (ar.isstoring()) // 저장작업코드 ar << m_nlines; for (int i = 0; i < m_nlines; i++) ar << m_strlines[i]; else // 열기작업코드 ar >> m_nlines; for (int i = 0; i < m_nlines; i++) ar >> m_strlines[i]; #ifdef SHARED_HANDLERS // 축소판그림을지원합니다. void CSDIDoc::OnDrawThumbnail(CDC& dc, LPRECT lprcbounds) // 문서의데이터를그리려면이코드를수정하십시오. dc.fillsolidrect(lprcbounds, RGB(255, 255, 255)); CString strtext = _T("TODO: implement thumbnail drawing here"); LOGFONT lf; CFont* pdefaultguifont = CFont::FromHandle((HFONT) GetStockObject(DEFAULT_GUI_FONT)); pdefaultguifont->getlogfont(&lf); lf.lfheight = 36; CFont fontdraw;

21 fontdraw.createfontindirect(&lf); CFont* poldfont = dc.selectobject(&fontdraw); dc.drawtext(strtext, lprcbounds, DT_CENTER DT_WORDBREAK); dc.selectobject(poldfont); // 검색처리기를지원합니다. void CSDIDoc::InitializeSearchContent() CString strsearchcontent; // 문서의데이터에서검색콘텐츠를설정합니다. // 콘텐츠부분은 ";" 로구분되어야합니다. // 예 : strsearchcontent = _T("point;rectangle;circle;ole object;"); SetSearchContent(strSearchContent); void CSDIDoc::SetSearchContent(const CString& value) if (value.isempty()) RemoveChunk(PKEY_Search_Contents.fmtid, PKEY_Search_Contents.pid); else CMFCFilterChunkValueImpl *pchunk = NULL; ATLTRY(pChunk = new CMFCFilterChunkValueImpl); if (pchunk!= NULL) pchunk->settextvalue(pkey_search_contents, value, CHUNK_TEXT); SetChunkValue(pChunk); #endif // SHARED_HANDLERS // CSDIDoc 진단 #ifdef _DEBUG void CSDIDoc::AssertValid() const CDocument::AssertValid();

22 void CSDIDoc::Dump(CDumpContext& dc) const CDocument::Dump(dc); #endif //_DEBUG // CSDIDoc 명령 ================================================================================= // SDIView.h : CSDIView 클래스의인터페이스 // #pragma once class CSDIView : public CView protected: // serialization에서만만들어집니다. CSDIView(); DECLARE_DYNCREATE(CSDIView) // 특성입니다. public: CSDIDoc* GetDocument() const; // 작업입니다. public: // 재정의입니다. public: virtual void OnDraw(CDC* pdc); // 이뷰를그리기위해재정의되었습니다. virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual BOOL OnPreparePrinting(CPrintInfo* pinfo); virtual void OnBeginPrinting(CDC* pdc, CPrintInfo* pinfo); virtual void OnEndPrinting(CDC* pdc, CPrintInfo* pinfo); // 구현입니다. public: virtual ~CSDIView(); #ifdef _DEBUG

23 #endif virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; protected: // 생성된메시지맵함수 protected: afx_msg void OnFilePrintPreview(); afx_msg void OnRButtonUp(UINT nflags, CPoint point); afx_msg void OnContextMenu(CWnd* pwnd, CPoint point); DECLARE_MESSAGE_MAP() private: int m_npos; int m_nvusz; public: virtual void OnInitialUpdate(); afx_msg void OnEditAppend(); afx_msg void OnArrowUp(); afx_msg void OnArrowDown(); ; #ifndef _DEBUG // SDIView.cpp의디버그버전 inline CSDIDoc* CSDIView::GetDocument() const return reinterpret_cast<csdidoc*>(m_pdocument); #endif ================================================================================= // SDIView.cpp : CSDIView 클래스의구현 // #include "stdafx.h" // SHARED_HANDLERS는미리보기, 축소판그림및검색필터처리기를구현하는 // ATL 프로젝트에서정의할수있으며해당프로젝트와문서코드를공유하도록해줍니다. #ifndef SHARED_HANDLERS #include "SDI.h" #endif #include "SDIDoc.h" #include "SDIView.h" #ifdef _DEBUG #define new DEBUG_NEW

24 #endif // CSDIView IMPLEMENT_DYNCREATE(CSDIView, CView) BEGIN_MESSAGE_MAP(CSDIView, CView) // 표준인쇄명령입니다. ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CSDIView::OnFilePrintPreview) ON_WM_CONTEXTMENU() ON_WM_RBUTTONUP() ON_COMMAND(ID_EDIT_APPEND, &CSDIView::OnEditAppend) ON_COMMAND(ID_ARROW_UP, &CSDIView::OnArrowUp) ON_COMMAND(ID_ARROW_DOWN, &CSDIView::OnArrowDown) END_MESSAGE_MAP() // CSDIView 생성 / 소멸 CSDIView::CSDIView() : m_npos(0) // TODO: 여기에생성코드를추가합니다. m_nvusz = 5; CSDIView::~CSDIView() BOOL CSDIView::PreCreateWindow(CREATESTRUCT& cs) // TODO: CREATESTRUCT cs를수정하여여기에서 // Window 클래스또는스타일을수정합니다. return CView::PreCreateWindow(cs); // CSDIView 그리기 void CSDIView::OnDraw(CDC *pdc) CSDIDoc* pdoc = GetDocument();

25 ASSERT_VALID(pDoc); if (!pdoc) return; // TODO: 여기에원시데이터에대한그리기코드를추가합니다. for (int i = m_npos; i < m_npos + m_nvusz && i < pdoc->m_nlines; i++) CString str; str.format(_t("%d : "), i); pdc->textout(10, *(i - m_npos), str + pdoc->m_strlines[i]); // CSDIView 인쇄 void CSDIView::OnFilePrintPreview() #ifndef SHARED_HANDLERS AFXPrintPreview(this); #endif BOOL CSDIView::OnPreparePrinting(CPrintInfo* pinfo) // 기본적인준비 return DoPreparePrinting(pInfo); void CSDIView::OnBeginPrinting(CDC* /*pdc*/, CPrintInfo* /*pinfo*/) // TODO: 인쇄하기전에추가초기화작업을추가합니다. void CSDIView::OnEndPrinting(CDC* /*pdc*/, CPrintInfo* /*pinfo*/) // TODO: 인쇄후정리작업을추가합니다. void CSDIView::OnRButtonUp(UINT /* nflags */, CPoint point) ClientToScreen(&point); OnContextMenu(this, point); void CSDIView::OnContextMenu(CWnd* /* pwnd */, CPoint point)

26 #ifndef SHARED_HANDLERS theapp.getcontextmenumanager()->showpopupmenu(idr_popup_edit, point.x, point.y, this, TRUE); #endif // CSDIView 진단 #ifdef _DEBUG void CSDIView::AssertValid() const CView::AssertValid(); void CSDIView::Dump(CDumpContext& dc) const CView::Dump(dc); CSDIDoc* CSDIView::GetDocument() const // 디버그되지않은버전은인라인으로지정됩니다. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSDIDoc))); return (CSDIDoc*)m_pDocument; #endif //_DEBUG // CSDIView 메시지처리기 void CSDIView::OnInitialUpdate() CView::OnInitialUpdate(); // TODO: 여기에특수화된코드를추가및 / 또는기본클래스를호출합니다. m_npos = 0; #include "InputDialog.h" void CSDIView::OnEditAppend() CInputDialog idlg; if (idlg.domodal() == IDOK) CSDIDoc* pdoc = GetDocument();

27 ASSERT_VALID(pDoc); pdoc->m_strlines[pdoc->m_nlines] = idlg.m_strline; pdoc->m_nlines++; pdoc->setmodifiedflag(true); m_npos = pdoc->m_nlines - m_nvusz; if (m_npos < 0) m_npos = 0; Invalidate(); void CSDIView::OnArrowUp() (m_npos > 0)? m_npos-- : 0; Invalidate(); void CSDIView::OnArrowDown() CSDIDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); (m_npos < pdoc->m_nlines - 1)? m_npos++ : 0; Invalidate();

슬라이드 1

슬라이드 1 13장직렬화 김성영교수 금오공과대학교 컴퓨터공학부 도큐먼트 / 뷰구조 (1) 도큐먼트와뷰 디스크에저장된파일데이터를읽는경우 도큐먼트객체 뷰객체 파일 사용자 읽기 화면표시 2 도큐먼트 / 뷰구조 (2) 도큐먼트와뷰 사용자가데이터를입력하는경우 도큐먼트객체 뷰객체 파일 사용자 저장 입력 3 도큐먼트 / 뷰구조 (3) 도큐먼트와뷰 입력된데이터를디스크파일에저장하는경우

More information

윈도우 프로그래밍의 개념

윈도우 프로그래밍의 개념 제 10 장다양한뷰클래스 10.1 도큐먼트 10.2 파일입출력 10.3 다양한뷰클래스 실습 10-1 Formview를이용한문자를출력하고파일입출력 10.4 분할윈도우 실습 10-2 정적분할윈도우를이용한학생정보프로그램 10.5 다중뷰 실습 10-3 다중뷰만들기 CDocument 클래스 데이터를관리하는클래스 OnNewDocument() 함수 새로운도큐먼트를만드는기능

More information

Microsoft PowerPoint - hci2-lecture7.ppt

Microsoft PowerPoint - hci2-lecture7.ppt Overview 파일입출력 CFile 클래스를이용한파일입출력기법 도큐먼트 / 뷰구조이해 CArchive 클래스를이용한직렬화기법 HCI Programming 2 (321190) 2007 년가을학기 11/5/2007 박경신 2 파일입출력방법 일반파일입출력 CFile ( 파생 ) 클래스 Read(), Write() 등의함수이용 직렬화 (serialization)

More information

<4D F736F F F696E74202D20C1A C0E520B5B5C5A5B8D5C6AE20C6C4C0CF20C0D4C3E2B7C220B9D720B4D9BEE7C7D120BAE420C5ACB7A1BDBA2E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A C0E520B5B5C5A5B8D5C6AE20C6C4C0CF20C0D4C3E2B7C220B9D720B4D9BEE7C7D120BAE420C5ACB7A1BDBA2E BC8A3C8AF20B8F0B5E55D> 제 10 장다양한뷰클래스 10.1 도큐먼트 10.2 파일입출력 10.3 다양한뷰클래스 실습 10-1 Formview를이용한문자를출력하고파일입출력 10.4 분할윈도우 실습 10-2 정적분할윈도우를이용한학생정보프로그램 10.5 다중뷰 실습 10-3 다중뷰만들기 도큐먼트 CDocument 클래스 데이터를관리하는클래스 OnNewDocument() 함수 새로운도큐먼트를만드는기능

More information

Programming hwp

Programming hwp 4 장대화상자기반응용프로그램 3장에서는윈도우응용프로그램작성을위한 MFC 프로그래밍에텍스트편집기만을사용하였으나, 이장에서부터는응용프로그램마법사 (AppWizard), 리소스편집기, 클래스마법사 (Class Wizard) 등의도구를활용한다. 이러한도구들의이용으로전체프로그램소스에서프로그래머가직접코딩하는분량을크게줄일수있어빠른시간안에응용프로그램의개발이가능해진다. 또한

More information

Programming hwp

Programming hwp 6 장 MDI 응용프로그램 MDI 응용프로그램의형태 응용프로그램마법사 (AppWizard) 가생성하는 MDI 응용프로그램의주실행창을나타내는객체는 CFrameWnd에서파생된클래스인스턴스이며, 기본외형은아래그림과같이메뉴와툴바를포함한다. 문서내용을보여주는뷰들은이창의클라이언트영역안에자식창으로만들어지는윈도우들을통해표시된다. 주실행창의클라이언트영역안에는여러개의자식창이만들어질수있으며,

More information

untitled

untitled MFC MFC MFC AppWizard 來 MFC MFC 類 了 類 Document/View MFC Visual C++ AppWizard MFC 不 力 亮 來 不 Document View 不 列 AppWizard View 類 CEditView 列 列 說 行 不 了 Document/View MFC Application Framework 靈 OLE Document

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이터베이스및설계 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2012.05.10. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이타베이스 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2013.05.15. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

Visual C++의 개요

Visual C++의 개요 2.1 MFC 의개요 2.2 MFC 프로그램의구조 2.3 Visual C++ 의시작실습 2-1 Application Wizard 익히기 2.4 SDI 템플릿 2.5 MDI 템플릿 2.6 MFC 애플리케이션아키텍처실습 2-2 간단한 MFC 프로젝트만들기 MFC 의개요 MFC 윈도우애플리케이션을생성하기위해만들어진 C++ 클래스라이브러리 애플리케이션프레임워크를제공

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 객체지향프로그래밍응용 Chap 4. 대화상자와컨트롤 (#1) 2013.09.27. 오병우 컴퓨터공학과금오공과대학교 Control 들을가진윈도우 Dialog 개요 사용자의입력을받기위한 Object 의집합 종류 프로그램수행도중사용자의입력이필요할때다이얼로그박스출력 다이얼로그박스는사용자로부터입력받은데이터를메인루틴에넘기고소멸 Modal Dialog Parent window

More information

그래픽 프로그래밍

그래픽 프로그래밍 제 13 장그래픽프로그래밍 13.1 베지어곡선 실습 13-1 알고리즘을통한베지어곡선그리기 실습 13-2 컨트롤포인트이동및베지어곡선 해상도설정하기 그래픽프로그래밍 베지어곡선 베지어곡선알고리즘은곡선을생성하는대표적이고기본이되는알고리즘이다. MFC 에서의베지어곡선함수 BOOL PolyBezier(const POINT* lppoints, int ncount); lppoints

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

5장 MFC기반 다지기

5장 MFC기반 다지기 5 장 MFC 기반다지기 김성영교수 금오공과대학교 컴퓨터공학부 들어가기 (1) pp.132 ~ 138 비주얼스튜디오에서 MFC 어플리케이션작성 참조 시스템메뉴 메뉴 최소 / 최대 / 닫기버튼 툴바 대화상자 클라이언트영역 (Client Area) 스크롤바 상태표시줄 2 들어가기 (2) 3 들어가기 (3) 4 들어가기 (4) 솔루션탐색기확인 WinMain() 함수가없다?

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770>

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770> 제목 : 미디어정보처리프로그래밍실습모음 일시 : 2002. 6. 15 작성자 : 성용철학번 : 한남대학교정보통신멀티미디어공학부 ( 전자정보통신전공 ) 미디어정보처리프로그래밍실습숙제설명 1.256 X 256 grayscale 의디스플레이프로그램 Resource View 의 menu item 에서 Display 밑에 Raw gray 라마든다음에그림과같이 ID 와

More information

Microsoft PowerPoint - hci2-lecture10.ppt

Microsoft PowerPoint - hci2-lecture10.ppt Overview 도큐먼트 / 뷰구조 HCI Programming 2 (321190) 2008 년가을학기 11/25/2008 박경신 도큐먼트 / 뷰구조 도큐먼트템플렛 (Document Template) SDI (Single Document Interface) 응용프로그램의기본구조 MDI (Multiple Document Interface) 응용프로그램의기본구조

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345]) 클래스의응용 클래스를자유자재로사용하자. 이장에서다룰내용 1 객체의치환 2 함수와클래스의상관관계 01_ 객체의치환 객체도변수와마찬가지로치환이가능하다. 기본예제 [7-1] 객체도일반변수와마찬가지로대입이가능하다. 기본예제 [7-2] 객체의치환시에는조심해야할점이있다. 복사생성자의필요성에대하여알아보자. [ 기본예제 7-1] 클래스의치환 01 #include

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어서가장중요한부분이라고도할수있기때문입니다. 1. 새로운메크로생성 새메크로만들기버튺을클릭하여파일을생성합니다. 2. 메크로저장 -

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현

More information

<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D> 09: 대화상자 학습목표 대화상자편집기의사용법을익힌다. 모드형대화상자와비모드형대화상자의차이점을이해하고작성방법을익힌다. 대화상자기반응용프로그램의원리를이해하고작성방법을익힌다. 공통대화상자를다루는방법을배운다. 개요 (1/2) 대화상자 다양한컨트롤을포함하고있는일종의윈도우 사용자로부터입력을받거나정보를출력 1 개요 (2/2) 대화상자종류 모드형대화상자 대화상자를닫지않으면응용프로그램이더이상진행할수없다.

More information

<4D F736F F F696E74202D203036C0E520BBE7BFEBC0DA20C0CEC5CDC6E4C0CCBDBA205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D203036C0E520BBE7BFEBC0DA20C0CEC5CDC6E4C0CCBDBA205BC8A3C8AF20B8F0B5E55D> 06: 사용자인터페이스 학습목표 메뉴명령을처리하고메뉴항목을적절하게갱신하는기법을익 힌다. 컨텍스트메뉴와시스템메뉴를다루는방법을익힌다. 툴바를생성하고사용하는방법을익힌다. 상태바를생성하고사용하는방법을익힌다. 메뉴용어 (1/6) 최상위메뉴 = 메뉴바 최상위메뉴 = 메뉴바 1 메뉴용어 (2/6) 메뉴항목 용어 의미 1 명령항목명령 (Command) 을수행하는메뉴항목.

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상 Android 용 Brother Image Viewer 설명서 버전 0 KOR 아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상표입니다. Android는

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 7 장클래스와객체 이번장에서학습할내용 객체지향이란? 객체 메시지 클래스 객체지향의장점 String 클래스 객체지향개념을완벽하게이해해야만객체지향설계의이점을활용할수있다. 실제세계는객체로이루어진다. 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 절차지향과객체지향 절차지향프로그래밍 (procedural programming): 문제를해결하는절차를중요하게생각하는방법

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

Microsoft Word - hci08-final-answer.doc

Microsoft Word - hci08-final-answer.doc 기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 다음문장의내용이맞으면 True, 틀리면 False를표시하시오.

More information

Programming hwp

Programming hwp 4.2 메뉴및컨트롤들의추가 이절에서다룰예제프로그램은덧셈 / 곱셈문제를제시하고답을검사해주는프로그램이다. 이프로그램을실행하면두개의한자리숫자들이무작위로생성되어 "Number 1" 과 "Number 2" 옆의에디트컨트롤에나타난다. Exec 메뉴안에는 Renew라는메뉴항목이있으며, 이메뉴항목을선택할때마다숫자들은무작위로변경된다. Exec 메뉴안의 Change Level

More information

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

Microsoft PowerPoint _파일입출력.ppt

Microsoft PowerPoint _파일입출력.ppt 8 장. 파일입출력 파일입출력연속화 (serialization) 아카이브 (archive) 객체 Paint4.dsw Paint5.dsw 레지스트리 (registry) 오목게임 순천향대학교정보기술공학부이상정 1 파일입출력 순천향대학교정보기술공학부이상정 2 파일입출력소개 파일입출력 프로그램에서만든정보를하드디스크의파일로저장하는방법 MFC 에서사용하는파일입출력방법인연속화

More information

어댑터뷰

어댑터뷰 04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결

More information

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

var answer = confirm( 확인이나취소를누르세요.); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write( 확인을눌렀습니다.); else { document.write( 취소를눌렀습니다.); 자바스크립트 (JavaScript) - HTML 은사용자에게인터페이스 (interface) 를제공하는언어 - 자바스크립트는서버로데이터를전송하지않고서할수있는데이터처리를수행한다. - 자바스크립트는 HTML 나 JSP 에서작성할수있고 ( 내부스크립트 ), 별도의파일로도작성이가능하다 ( 외 부스크립트 ). - 내부스크립트 - 외부스크립트

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 객체지향프로그래밍응용 Chap 4. 대화상자와컨트롤 (#2) 2012.10.08. 오병우 컴퓨터공학과금오공과대학교 Control 들을가진윈도우 Dialog 개요 사용자의입력을받기위한 Object 의집합 종류 프로그램수행도중사용자의입력이필요할때다이얼로그박스출력 다이얼로그박스는사용자로부터입력받은데이터를메인루틴에넘기고소멸 Modal Dialog Parent window

More information

윤성우의 열혈 TCP/IP 소켓 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

Comtrol ID 레이블 Hotkey Callback 함수 ⑴ Button, IDC_BTN_DEPT, &Department, OnBtnDepartment ⑵ Button, IDC_BTN_EMP, &Employee, OnBtnEmployee ⑶ Button, IDC_B

Comtrol ID 레이블 Hotkey Callback 함수 ⑴ Button, IDC_BTN_DEPT, &Department, OnBtnDepartment ⑵ Button, IDC_BTN_EMP, &Employee, OnBtnEmployee ⑶ Button, IDC_B adb.open(dsn) ;; DB 연결 (CompanyAccDB) adb.open(null, false, false, strdsn) ;; DB 연결 (DSN=CompanyAccDB) adb.executesql(strsql) ;; 결과가없는연산자 (Ins/Del/Upd) adb.close() ;; DB 연결끊음 CRecordset aqryset(&adb) ;;

More information

Microsoft PowerPoint _대화상자.ppt

Microsoft PowerPoint _대화상자.ppt 7 장. 대화상자 모달대화상자 (modal dialog box) DDX (Dialog Data Exchange) 모델리스대화상자 (modeless dialog box) 공통대화상자의사용 Paint3.dsw 순천향대학교정보기술공학부이상정 1 모달대화상자 (modal dialog box) 순천향대학교정보기술공학부이상정 2 대화상자의종류 모달대화상자 (modal

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

게임 기획서 표준양식 연구보고서

게임 기획서 표준양식 연구보고서 ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - Chapter 6.ppt 6.Static 멤버와 const 멤버 클래스와 const 클래스와 static 연결리스트프로그램예 Jong Hyuk Park 클래스와 const Jong Hyuk Park C 의 const (1) const double PI=3.14; PI=3.1415; // 컴파일오류 const int val; val=20; // 컴파일오류 3 C 의 const (1)

More information

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우. 소프트웨어매뉴얼 윈도우드라이버 Rev. 3.03 SLP-TX220 / TX223 SLP-TX420 / TX423 SLP-TX400 / TX403 SLP-DX220 / DX223 SLP-DX420 / DX423 SLP-DL410 / DL413 SLP-T400 / T403 SLP-T400R / T403R SLP-D220 / D223 SLP-D420 / D423

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

ISP and CodeVisionAVR C Compiler.hwp

ISP and CodeVisionAVR C Compiler.hwp USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력

More information

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a 6 장복사생성자 객체의생성과대입객체의값에의한전달복사생성자디폴트복사생성자복사생성자의재정의객체의값에의한반환임시객체 C++ 프로그래밍입문 1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y;

More information

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID android:title= 항목제목 /> </menu> public boolean oncreateoptionsmenu(menu menu) { getme 8 차시메뉴와대화상자 1 학습목표 안드로이드에서메뉴를작성하고사용하는방법을배운다. 안드로이드에서대화상자를만들고사용하는방법을배운다. 2 확인해볼까? 3 메뉴 1) 학습하기 [ 그림 8-1] XML 을이용한옵션메뉴설정방법 public boolean

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

Microsoft Word - hci07-final-answer.doc

Microsoft Word - hci07-final-answer.doc 기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 다음문장의내용이맞으면 True, 틀리면 False를표시하시오.

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

Microsoft PowerPoint - Chap12-OOP.ppt

Microsoft PowerPoint - Chap12-OOP.ppt 객체지향프로그래밍 (Object Oriented Programming) 12 장강사 강대기 차례 (Agenda) 멤버에대한동적메모리할당 암시적 / 명시적복사생성자 암시적 / 명시적오버로딩대입연산자 생성자에 new 사용하기 static 클래스멤버 객체에위치지정 new 사용하기 객체를지시하는포인터 StringBad 클래스 멤버에포인터사용 str static 멤버

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 객체지향프로그래밍응용 Chap 5. 사용자인터페이스 (#1) 2012.10.11. 오병우 컴퓨터공학과금오공과대학교 Contents Menu ToolBar DialogBar StatusBar MessageBox Mouse Cursor Program Icon CFormView Department of Computer Engineering 2 응용프로그램의처리제어

More information

제8장 자바 GUI 프로그래밍 II

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information

KNK_C_05_Pointers_Arrays_structures_summary_v02

KNK_C_05_Pointers_Arrays_structures_summary_v02 Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

adfasdfasfdasfasfadf

adfasdfasfdasfasfadf C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.

More information

C++ Programming

C++ Programming C++ Programming 상속과다형성 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 상속의이해 상속과다형성 다중상속 2 상속과다형성 객체의이해 상속클래스의객체의생성및소멸 상속의조건 상속과다형성 다중상속 3 상속의이해 상속 (Inheritance) 클래스에구현된모든특성 ( 멤버변수와멤버함수 )

More information

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 - 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 - ArrayAdapter ArrayAdapter adapter = new ArrayAdapter(this, android.r.layout.simple_list_item_1,

More information

Microsoft PowerPoint - hci2-lecture9.ppt

Microsoft PowerPoint - hci2-lecture9.ppt Overview 대화상자 대화상자, 대화상자템플렛, 대화상자편집기 모드형대화상자와비모드형대화상자의차이 대화상자기반응용프로그램 HCI Programming 2 (321190) 2007 년가을학기 11/19/2007 박경신 2 대화상자 대화상자 (Dialog Box) 다양한컨트롤을포함하고있는일종의윈도우 사용자로부터입력을받거나정보를출력 정적, 버튼, 편집등다양한컨트롤들을배치하고관리하는윈도우

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

Microsoft Word - src.doc

Microsoft Word - src.doc IPTV 서비스탐색및콘텐츠가이드 RI 시스템운용매뉴얼 목차 1. 서버설정방법... 5 1.1. 서비스탐색서버설정... 5 1.2. 컨텐츠가이드서버설정... 6 2. 서버운용방법... 7 2.1. 서비스탐색서버운용... 7 2.1.1. 서비스가이드서버실행... 7 2.1.2. 서비스가이드정보확인... 8 2.1.3. 서비스가이드정보추가... 9 2.1.4. 서비스가이드정보삭제...

More information

C++ Programming

C++ Programming C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 03 장 영상처리를위한 Visual C++ 디지털영상파일포맷 MFC AppWizard[exe] 를이용한 MFC 프로젝트작성 MFC 를이용한영상처리입. 출력프로그램작성 MFC 를이용한영상축소 MFC 를이용한영상확대 MFC 를이용한양자화영상처리 한빛미디어 ( 주 ) 학습목표 3 장. 영상처리를위한 Visual C++ 영상처리에사용되는 RAW 파일포맷을이해한다.

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

03_queue

03_queue Queue Data Structures and Algorithms 목차 큐의이해와 ADT 정의 큐의배열기반구현 큐의연결리스트기반구현 큐의활용 덱 (Deque) 의이해와구현 Data Structures and Algorithms 2 큐의이해와 ADT 정의 Data Structures and Algorithms 3 큐 (Stack) 의이해와 ADT 정의 큐는 LIFO(Last-in,

More information

Convenience Timetable Design

Convenience Timetable Design Convenience Timetable Design Team 4 2 Contents 1. Introduction 2. Decomposition description 3. Dependency description 4. Inter face description 5. Detailed design description 3 1. Introduction Purpose

More information

[제1강] 텍스트를 입력하세요

[제1강] 텍스트를  입력하세요 제 14 강 채팅프로젝트 1-1 Visual C++ 프로그래밍 컴퓨터과학과 김강현교수 제 14강의학습내용소켓 (Socket) 서버와클라이언트 CAsyncSocket 와 Csocket Listen, OnAccept, OnReceive 소켓 (Socket) 의개요 TCP/IP 프로토콜을이용하여네트워크프로그램을개설하기위핚인터페이스 젂선과젂구사이에는소켓이라는것이있다.

More information

Programming hwp

Programming hwp 4.3 그래픽프로그래밍 이절에서다룰예제응용프로그램은사각형이나타원을그리거나마우스이동위치를추적하여연결함으로써자유곡선을그리는등의그래픽작업을다루는프로그램이다. 어떤도형을그릴것인지는라디오버튼으로정한다. 타원을그릴때는매번타원모양, 테두리선의굵기와색상, 채우기패턴등을변경하는데, 이렇게변경된그래픽속성이다른도형을그릴때에도적용된다. 즉, 타원을그릴때는그래픽속성이매번변경되지만,

More information

歯Lecture2.PDF

歯Lecture2.PDF VISUAL C++/MFC Lecture 2? Update Visual C ++/MFC Graphic Library OpenGL? Frame OpenGL 3D Graphic library coding CLecture1View? OpenGL MFC coding Visual C++ Project Settings Link Tap Opengl32lib, Glu32lib,

More information

Visual Basic 반복문

Visual Basic 반복문 학습목표 반복문 For Next문, For Each Next문 Do Loop문, While End While문 구구단작성기로익히는반복문 2 5.1 반복문 5.2 구구단작성기로익히는반복문 3 반복문 주어진조건이만족하는동안또는주어진조건이만족할때까지일정구간의실행문을반복하기위해사용 For Next For Each Next Do Loop While Wend 4 For

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

윤성우의 열혈 TCP/IP 소켓 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍 예외처리 (Exception Handling) 박종혁교수 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr SeoulTech 2012-2 nd 프로그래밍입문 (1) 예외상황과예외처리의이해 3 예외상황을처리하지않았을때의결과 예외상황은프로그램실행중에발생하는문제의상황을의미한다. 예외상황의예나이를입력하라고했는데, 0보다작은값이입력됨.

More information

Chapter 1. MFC 시작하기

Chapter 1.  MFC 시작하기 Chapter 1. MFC 시작하기 1. MFC(Microsoft Foundation Class) 개요 2. Visual Studio 2015 프로그램설치하기 3. 마우스클릭프로그램작성 4. 그림그리기프로그램작성 5. 마우스좌표값구하기프로그램작성 1 1.1. MFC 개요 2 1.1.1. C++ 언어 객체지향언어 (Object-Oriented Programming,

More information

Slide 1

Slide 1 SeoulTech 2011-2 nd 프로그래밍입문 (2) Chapter 14. 상속 박종혁교수 (http://www.parkjonghyuk.net) Tel: 970-6702 Email: jhpark1@snut.ac.kr Learning Objectives 상속의기본 파생클래스와생성자 protected: 제한자 멤버함수의재정의 상속되지않는함수들 상속을이용한프로그래밍

More information

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요 . 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요소로써안드로이드시스템에서는 Activities, Services, Content Providers,

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드] Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨

More information

C++ Programming

C++ Programming C++ Programming 클래스와데이터추상화 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 객체지향프로그래밍 클래스와객체 2 객체지향프로그래밍 객체지향언어 (Object-Oriented Language) 프로그램을명령어의목록으로보는시각에서벗어나여러개의 독립된단위, 즉 객체 (Object) 들의모임으로파악

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 05 장 CSS3 선택자 1. 선택자개요 2. 기본선택자 3. 속성선택자 4. 후손선택자와자손선택자 5. 반응 / 상태 / 구조선택자 CSS 블록을생성할수있다. 선택자를이해하고적절한선택자를활용할수있다. 1 선택자개요 CSS3 선택자 특정한 HTML 태그를선택할때사용하는기능 선택한태그에원하는스타일이나스크립트적용가능 그림 5-1 CSS 블록 CSS 블록 style

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information