연습: MFC Scribble 응용 프로그램 (파트 2) 업데이트
1 부 응용 프로그램에 기본 Office Fluent 리본 메뉴를 추가 하는 방법을 보여 주었습니다.이 연습의 낙서.이 부분에 리본 패널 및 사용자 메뉴와 명령을 대신 사용할 수 있는 컨트롤을 추가 하는 방법을 보여 줍니다.
사전 요구 사항
단원
이 연습 부분 단원은 다음과 같습니다.
새 패널을 리본 메뉴에 추가
도움말 패널을 리본 메뉴에 추가
펜 패널을 리본 메뉴에 추가
색 단추는 리본 메뉴에 추가
문서 클래스에 색 구성원 추가
펜을 초기화 하 고 기본 설정을 저장 합니다.
새 패널을 리본 메뉴에 추가
이러한 단계를 추가 하는 방법을 보여 줍니다 있는 보기 도구 모음과 상태 표시줄의 표시 여부를 제어 하는 두 개의 확인란을 포함 하는 패널도는 창 만들기 및 다중 문서 인터페이스 (MDI) 창 배열을 제어 세로 분할 단추를 포함 하는 패널.
보기 패널과 패널 창 리본 메뉴 모음에 추가할
명명 된 패널을 만듭니다 보기,이 상태 표시줄 및 도구 모음 설정/해제 두 확인란.
도구 상자, 드래그를 패널 에 홈 범주.다음 두 가지를 끌어 확인란 패널.
패널에서 해당 속성을 수정 하려면 클릭 합니다.변경 캡션 에 보기.
해당 속성을 수정 하려면 첫 번째 확인란을 클릭 합니다.변경 ID 에 ID_VIEW_TOOLBAR 및 캡션 에 도구 모음.
두 번째 속성을 수정 하려면이 확인란을 클릭 합니다.변경 ID 에 ID_VIEW_STATUS_BAR 및 캡션 에 상태 표시줄.
명명 된 패널을 만듭니다 창 있는 분할 단추입니다.분할 단추를 클릭할 때 바로 가기 메뉴가 이미 Scribble 응용 프로그램에 정의 된 세 가지 명령이 표시 됩니다.
도구 상자, 드래그를 패널 에 홈 범주.다음 드래그를 단추 패널.
패널에서 해당 속성을 수정 하려면 클릭 합니다.변경 캡션 에 창.
단추를 클릭합니다.Change Caption to Windows, Keys to w, Large Image Index to 1, and Split Mode to False.그런 다음 줄임표 (...) 옆에 메뉴 항목 열은 항목 편집기 대화 상자.
클릭 추가 세 개의 단추를 추가 하는 세 번.
첫 번째 단추를 클릭 하 고 변경 캡션 에 새 창, 및 ID 에 ID_WINDOW_NEW.
두 번째 단추를 클릭 하 고 변경 캡션 에 모두, 및 ID 에 ID_WINDOW_CASCADE.
세 번째 단추를 클릭 하 고 변경 캡션 에 타일, 및 ID 에 ID_WINDOW_TILE_HORZ.
변경 내용을 저장 합니다. 빌드 및 응용 프로그램을 실행 합니다.보기 및 창 패널이 표시 됩니다.가 제대로 작동 하는지 확인 하려면 단추를 클릭 합니다.
[단원]
도움말 패널을 리본 메뉴에 추가
이제는 Scribble 응용 프로그램에 명명 된 리본 단추에 정의 된 두 개의 메뉴 항목을 할당할 수 있습니다 도움말 항목 및 에 대 한 낙서.단추 라는 새 패널에 추가 된 도움말.
도움말 패널을 추가 하려면
도구 상자, 드래그를 패널 에 홈 범주.다음 두 가지를 끌어 단추 패널.
패널에서 해당 속성을 수정 하려면 클릭 합니다.변경 캡션 에 도움말.
첫 번째 단추를 클릭 합니다.변경 캡션 에 도움말 항목, 및 ID 에 ID_HELP_FINDER.
두 번째 단추를 클릭 합니다.변경 캡션 에 자유에 대 한..., and ID to ID_APP_ABOUT.
변경 내용을 저장 합니다. 빌드 및 응용 프로그램을 실행 합니다.A 도움말 리본 단추 두 개를 포함 하는 패널을 표시 해야 합니다.
중요 클릭할 때 해당 도움말 항목 단추를 엽니다 Scribble 응용 프로그램 이라는 압축된 (.chm) HTML 도움말 파일 your_project_name. chm.따라서, 프로젝트 Scribble 이름이 지정 되지 않은 경우 프로젝트 이름에는 도움말 파일을 바꿔야 합니다.
[단원]
펜 패널을 리본 메뉴에 추가
지금, 두께 및 펜의 색을 제어 하는 단추를 표시 하는 패널을 추가 합니다.이 패널에 굵은 선과는 펜 사이의 전환 확인란 포함 되어 있습니다.기능을 유사한는 굵은 선 Scribble 응용 프로그램의 메뉴 항목입니다.
원래 Scribble 응용 프로그램을 클릭할 때 나타나는 대화 상자에서 펜 너비를 선택할 수 있습니다 펜 너비 메뉴.리본 표시줄 새 컨트롤에 대 한 충분 한 공간이 없기 때문에 두 개의 콤보 상자를 사용 하 여 리본 메뉴 대화 상자를 바꿀 수 있습니다.얇은 펜의 너비를 조정 하는 콤보 상자와 콤보 상자 굵은 펜의 너비를 조정 합니다.
리본 메뉴에 펜 패널 및 콤보 상자를 추가 하려면
도구 상자, 드래그를 패널 에 홈 범주.다음 드래그를 확인란 및 두 콤보 상자 패널.
패널에서 해당 속성을 수정 하려면 클릭 합니다.변경 캡션 에 펜.
확인란을 클릭 합니다.변경 캡션 에 두꺼운 사용, 및 ID 에 ID_PEN_THICK_OR_THIN.
첫 번째 콤보 상자를 클릭 합니다.Change Caption to Thin Pen, ID to ID_PEN_THIN_WIDTH, Text to 2, Type to Drop List, and Data to 1;2;3;4;5;6;7;8;9;.
두 번째 콤보 상자를 클릭 합니다.변경 캡션 에 굵은 펜, ID 에 ID_PEN_THICK_WIDTH, 텍스트 에 5, 형식 에 드롭 목록, 및 데이터 에 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17, 18; 19; 20..
모든 기존 메뉴 항목을 새 콤보 상자를 일치 하지 않습니다.따라서 모든 펜 옵션 메뉴 항목을 만들어야 합니다.
에 자원 보기 창에서 IDR_SCRIBBTYPE 메뉴 리소스를 엽니다.
클릭 펜 p를 열려면en 메뉴.누른 다음 여기에 입력 하십시오 및 형식 부족해 & n 펜.
열에 입력 한 텍스트를 마우스 오른쪽의 속성 창 및 변경의 ID 속성을 ID_PEN_THIN_WIDTH.
또한 모든 펜 메뉴 항목에 대 한 이벤트 처리기를 만들어야 합니다.마우스는 부족해 & n 펜 방금 만든 및 다음을 클릭 하는 메뉴 항목 이벤트 처리기를 추가.이벤트 처리기 마법사 표시 됩니다.
에 클래스 목록 마법사에서 select 상자 CScribbleDoc 누른 다음 추가 하 고 편집.따라서 명명 된 이벤트 처리기가 만들어집니다 CScribbleDoc::OnPenThinWidth.
다음 코드를 CScribbleDoc::OnPenThinWidth에 추가합니다.
// Get a pointer to the ribbon bar CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar(); ASSERT_VALID(pRibbon); // Get a pointer to the Thin Width combo box CMFCRibbonComboBox* pThinComboBox = DYNAMIC_DOWNCAST( CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THIN_WIDTH)); //Get the selected value int nCurSel = pThinComboBox->GetCurSel(); if (nCurSel >= 0) { m_nThinWidth = atoi(pThinComboBox->GetItem(nCurSel)); } // Create a new pen using the selected width ReplacePen();
다음 메뉴 항목 및 이벤트 처리기를 굵은 펜을 만듭니다.
에 자원 보기 창에서 IDR_SCRIBBTYPE 메뉴 리소스를 엽니다.
클릭 펜 펜 메뉴를 엽니다.누른 다음 여기에 입력 하십시오 및 형식 Thic & k 펜.
표시 하려면 방금 입력 한 텍스트를 마우스 오른쪽에 속성 창.ID 속성을 변경 합니다. ID_PEN_THICK_WIDTH.
마우스는 굵은 펜 방금 만든 및 다음을 누릅니다 메뉴 항목 이벤트 처리기를 추가.이벤트 처리기 마법사 표시 됩니다.
에 클래스 목록 선택 상자 CScribbleDoc 누른 다음 추가 하 고 편집.따라서 명명 된 이벤트 처리기가 만들어집니다 CScribbleDoc::OnPenThickWidth.
다음 코드를 CScribbleDoc::OnPenThickWidth에 추가합니다.
// Get a pointer to the ribbon bar CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx *) AfxGetMainWnd())->GetRibbonBar(); ASSERT_VALID(pRibbon); CMFCRibbonComboBox* pThickComboBox = DYNAMIC_DOWNCAST( CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THICK_WIDTH)); // Get the selected value int nCurSel = pThickComboBox->GetCurSel(); if (nCurSel >= 0) { m_nThickWidth = atoi(pThickComboBox->GetItem(nCurSel)); } // Create a new pen using the selected width ReplacePen();
변경 내용을 저장 합니다. 빌드 및 응용 프로그램을 실행 합니다.새 단추 및 콤보 상자에 표시 되어야 합니다.낙서에 너비가 서로 다른 펜을 사용해 보십시오.
[단원]
[펜] 패널에 색상 단추를 추가합니다.
그런 다음 추가 CMFCRibbonColorButton 사용자가 개체 자유 곡선 색에서.
[펜] 패널에 색상 단추를 추가 하려면
색상 버튼을 추가 하기 전에 메뉴 항목을 만듭니다.에 자원 보기 창에서 IDR_SCRIBBTYPE 메뉴 리소스를 엽니다.클릭 하 여 펜 펜 메뉴를 열려면 메뉴 항목.누른 다음 여기에 입력 하십시오 및 형식 및 색상.표시 하려면 방금 입력 한 텍스트를 마우스 오른쪽에 속성 창.ID를 변경 ID_PEN_COLOR.
이제 컬러 단추를 추가 합니다.도구 상자, 드래그를 색 단추 에 펜 패널.
색 단추를 클릭 합니다.Change Caption to Color, ID to ID_PEN_COLOR, SimpleLook to True, Large Image Index to 1, and Split Mode to False.
변경 내용을 저장 합니다. 빌드 및 응용 프로그램을 실행 합니다.[새 색상] 단추를 표시할지는 펜 패널.그러나 이벤트 처리기가 아직 없기 때문에 사용할 수 없습니다.다음 단계는 색 단추에 대 한 이벤트 처리기를 추가 하는 방법을 보여 줍니다.
[단원]
문서 클래스에 색 구성원 추가
Scribble 응용 프로그램은 원래 색상의 펜 없으므로 해당 구현을 작성 해야 합니다.펜 색입니다. 문서를 저장 하는 문서 클래스에 새 구성원을 추가,CscribbleDoc.
문서 클래스에 색 구성원을 추가 하려면
Scribdoc.h에는 CScribbleDoc 클래스, 찾기는 // Attributes 섹션.정의 뒤에 다음 코드 줄을 추가 m_nThickWidth 데이터 멤버입니다.
// Current pen color COLORREF m_penColor;
모든 문서 목록이 스트로크 사용자가 이미 그린 것입니다.모든 획 정의 되는 CStroke 개체입니다.CStroke 클래스는 펜 색에 대 한 정보가 포함 되지 않습니다.따라서, 클래스를 수정 해야 합니다., Scribdoc.h에는 CStroke 클래스, 정의 뒤에 다음 코드 줄을 추가 m_nPenWidth 데이터 멤버.
// Pen color for the stroke COLORREF m_penColor;
Scribdoc.h에서, 새로 추가 CStroke 생성자 매개 변수가 너비 및 색을 지정 합니다.코드 뒤에 다음 줄을 추가 CStroke(UINT nPenWidth); 문.
CStroke(UINT nPenWidth, COLORREF penColor);
Scribdoc.cpp에서, 새 구현을 추가 CStroke 생성자입니다.구현 후에 다음 코드를 추가 CStroke::CStroke(UINT nPenWidth) 생성자입니다.
// Constructor that uses the document's current width and color CStroke::CStroke(UINT nPenWidth, COLORREF penColor) { m_nPenWidth = nPenWidth; m_penColor = penColor; m_rectBounding.SetRectEmpty(); }
두 번째 줄을 변경는 CStroke::DrawStroke 메서드를 다음과 같이 합니다.
if (!penStroke.CreatePen(PS_SOLID, m_nPenWidth, m_penColor))
문서 클래스에 대 한 펜 기본 색을 설정 합니다.Scribdoc.cpp에서 다음 줄을 추가 CScribbleDoc::InitDocument, 후에 m_nThickWidth = 5; 문.
// default pen color is black m_penColor = RGB(0,0,0);
Scribdoc.cpp에서, 첫 번째 줄의 변경의 CScribbleDoc::NewStroke 다음 방법.
CStroke* pStrokeItem = new CStroke(m_nPenWidth, m_penColor);
마지막 줄을 변경는 CScribbleDoc::ReplacePen 다음 방법.
m_penCur.CreatePen(PS_SOLID, m_nPenWidth, m_penColor);
사용자 추가 m_penColor 멤버는 이전 단계에서.이제 멤버를 설정 하려면 색 단추에 대 한 이벤트 처리기를 만듭니다.
에 자원 보기 창에서 IDR_SCRIBBTYPE 메뉴 리소스를 엽니다.
마우스는 색 메뉴 항목을 클릭 하 고 추가 이벤트 Handler….이벤트 처리기 마법사 나타납니다.
에 클래스 목록 마법사에서 select 상자 CScribbleDoc 누른 다음의 추가 하 고 편집 단추.이 CScribbleDoc::OnPenColor 이벤트 처리기 스텁.
위한 스텁 교체는 CScribbleDoc::OnPenColor 이벤트 처리기에 다음 코드를 사용 합니다.
void CScribbleDoc::OnPenColor() { // Change pen color to reflect color button's current selection CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar(); ASSERT_VALID(pRibbon); CMFCRibbonColorButton* pColorBtn = DYNAMIC_DOWNCAST( CMFCRibbonColorButton, pRibbon->FindByID(ID_PEN_COLOR)); m_penColor = pColorBtn->GetColor(); // Create new pen using the selected color ReplacePen(); }
변경 내용을 저장 합니다. 빌드 및 응용 프로그램을 실행 합니다.색 단추를 누르고 펜의 색을 변경할 수 있습니다.
[단원]
펜을 초기화 하 고 기본 설정을 저장 합니다.
다음, 색과 펜의 너비를 초기화 합니다.마지막으로 저장 한 파일에서 드로잉의 색을 로드.
리본 표시줄 컨트롤을 초기화 하려면
리본 표시줄에 펜을 초기화 합니다.
에, scribdoc.cpp에 다음 코드를 추가 CScribbleDoc::InitDocument 메서드, 후에 m_sizeDoc = CSize(200,200) 문.
// Reset the ribbon UI to its initial values CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar(); ASSERT_VALID(pRibbon); CMFCRibbonColorButton* pColorBtn = DYNAMIC_DOWNCAST( CMFCRibbonColorButton, pRibbon->FindByID(ID_PEN_COLOR)); // Set ColorButton to black pColorBtn->SetColor(RGB(0,0,0)); CMFCRibbonComboBox* pThinComboBox = DYNAMIC_DOWNCAST( CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THIN_WIDTH)); // Set Thin pen combobox to 2 pThinComboBox->SelectItem(1); CMFCRibbonComboBox* pThickComboBox = DYNAMIC_DOWNCAST( CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THICK_WIDTH)); // Set Thick pen combobox to 5 pThickComboBox->SelectItem(0);
드로잉 파일에는 색을 저장 합니다.Scribdoc.cpp에 다음 문을 추가 CStroke::Serialize 메서드, 후에 ar << (WORD)m_nPenWidth; 문.
ar << (COLORREF)m_penColor;
색상 드로잉 파일에서 마지막으로 로드 합니다.코드의 다음 줄을 추가 CStroke::Serialize 메서드, 후에 m_nPenWidth = w; 문.
ar >> m_penColor;
이제 컬러로 낙서 및 드로잉 파일에 저장 합니다.
[단원]
결론
낙서 MFC 응용 프로그램을 업데이트 했습니다.기존 응용 프로그램을 수정 하는 경우이 연습을 참조 하십시오.
참고 항목
작업
연습: MFC Scribble 응용 프로그램 (파트 1) 업데이트