29 n App Wizard BOOL CSimple 2 App
메뉴 생성 (2/9) n App. Wizard가 생성한 코드 BOOL CSimple 2 App: : Init. Instance() { CMain. Frame* p. Frame = new CMain. Frame; m_p. Main. Wnd = p. Frame; p. Frame->Load. Frame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL); p. Frame->Show. Window(SW_SHOW); p. Frame->Update. Window(); } return TRUE; 9
메뉴 생성 (6/9) n 프로그램 실행 중 전체 메뉴 생성하기 int CMain. Frame: : On. Create(LPCREATESTRUCT lp. Create. Struct) { // 생략. . . CMenu menu. Main; menu. Main. Create. Menu(); CMenu menu. Popup; menu. Popup. Create. Popup. Menu(); menu. Popup. Append. Menu(MF_STRING, 201, "빨강(&R)"); menu. Popup. Append. Menu(MF_STRING, 202, "초록(&G)"); menu. Popup. Append. Menu(MF_STRING, 203, "파랑(&B)"); 13
메뉴 생성 (7/9) 프로그램 실행 중 전체 메뉴 생성하기 (cont'd) n menu. Main. Append. Menu(MF_POPUP, (UINT_PTR)menu. Popup. Detach(), "색상(&C)"); Set. Menu(&menu. Main); menu. Main. Detach(); } return 0; 14
메뉴 생성 (8/9) n 프로그램 실행 중 추가 메뉴 생성하기 int CMain. Frame: : On. Create(LPCREATESTRUCT lp. Create. Struct) { // 생략. . . CMenu Popup 1; Popup 1. Create. Popup. Menu(); Popup 1. Append. Menu(MF_STRING, 301, 302, 303, 304, "&1"); "&2"); "&3"); "&4"); CMenu Popup 2; Popup 2. Create. Popup. Menu(); Popup 2. Append. Menu(MF_STRING|MF_CHECKED, 201, "Item&1"); 15
메뉴 생성 (9/9) 프로그램 실행 중 추가 메뉴 생성하기 (cont'd) n Popup 2. Append. Menu(MF_POPUP, (UINT_PTR)Popup 1. Detach(), "Item&2"); Popup 2. Append. Menu(MF_STRING, 203, "Item&3"); CMenu *p. Top. Level = Get. Menu(); p. Top. Level->Append. Menu(MF_POPUP, (UINT_PTR)Popup 2. Detach(), "연습(&X)"); } return 0; 16
메뉴 명령 처리 (2/3) n 메뉴 명령 처리 예 BEGIN_MESSAGE_MAP(CChild. View, CWnd ). . . ON_COMMAND(ID_COLOR_RED, On. Color. Red) ON_COMMAND(ID_COLOR_GREEN, On. Color. Green) ON_COMMAND(ID_COLOR_BLUE, On. Color. Blue). . . END_MESSAGE_MAP() void CChild. View: : On. Color. Red() { m_color = RGB(255, 0, 0); Invalidate(); } 18
메뉴 명령 처리 (3/3) n 메뉴 명령 처리 예 (cont'd) void CChild. View: : On. Color. Green() { m_color = RGB(0, 255, 0); Invalidate(); } void CChild. View: : On. Color. Blue() { m_color = RGB(0, 0, 255); Invalidate(); } 19
메뉴 항목 갱신 (3/5) n 메뉴 항목 갱신 예 BEGIN_MESSAGE_MAP(CChild. View, CWnd ). . . ON_UPDATE_COMMAND_UI(ID_COLOR_RED, On. Update. Color. Red) ON_UPDATE_COMMAND_UI(ID_COLOR_GREEN, On. Update. Color. Green) ON_UPDATE_COMMAND_UI(ID_COLOR_BLUE, On. Update. Color. Blue) . . . END_MESSAGE_MAP() void CChild. View: : On. Update. Color. Red(CCmd. UI* p. Cmd. UI) { p. Cmd. UI->Set. Check(m_color == RGB(255, 0, 0)); } 22
메뉴 항목 갱신 (4/5) n 메뉴 항목 갱신 예 (cont'd) void CChild. View: : On. Update. Color. Green(CCmd. UI* p. Cmd. UI) { p. Cmd. UI->Set. Check(m_color == RGB(0, 255, 0)); } void CChild. View: : On. Update. Color. Blue(CCmd. UI* p. Cmd. UI) { p. Cmd. UI->Set. Check(m_color == RGB(0, 0, 255)); } 23
메뉴 항목 갱신 (5/5) n CCmd. UI 클래스 멤버 함수 의미 사용 예 Enable( ) p. Cmd. UI->Enable(b_Draw. Mode); 활성화 상태 변경 Set. Check 체크 상태 변경 () Set. Radio( 라디오 표시 상태 변경 ) Set. Text( ) 문자열 변경 p. Cmd. UI->Set. Check(m_color == RGB(255, 0, 0)); p. Cmd. UI->Set. Radio(m_color == RGB(255, 0, 0)); p. Cmd. UI->Set. Text("Light On"); 24
컨텍스트 메뉴 (2/4) n CMenu: : Track. Popup. Menu() 함수 BOOL Track. Popup. Menu (UINT n. Flags, int x, int y, CWnd* p. Wnd, LPCRECT lp. Rect = 0) ; n. Flags – TPM_LEFTALIGN, TPM_CENTERALIGN, TPM_RIGHTALIGN – TPM_LEFTBUTTON, TPM_RIGHTBUTTON 26
컨텍스트 메뉴 (4/4) n 컨텍스트 메뉴 사용 예 void CChild. View: : On. Context. Menu(CWnd* p. Wnd, CPoint point) { CMenu menu; menu. Load. Menu(IDR_MAINFRAME); CMenu* p. Menu = menu. Get. Sub. Menu(4); p. Menu->Track. Popup. Menu( TPM_LEFTALIGN|TPM_RIGHTBUTTON, point. x, point. y, Afx. Get. Main. Wnd()); } 28
툴바 (3/4) n 툴바 코드 class CMain. Frame : public CFrame. Wnd { // 생략. . . protected: CStatus. Bar m_wnd. Status. Bar; CTool. Bar m_wnd. Tool. Bar; CChild. View m_wnd. View; // 생략. . . }; int CMain. Frame: : On. Create(LPCREATESTRUCT lp. Create. Struct) { // 생략. . . if (!m_wnd. Tool. Bar. Create. Ex(this, TBSTYLE_FLAT, WS_CHILD | 34
툴바 (4/4) n 툴바 코드 (cont'd) | { WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wnd. Tool. Bar. Load. Tool. Bar(IDR_MAINFRAME)) TRACE 0("Failed to create toolbarn"); return -1; } // 생략. . . m_wnd. Tool. Bar. Enable. Docking(CBRS_ALIGN_ANY); Dock. Control. Bar(&m_wnd. Tool. Bar); } return 0; 35
상태바 (2/4) n 상태바 리소스 static UINT indicators[ ] = { ID_SEPARATOR, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; 37
상태바 (3/4) n 상태바 코드 class CMain. Frame : public CFrame. Wnd { // 생략. . . protected: CStatus. Bar m_wnd. Status. Bar; CTool. Bar m_wnd. Tool. Bar; CChild. View m_wnd. View; // 생략. . . }; 38
상태바 (4/4) n 상태바 코드 (cont'd) int CMain. Frame: : On. Create(LPCREATESTRUCT lp. Create. Struct) { // 생략. . . if (!m_wnd. Status. Bar. Create(this) || !m_wnd. Status. Bar. Set. Indicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE 0("Failed to create status barn"); return -1; } // 생략. . . } 39
- Slides: 40