2010 학년도동계 계절수업시험문제지 출제위원 방송대김강현 학과명학번 - 성 명 감독관확인 ( 인 ) 교과목명 교과목코드 윈도우프로그래밍 3 7 출제범위 교재전체 ( 해당강의포함 ) 문항수 50 문항 [50 문항 2 점 =100 점 ] 유의사항 1. OMR 답안지및문제지인적사항표기는반드시컴퓨터용사인펜으로할것 2. 표기한답안은정정이일절불가하니답안표기에각별히유의할것 ( 백색수정액등을사용하여수정불가 ) 3. 답안지의 교과목명 및 교과목코드 의기입, 표기는아래의예시를참조할것 예시 ) 글쓰기 ( 교과목코드 01) 를신청했을경우답안지의 교과목명및교과목코드기입, 표기요령 기입 교과목명 글쓰기 교과목코드 기입표기 0 12345 1 ❶ 23456789 번호 1 2 3 4 번호 1 2 3 4 4. OMR 답안지에표기한신청교과목과문제지의일치여부를확인할것 윈도우프로그래밍 7-1
1. 다음윈도우프로그래밍의특징에대한설명중틀린것은? 1 GUI(Graphics User Interface) 환경이다. 2 멀티태스킹을지원한다. 3 일관된사용자인터페이스를제공한다. 4 입출력장치로부터종속되어있다. 2. 운영체제 (OS) 가애플리케이션에메시지를보낼때이를처리하는함수는? 1 WinMain 2 윈도우프로시저 (Procedure) 3 가상함수 4 InitInstance 3. 데스크탑에여러개의프로그램이실행중이라고가정할때순서대로나열한것은? 가. 마우스 / 키보드이벤트발생나. 메시지의형태로변환되어시스템큐에순서대로저장. 다. 운영체제가시스템메시지큐에메시지가있는지검사한다. 라. 운영체제가시스템메시지큐에서메시지를꺼내어이벤트가발생한프로그램의스레드메시지큐에전달한다. 마. 스레드메시지큐에서메시지를꺼내어운영체제에게적절한윈도우프로시저를호출하도록지시한후메시지를제거한다. 1 가-나-다-라-마 2 나-다-가-마-라 3 마-라-다-나-가 4 다-라-마-나-가 4. 콜백함수의정의에대해올바로서술한것은? 1 프로그램이호출하는운영체제내부의함수 2 사용자함수가호출하는운영체제내부의함수 3 운영체제가호출하는프로그램내부의함수 4 파라미터의순서를역으로전달하는함수 (5~17) 다음은윈도우를생성하고보여주는 Win32 API 프로그램이다물음에답하라. char classname[] = "HellowWin"; LRESULT CALLBACK HellowWndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) MSG msg; if (!InitApplication(hinstance)) if (!InitInstance(hinstance, ncmdshow)) while ( 가 ) (&msg, (HWND) NULL, 0, 0)) TranslateMessage (&msg); DispatchMessage (&msg); BOOL InitApplication(HINSTANCE hinstance) WNDCLASSEX wcx; wcx.cbsize = sizeof(wcx); wcx.style = CS_HREDRAW CS_VREDRAW; wcx.lpfnwndproc = ( 나 ) ; wcx.cbclsextra = 0; wcx.cbwndextra = 0; wcx.hinstance = ( 다 ); wcx.hicon = LoadIcon(NULL, IDI_APPLICATION); wcx.hcursor = LoadCursor(NULL, IDC_ARROW); wcx.hbrbackground = GetStockObject(WHITE_BRUSH); wcx.lpszmenuname = NULL; wcx.lpszclassname = classname; wcx.hiconsm = NULL; if(registerclassex(&wcx)==0) wcx.lpfnwndproc = ChildWndProc; wcx.lpszclassname = childclassname; return RegisterClassEx(&wcx); BOOL InitInstance(HINSTANCE hinstance, int ncmdshow) HWND hwnd; hwnd = ( 라 )( classname, "Hello Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, ---- ᄀ CW_USEDEFAULT, ---- ᄂ CW_USEDEFAULT, ---- ᄃ CW_USEDEFAULT, ---- ᄅ (HWND) NULL, (HMENU) NULL, hinstance, (LPVOID) NULL); if (!hwnd) ( 마 )(hwnd, SW_SHOW); return TRUE; 5. 빈칸가에적당한것은? 6. 빈칸나에적당한것은? 7. 빈칸다에적당한것은? 윈도우프로그래밍 7-2
8. 빈칸라에적당한것은? 9. 빈칸마에적당한것은? 2 RegisterClassEx 3 ShowWindow 4 GetMessage 10. 윈도우의높이를지정하는것은? 1 ᄀ 2 ᄂ 3 ᄃ 4 ᄅ 11. 이프로그램은확장자를 cpp로하고나서 C++ 에서컴파일을하면 GetStockObject(WHITE_BRUSH); 에서 type casting 에러가나게된다. 이를방지하기위해서함수앞에넣어주어야할것은? 1 (HBRUSH) 2 (HMENU) 3 (HWND) 4 (HDC) 12. 다음중 Load 된 EXE 나 DLL의위치를나타내는것은? 1 &msg 2 hwnd 4 ncmdshow (13~17) 계속해서 HellowWndProc 함수의일부이다. LRESULT CALLBACK HellowWndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) char text[] = "Hello Window"; switch(message) case ( 가 ) PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd,&ps); TextOut(hdc,100,100,text,strlen(text)); EndPaint(hWnd,&ps); case ( 나 ) HWND hchildwnd = CreateWindow( "button", " 학과 ", WS_CHILD WS_VISIBLE, case ( 다 ) if(loword(wparam) == ID_OK_BTN) MessageBox(hWnd," 컴퓨터과학과 "," 학과 ",MB_OK); case ( 라 ) PostQuitMessage(0); return DefWindowProc(hWnd, message, wparam, lparam); 13. 가, 나, 다, 라에차례대로들어갈메시지는? 1 가 WM_PAINT, 나 WM_CREATE, 다 WM_COMMAND, 2 가 WM_CREATE, 나 WM_PAINT, 다 WM_COMMAND, 3 가 WM_COMMAND, 나 WM_PAINT, 다 WM_CREATE, 4 가 WM_COMMAND, 나 WM_CREATE, 다 WM_PAINT, 14. 버튼에나타나는캡션은어느것인가? 1 학과 2 확인 3 이름 4 [ 확인 ] 버튼이클릭되었다 15. 문자출력을위해서디바이스컨텍스트를구하는것은? 1 PAINTSTRUCT 2 BeginPaint 3 TextOut 4 EndPaint 16. 다음메시지에대한설명중틀린것은? 1 WM_PAINT 문자열을출력하려고할때필요하다 2 WM_CREATE 윈도우를생성하려고할때필요하다. 3 WM_COMMAND 버튼컨트롤이클릭되었을때발생된다. 4 WM_DESTROY 윈도우를축소하려고할때필요하다. 17. MB_OK 의의미는? 1 [ 확인 ] 버튼만있는메시지박스 2 [ 확인 ], [ 취소 ] 버튼만있는메시지박스 3 [YES] 버튼만있는메시지박스 4 [YES], [NO] 버튼만있는메시지박스 윈도우프로그래밍 7-3
18. 다음중디버깅에대한설명중틀린것은? 1 Output 윈도우는디버깅시디버그정보가출력되는윈도우다. 2Breakpoint는프로그램이실행하다 Breakpoint가설정된포인트에서멈춘다. 3디버그모드로만든프로그램은릴리즈모드로만든프로그램보다크기가작다. 4디버깅을위해서는 variable 윈도우와 watch 윈도우그리고 output 윈도우가필요하다. 19. 다음은디버깅에관련된내용이다. 특정조건을조사해서조건이 False 이면이매크로가호출된소스파일이름과라인번호를메시지박스에출력하고프로그램을종료하는것은? 1 TRACE 2 Variables 윈도우 3 Watch 윈도우 4 ASSERT 20. 다음클래스와관련된설명중틀린것은? 1 public 으로지정된멤버들은외부에서접근할수없다. 2 멤버변수는 인스턴스이름. 멤버변수 형태로사용한다. 3 멤버함수는 리턴값클래스이름 함수이름 ( 파라미터 ) 형태로작성한다. 4 컨스트럭터 ( 생성자 ) 함수는객체를생성할때객체의멤버들을초기화할수있다. (21~32) 다음은 SDI 프로그램을이용하여차일드윈도우를생성한후컨트롤들을생성하는 SDIView.cpp 파일의일부이다. 다음의결과윈도우를보면서물음에답하라. int CSDIViewOnCreate(LPCREATESTRUCT lpcreatestruct) m_mywnd.create(afxregisterwndclass(cs_hredraw CS_VREDRAW), " 차일드윈도우 ", WS_OVERLAPPEDWINDOW WS_VISIBLE WS_CHILD, CRect(50,50,300,200), this, 1010 ); m_downbutton.create("<<",ws_visible, CRect( 가 ), this, ID_DOWN_BUTTON); m_upbutton.create(">>",ws_visible, CRect( 나 ), this,id_up_button); m_listbox.create(ws_dlgframe WS_VISIBLE, CRect( 다 ),this, ID_LISTBOX); m_listbox.addstring(" 윈도우프로그래밍!"); m_progressbar.create(ws_dlgframe WS_VISIBLE PBS_VERTICAL, CRect( 라 ),this, ID_PROGBAR); m_progressbar.setrange(0,9); m_progressbar.setpos(1); void CSDIViewOnDownButton() int count = m_listbox.getcount(); if(count > 0) m_listbox.deletestring( 마 ); m_progressbar.setpos( 바 ); AfxMessageBox(" 지울아이템이없습니다 "); void CSDIViewOnUpButton() int count = m_listbox.getcount(); #define ID_DOWN_BUTTON 2000 #define ID_UP_BUTTON 2010 #define ID_LISTBOX 2020 #define ID_PROGBAR 2030 BEGIN_MESSAGE_MAP(CSDIView, CView) ( 'a' ) END_MESSAGE_MAP() if(count < 10) m_listbox.addstring(" 윈도우프로그래밍!"); m_progressbar.setpos( 사 ); AfxMessageBox(" 더이상추가할수없습니다 "); 21. 다음설명중틀린것은? 1다운버튼을클릭했을때메시지핸들러함수 OnDownButton 이호출된다. 2ON_COMMAND 매크로는 WM_COMMAND 메시지에해당되는매크로이다. 3진행바의범위는 1에서 10까지이며현재위치는 4로설정되어있다. 4 뷰윈도우 (SDIView) 가생성될때메시지핸들러함수 OnCreate() 가호출되어차일드윈도우가생성된다. 윈도우프로그래밍 7-4
22. 차일드윈도우의 ID는? 1 50 2 200 3 300 4 1010 23. 다음중진행바컨트롤의 ID는? 1 2000 2 2010 3 2020 4 2030 24. 다음중리스트박스컨트롤의 ID는? 1 2000 2 2010 3 2020 4 2030 25. 빈칸 가 에알맞은것은? 26. 빈칸 나 에알맞은것은? 27. 빈칸 다 에알맞은것은? 28. 빈칸 라 에알맞은것은? 29. 빈칸 마 와 바 에각각알맞은것은? 1 count-1, count-1 2 count, count-1 3 count, count 4 count, count+1 30. 빈칸 사 에알맞은것은? 1 count-1 2 count 3 count+1 4 0 31. 위프로그램으로보아서메시지맵에있는빈칸 a 에들어갈내용이아닌것은? 1 ON_WM_CREATE() 2 ON_WM_PAINT() 3 ON_COMMAND(ID_DOWN_BUTTON, OnDownButton) 4 ON_COMMAND(ID_UP_BUTTON, OnUpButton) 32. 위의프로그램에서생성되는모든컨트롤들을나열한것은? 1 버튼과에디트박스 2 버튼과진행바와에디트박스 3 버튼과리스트박스 4 버튼과진행바와리스트박스 33. 다음중 SDI (Single Document Interface) 응용프로그램은? 1 비주얼스튜디오 2 MS-엑셀 3 MS 워드 4 메모장 34. 다음중 MDI 프로그램은? 1 계산기 2 윈도우탐색기 3 MS 워드 4 메모장 35. 비주얼 C++ 을이용하여먼저, 콘솔프로그램을작성하고둘째, API를이용하여윈도우프로그램을작성하고셋째, MFC를이용하여윈도우프로그램을작성하려고한다. 다음중순서에맞도록프로젝트가나열된것은? 1 Win32 Console Application, Win32 Application, MFC AppWizard[exe] 2 Win32 Console Application, MFC AppWizard[exe], Win32 Application 3 Win32 Application, Win32 Console Application, MFC AppWizard[exe] 4 Win32 Application, MFC AppWizard[exe], Win32 Console Application 36. 다음은디버깅에관련된내용이다. Local, Auto, this 탭을이용해서변수값을검사할수있는것은? 1 TRACE 2 Variables 윈도우 3 Watch 윈도우 4 ASSERT 37. 다음은메시지핸들러함수들이다윈도우를생성할때호출되는함수는? 1 OnCreate() 2 OnSize() 3 OnPaint() 4 OnClose() (38~39) 다음은웹브라우저프로젝트에서한글영문모드를검사하고팬에문자열을출력하는프로그램이다. 다음물음에답을하라. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_CREATE() ON_UPDATE_COMMAND_UI(ID_IME_MODE, OnUpdateIMEPane) END_MESSAGE_MAP() void CMainFrameOnUpdateIMEPane(CCmdUI* pcmdui) ----- 가 DWORD immstate, immsentence; HIMC himc; if((himc = ImmGetContext(GetSafeHwnd()))) ------- 나 if(immgetconversionstatus(himc,&immstate,&immsentence)) -- 다 if(immstate == IME_CMODE_HANGEUL) m_wndstatusbar.setpanetext(1," 한글 "); m_wndstatusbar.setpanetext(1," 영문 "); ImmReleaseContext(GetSafeHwnd(),hIMC); ------------라 윈도우프로그래밍 7-5
38. 프로그램에서 UI 업데이트핸들러함수는? 1 가 2 나 3 다 4 라 39. 프로그램에서현재의 IME 상태를파악하는함수는? 1 가 2 나 3 다 4 라 (40~42) 다음은웹브라우저프로젝트에서 WebBrView.CPP 파일의일부이다. 업데이트 UI 핸들러함수를추가하고 ActiveX 컨트롤이벤트를발생하는부분이다. ON_WM_CREATE() ON_WM_SIZE() ON_UPDATE_COMMAND_UI(ID_MOVE_BACK, OnUpdateMoveBack) ON_UPDATE_COMMAND_UI(ID_MOVE_NEXT, OnUpdateMoveNext) BEGIN_EVENTSINK_MAP(CWebBrView, CView) ON_EVENT(CWebBrView, 1010, 105, ( 가 ), VTS_I4 VTS_BOOL) END_EVENTSINK_MAP() CWebBrViewCWebBrView() m_bback = FALSE; m_bforward = FALSE; int CWebBrViewOnCreate(LPCREATESTRUCT lpcreatestruct) if(m_webbr.create("web Control",WS_CHILD WS_VISIBLE, rc, this, 1010) == FALSE) AfxMessageBox(" 웹브라우저컨트롤생성실패 \n"); return -1; m_webbr.( 나 ); void CWebBrViewOnSize(UINT ntype, int cx, int cy) CView OnSize(nType, cx, cy); (m_webbr.movewindow(0,0,cx,cy)); void CWebBrViewOnUpdateMoveBack(CCmdUI* pcmdui) pcmdui->enable(m_bback); 40. 빈칸 가 에적당한것은? 1 OnCreate 2 OnSize 3 OnUpdateMoveNext 4 OnCommandStateChange 41. 빈칸 나 에적당한것은? 1 GoHome() 2 Reload() 3 GoBack() 4 GoNext 42. 빈칸 다 에적당한것은? 1 True 2 Enable 3 Command 4 False (43~44) 다음은웹브라우저프로젝트에서 URL로이동하는프로그램이다. 물음에답하라. void CMainFrameOnGoSite() CComboBox* pcombo = (CComboBox*)(m_wndAddressBar.GetDlgItem(IDC_COMBO1)); if(pcombo) CString urlstr; pcombo->getwindowtext(urlstr); if(urlstr!= "") ((CWebBrView*)GetActiveView())-> m_webbr.navigate(urlstr, NULL, NULL, NULL, NULL); AfxMessageBox(" 이동할사이트를입력하세요 "); void CWebBrViewOnUpdateMoveNext(CCmdUI* pcmdui) pcmdui->enable(m_bforward); void CWebBrViewOnCommandStateChange(long Command, BOOL Enable) switch(command) case CSC_NAVIGATEFORWARD m_bforward = ( 다 ); break; case CSC_NAVIGATEBACK m_bback = ( 다 ); break; 43. 지정한 URL 주소로이동하게하는함수는? 1 GetDlgItem() 2 GetWindowText() 3 GetActiveView() 4 Navigate() 44. 뷰클래스를구하는함수는? 1 GetDlgItem() 2 GetWindowText() 3 GetActiveView() 4 Navigate() 윈도우프로그래밍 7-6
(45~50) 다음은그래픽에디터프로젝트와관련된문제들이다. 45. 다음 GDI 함수중에서원을그리는함수는? 1 LineTo 2 MoveTo 3 Ellipse 4 Rectangle 46. GDI 객체를사용하여사각형을그리는프로그램이다. 빈칸 가 와 나 에공통적으로들어갈것은? void CGraphicViewOnDraw(CDC * pdc) CPen pen( PS_SOLID, 5, RGB(0, 0, 255 ) ); CPen * poldpen = pdc->( 가 )( &pen ); pdc->rectangle(50, 50, 150, 150 ); pdc->( 나 )( poldpen ); 49. CLineObj, CCircleObj, CRectObj 등은 CDrawingObj 클래스로부터상속받은클래스들이므로이러한프로그램이가능하다. 이를위해서 CGraphicView의헤더파일에반드시선언되어야하는것은? 1 class CDrawingObj public CObject 2 IMPLEMENT_SERIAL(CDrawingObj, CObject, 0) 3 CDrawingObj* m_pdrawingobj 4 DECLARE_SERIAL(CDrawingObj) 50. 빈칸 가 에가장적당한것은? 1 nflags 2 m_isdrawing 3 m_ncurdrawmode 4 m_pdrawingobj 1 Draw 3 SetCurSel 2 SelectObject 4 UpdateData (47~48) 다음은이전에그려진도형을지우는프로그램이다. void CGraphicViewOnMouseMove(UINT nflags, CPoint point) if(m_isdrawing) CClientDC dc(this); int oldmode = ( 가 )(R2_NOTXORPEN); m_pdrawingobj->draw(&dc); m_pdrawingobj->setendxy(point); m_pdrawingobj->draw(&dc); ( 나 )(oldmode); CViewOnMouseMove(nFlags, point); 47. 빈칸 가 와 나 에공통적으로들어갈것은? 1 Draw 2 Paint 3 dc.setrop2 4 SetStartXY 48. 여기서왼쪽버튼이눌릴때만그리기작업을하도록해주는것은? 1 nflags 2 point 3 m_isdrawing 4 SetRop2 (49~50) 도형클래스를이용하여도형을그리는프로그램의일부이다. void CGraphicViewOnLButtonDown(UINT nflags, CPoint point) if(m_ncurdrawmode == LINE_MODE) m_pdrawingobj = new CLineObj; if(m_ncurdrawmode == CIRCLE_MODE) m_pdrawingobj = new CCircleObj; if(m_ncurdrawmode == RECT_MODE) m_pdrawingobj = new CRectObj; if( 가 ) m_pdrawingobj->setstartxy(point); m_pdrawingobj->setendxy(point); 윈도우프로그래밍 7-7