'메인메뉴바꾸기'에 해당되는 글 1건

320x100

[MFCTips] 메인 메뉴 바꾸기 & Tip링크 ★

Posted on 2010. 2. 23. 11:28
Filed Under Visual C++

http://psmon.x-y.net/maniwiki/doku.php?do=export_xhtml&id=mfc%3Aprg_mfc



http://kovi.cafe24.com/MFCTips.html



<출처: http://myhome.hanafos.com/~kukdas/doc/mfc/mainmenu.html>
MFC가 기본적으로 제공하는 IDR_MAINFRAME 라는 메뉴 대신 다른 메뉴를 로딩하도록 고쳐보기로 하겠다.

1) 리소스에 새 메뉴를 추가한다. 메뉴의 id는 IDR_MENU_NEW 로 한다.

2) MainFrm.cpp 의 PreCreateWindow() 함수에서 다음과 같이 추가한다.

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
        if( !CFrameWnd::PreCreateWindow(cs) )
                return FALSE;
        // TODO: Modify the Window class or styles here by modifying
        //  the CREATESTRUCT cs
        cs.hMenu = ::LoadMenu(AfxGetInstanceHandle(),
                MAKEINTRESOURCE(IDR_MENU_NEW));         // 추가

        return TRUE;
}

 

(설명)

 MFC가 작성해준 코드에는 항상 IDR_MAINFRAME 가 기본메뉴가 되어 있다. 따라서 이것을 다른 메뉴로 바꿔치기하려면 기본메뉴가 시스템에 "등록" 되는 시점을 알아내어 등록되기 전에 바꿔치기 하면 되는 것이다.

 여기서 PreCreateWindow() 함수는 윈도우가 생성되기 전에 불려지는 함수이다. 만약 윈도우에 무슨 조작을 가하고 싶다면 여기서 인자들을 변경해 주면 그 인자들이 윈도우에 적용되어 윈도우에 자기가 원한 조작이 되는 것이다.

PreCreateWindow의 인자인 CREATESTRUCT는 다음과 같이 정의된 구조체이다.

 

typedef struct tagCREATESTRUCT {

     LPVOID     lpCreateParams;
     HANDLE    hInstance;
     HMENU     hMenu;                 // 이 부분 주목
     HWND       hwndParent;
     int             cy;
     int             cx;
     int             y; 
     int             x;
     LONG        style;
     LPCSTR     lpszName;
     LPCSTR     lpszClass;
     DWORD      dwExStyle;

} CREATESTRUCT;

 

앞의 구조체에서 HMENU hMenu; 라는 부분에서 메인 메뉴에 대한 등록이 이루어진다. 따라서 이 값을 원하는 hMenu 값으로 바꾸면 될 것이다.

반응형

About

by 쑤기c

반응형