SUPERPAD 샘플: CEditView를 사용하여 텍스트를 편집하는 비주얼 편집 서버 설명
업데이트: 2007년 11월
SUPERPAD 샘플에서는 비주얼 편집 서버 지원과 함께 CEditView 클래스를 사용하는 방법을 보여 줍니다.
보안 정보: |
---|
이 샘플 코드는 개념을 보여 주기 위해 제공되며 가장 안전한 코드 작성 방법을 제시하지 않을 수 있으므로 응용 프로그램이나 웹 사이트에서 사용할 수 없습니다. Microsoft는 샘플 코드를 원래 용도 이외의 다른 용도로 사용하는 경우 발생하는 부수적이나 파생적인 손해에 대해 책임을 지지 않습니다. |
샘플 및 이를 설치하기 위한 지침을 가져오려면
Visual Studio의 도움말 메뉴에서 샘플을 클릭합니다.
자세한 내용은 샘플 파일 찾기를 참조하십시오.
최신 버전 및 전체 샘플 목록은 Visual Studio 2008 Samples 페이지에서 온라인으로 사용할 수 있습니다.
컴퓨터의 하드 디스크에서도 샘플을 찾을 수 있습니다. 기본적으로 샘플과 추가 정보 파일은 \Program Files\Visual Studio 9.0\Samples\ 아래의 폴더에 복사됩니다. Visual Studio Express Edition의 경우에는 모든 샘플이 온라인에 있습니다.
샘플 빌드 및 실행
SUPERPAD 샘플을 빌드하고 실행하려면
superpad.sln 솔루션을 엽니다.
빌드 메뉴에서 빌드를 클릭합니다.
SUPERPAD를 비주얼 편집 서버로 사용하려면 SUPERPAD 자체를 시스템에 등록할 수 있도록 SUPERPAD를 독립 실행형 응용 프로그램으로 한 번 실행합니다.
SUPERPAD를 처음으로 실행하면 About 대화 상자와 비슷한 시작 창이 표시됩니다. 이 대화 상자는 화면에 잠시 표시된 다음 제한 시간이 지나면 사라집니다. 시작 창을 닫으려면 아무 키나 누르거나 마우스를 클릭합니다.
SUPERPAD는 마지막으로 실행했을 때의 창 위치를 기억합니다. 또한 MDI 프레임 창에서 문서 창이 최대화되었는지 여부도 기억합니다.
추가 SUPERPAD 기능
SUPERPAD에서는 edit 컨트롤의 자동 줄 바꿈 상태 설정/해제와 화면 및 프린터 글꼴 변경 등 클래스 파생을 통한 고급 CEditView 사용을 보여 줍니다. 또한 다양한 MFC 프로그래밍 기법도 보여 줍니다.
시스템 리소스 사용을 보여 주는 About 대화 상자
응용 프로그램을 처음으로 시작할 때 표시되는 시작 창
창 위치 정보를 개인 .ini 파일에 저장하여 영구적인 창 배치
유휴 루프 처리
WaitCursor 사용
창 서브클래싱
인쇄 중에 페이지 머리글 및 바닥글 추가
인쇄 중에 페이지 나누기
문서의 현재 선택 영역에서 인쇄 미리 보기 시작
인쇄 미리 보기에서 마지막으로 미리 보기를 했던 문서의 위치로 돌아가기
표준 글꼴 대화 상자(CFontDialog)
SUPERPAD 메뉴
File 메뉴에는 New, Open, Close, Save, Save As, Print, Print Preview, Print Setup, 최근에 사용된(MRU) 파일 목록 및 Exit 등의 표준 명령이 들어 있습니다.
또한 File 메뉴에는 각 페이지를 기준으로 머리글 및/또는 바닥글을 지정하는 데 사용할 수 있는 Page Setup 옵션도 있습니다. 머리글이나 바닥글을 지정하지 않으려면 빈 칸으로 두십시오. 머리글과 바닥글에는 아무 텍스트나 지정할 수 있습니다. 또한 다음과 같은 형식 지정 코드를 지정할 수도 있습니다.
&f - 파일 이름
&p - 페이지 번호
C 런타임 strftime 함수에 대해 정의된 형식 지정 코드. 예를 들어 약식 요일 이름에 대한 %a, 전체 월 이름에 대한 %B, 날짜에 대한 %d 및 연도(세기 포함)에 대한 %Y를 지정할 수 있습니다. strftime 함수는 DLL에서 사용할 수 없으므로 SUPERPAD를 MFC의 DLL 버전에 연결하는 경우에는 이러한 형식 지정 옵션을 사용할 수 없습니다.
SUPERPAD에서는 기본적으로 CEditView에서 처리하는 Cut, Copy, Page, Delete, Find, Find Next, Replace, Select All 및 Undo 등의 Edit 메뉴 명령을 제공합니다. 또한 Edit 메뉴에는 자동 줄 바꿈을 설정하거나 해제하는 Word Wrap 명령도 들어 있습니다.
View 메뉴에는 CEditView의 다양한 기능을 실행하는 다음 명령들이 있습니다.
Set Tab Stops — 탭 정지 간격을 일정하게 유지하기 위해 대화 상자에 단일 정수를 입력합니다.
Set Font — 화면에 파일을 표시할 때 사용할 글꼴을 지정합니다.
Set Printer Font — 인쇄할 때 사용할 글꼴을 지정합니다.
Mirror Display Font — 현재 지정된 프린터 글꼴을 일시적으로 선택 취소하고 대신 화면 글꼴과 가장 일치하는 프린터 글꼴을 사용하려면 이 토글을 설정합니다.
SUPERPAD 클래스
SUPERPAD는 CEditView에서 뷰 클래스 CPadView를 파생시킵니다. CPadView는 위에서 설명한 대로 CEditView의 기능을 확장하기 위해 CEditView의 특성과 작업에 액세스합니다.
CPadView는 CEditView::SetFont와 SetPrinterFont를 호출하여 화면 및 프린터 글꼴을 초기화하고 변경합니다.
Edit Word Wrap 명령을 구현하기 위해 CPadView는 새 edit 컨트롤을 만들어 자동 줄 바꿈 상태를 전환합니다. 이 컨트롤의 WNDCLASS는 표준 Windows edit 컨트롤입니다. CPadView는 컨트롤의 ES_AUTOHSCROLL 스타일과 WS_HSCROLL 스타일을 전환하는데 이 두 스타일은 edit 컨트롤이 자동 줄 바꿈을 수행하는지 여부를 결정합니다. CPadView는 이전 edit 컨트롤의 버퍼를 저장하여 이 버퍼를 새 edit 컨트롤로 이동합니다. 마지막으로 CPadView는 이전 edit 컨트롤을 소멸시킨 다음 CWnd::SubclassWindow를 호출하여 새 edit 컨트롤의 hWnd를 CPadView 클래스에 연결시킵니다.
CPadView는 OnPrint를 재정의하여 페이지 머리글과 바닥글을 추가하고, OnBeginPrinting을 재정의하여 머리글이나 바닥글 또는 둘 다에 선택적으로 표시되는 현재 시간을 설정합니다. CPadView는 edit 컨트롤의 현재 선택 영역에서 인쇄 미리 보기를 시작합니다.
CPadView는 CView::OnScrollTo를 재정의하여 인쇄 미리 보기 중에 마지막으로 본 위치와 같은 위치로 뷰를 스크롤합니다.
키워드
이 샘플에서는 다음의 키워드를 보여 줍니다.
AfxGetApp; AfxGetInstanceHandle; AfxMessageBox; AfxOleInit; CArchive::Flush; CArchive::GetFile; CArchive::IsStoring; CBitmap::CreateCompatibleBitmap; CButton::DrawItem; CCmdUI::SetCheck; CDC::Attach; CDC::CreateCompatibleDC; CDC::Detach; CDC::DrawIcon; CDC::FillRect; CDC::GetDeviceCaps; CDC::GetTextMetrics; CDC::IntersectClipRect; CDC::LPtoHIMETRIC; CDC::LineTo; CDC::MoveTo; CDC::Rectangle; CDC::RestoreDC; CDC::SaveDC; CDC::SelectObject; CDC::SetBkMode; CDC::SetWindowExt; CDC::SetWindowOrg; CDC::StretchBlt; CDC::TextOut; CDialog::Create; CDialog::DoModal; CDialog::OnInitDialog; CDocTemplate::SetServerInfo; CDocument::DeleteContents; CDocument::GetFirstViewPosition; CDocument::GetNextView; CEditView::GetEditCtrl; CEditView::GetPrinterFont; CEditView::PrintInsideRect; CEditView::SerializeRaw; CEditView::SetPrinterFont; CEditView::SetTabStops; CEditView::dwStyleDefault; CFile::Write; CFont::CreateFontIndirect; CFontDialog::DoModal; CFrameWnd::ActivateFrame; CFrameWnd::Create; CFrameWnd::LoadFrame; CGdiObject::CreateStockObject; CGdiObject::DeleteObject; CGdiObject::GetObject; CObject::AssertValid; CObject::Dump; CObject::IsKindOf; CObject::Serialize; COleIPFrameWnd::OnCreateControlBars; COleLinkingDoc::OnGetLinkedItem; COleResizeBar::Create; COleServerDoc::IsInPlaceActive; COleServerDoc::OnDeactivateUI; COleServerDoc::OnGetEmbeddedItem; COleServerDoc::UpdateAllItems; COleServerItem::CopyToClipboard; COleServerItem::GetDataSource; COleServerItem::GetDocument; COleServerItem::OnDraw; COleServerItem::OnGetExtent; COleServerItem::OnRenderFileData; COleServerItem::OnShow; COleServerItem::SetItemName; COleTemplateServer::ConnectTemplate; COleTemplateServer::UpdateRegistry; CPrintDialog::CreatePrinterDC; CPrintInfo::SetMaxPage; CRect::Height; CRect::InflateRect; CRect::IsRectEmpty; CRect::SetRect; CRect::Size; CRect::Width; CStatusBar::Create; CStatusBar::SetIndicators; CString::Find; CString::GetBuffer; CString::GetLength; CString::IsEmpty; CString::Left; CString::LoadString; CString::Mid; CString::ReleaseBuffer; CTime::Format; CToolBar::Create; CToolBar::LoadBitmap; CToolBar::SetButtons; CView::GetDocument; CView::OnBeginPrinting; CView::OnPrepareDC; CView::OnPrint; CWinApp::AddDocTemplate; CWinApp::EnableShellOpen; CWinApp::ExitInstance; CWinApp::GetProfileInt; CWinApp::GetProfileString; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWinApp::OnIdle; CWinApp::PreTranslateMessage; CWinApp::RegisterShellFileTypes; CWinApp::WriteProfileInt; CWinApp::WriteProfileString; CWnd::BringWindowToTop; CWnd::CenterWindow; CWnd::DestroyWindow; CWnd::Detach; CWnd::DoDataExchange; CWnd::FromHandle; CWnd::GetClientRect; CWnd::GetDC; CWnd::GetDlgCtrlID; CWnd::GetFocus; CWnd::GetFont; CWnd::GetParent; CWnd::GetParentFrame; CWnd::GetStyle; CWnd::GetSuperWndProcAddr; CWnd::GetWindowPlacement; CWnd::GetWindowRect; CWnd::GetWindowText; CWnd::GetWindowTextLength; CWnd::IsZoomed; CWnd::KillTimer; CWnd::OnClose; CWnd::OnCreate; CWnd::OnEraseBkgnd; CWnd::OnRButtonDown; CWnd::OnSize; CWnd::OnTimer; CWnd::PreCreateWindow; CWnd::ReleaseDC; CWnd::ScreenToClient; CWnd::SendMessage; CWnd::SetDlgCtrlID; CWnd::SetDlgItemText; CWnd::SetFocus; CWnd::SetFont; CWnd::SetOwner; CWnd::SetTimer; CWnd::SetWindowPlacement; CWnd::SetWindowPos; CWnd::SetWindowText; CWnd::ShowWindow; CWnd::SubclassDlgItem; CWnd::SubclassWindow; CWnd::UpdateWindow; CreateWindow; DragAcceptFiles; GetCurrentTime; GetObject; GetProfileInt; GetProfileString; GetStockObject; GetSystemMetrics; GlobalMemoryStatus; IsIconic; IsWindowVisible; LOWORD; LoadIcon; MulDiv; SetWindowLong; SetWindowPos; UpdateWindow; WideCharToMultiByte; WriteProfileString; _alloca; _getdrive; lstrcpyn; lstrlen; min; wcstombs; wsprintf
참고: |
---|
이 샘플을 비롯한 일부 샘플은 Visual C++ 마법사, 라이브러리 및 컴파일러의 변경 내용을 반영하도록 수정되지 않았지만 해당 작업의 수행 방법을 보여 줍니다. |