다음을 통해 공유


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 샘플을 빌드하고 실행하려면

  1. superpad.sln 솔루션을 엽니다.

  2. 빌드 메뉴에서 빌드를 클릭합니다.

  3. 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의 특성과 작업에 액세스합니다.

CPadViewCEditView::SetFontSetPrinterFont를 호출하여 화면 및 프린터 글꼴을 초기화하고 변경합니다.

Edit Word Wrap 명령을 구현하기 위해 CPadView는 새 edit 컨트롤을 만들어 자동 줄 바꿈 상태를 전환합니다. 이 컨트롤의 WNDCLASS는 표준 Windows edit 컨트롤입니다. CPadView는 컨트롤의 ES_AUTOHSCROLL 스타일과 WS_HSCROLL 스타일을 전환하는데 이 두 스타일은 edit 컨트롤이 자동 줄 바꿈을 수행하는지 여부를 결정합니다. CPadView는 이전 edit 컨트롤의 버퍼를 저장하여 이 버퍼를 새 edit 컨트롤로 이동합니다. 마지막으로 CPadView는 이전 edit 컨트롤을 소멸시킨 다음 CWnd::SubclassWindow를 호출하여 새 edit 컨트롤의 hWnd를 CPadView 클래스에 연결시킵니다.

CPadViewOnPrint를 재정의하여 페이지 머리글과 바닥글을 추가하고, OnBeginPrinting을 재정의하여 머리글이나 바닥글 또는 둘 다에 선택적으로 표시되는 현재 시간을 설정합니다. CPadView는 edit 컨트롤의 현재 선택 영역에서 인쇄 미리 보기를 시작합니다.

CPadViewCView::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++ 마법사, 라이브러리 및 컴파일러의 변경 내용을 반영하도록 수정되지 않았지만 해당 작업의 수행 방법을 보여 줍니다.

참고 항목

기타 리소스

MFC 샘플