MFC

MFC 팁들

디버그정 2008. 9. 1. 16:36

타이틀바에 제목없음 제거하기

(일반적으로 프로그램을 실행하면 아래와 같이 제목없음이 나온다.)


사용자 삽입 이미지
 

 
제목없음을 제거하려면 아래와 같이 FWS_ADDTOTITLE 속성을 제거해 주는 부분을 추가해 준다.
 

BOOL CMainFrame::PreCreateWindow( CREATESTRUCT& cs )

{

    if( !CFrameWnd::PreCreateWindow(cs) )

       return FALSE;


    cs.style ^= FWS_ADDTOTITLE;

    return TRUE;

}


사용자 삽입 이미지

 
------------------------------------------------&^>^;;---------------------------------------------
 

실행 시 창의 크기 조절

다음과 같이 cs.cx, cs.cy 값을 변경해 준다.


BOOL CMainFrame::PreCreateWindow( CREATESTRUCT& cs )

{

    if( !CFrameWnd::PreCreateWindow(cs) )

       return FALSE;


    cs.cx = 795;   // 가로 크기
    cs.cy = 655;    // 세로 크기

    return TRUE;

}


------------------------------------------------&^>^;;---------------------------------------------
 

실행 시 프로그램의 화면 좌표 지정

다음과 같이 cs.x, cs.y값을 변경해 준다.


BOOL CMainFrame::PreCreateWindow( CREATESTRUCT& cs )

{

    if( !CFrameWnd::PreCreateWindow(cs) )

       return FALSE;


   cs.x = 100;   // 가로 시작 위치
   cs.y = 100;    // 세로 시작 위치

    return TRUE;

}


------------------------------------------------&^>^;;---------------------------------------------
 

메뉴제거

다음과 같이 cs.hMenu 값을 NULL로 설정한다.


BOOL CMainFrame::PreCreateWindow( CREATESTRUCT& cs )

{

    if( !CFrameWnd::PreCreateWindow(cs) )

       return FALSE;


    cs.hMenu = NULL;

    return TRUE;

}

 

또는 다음과 같이 InitInstance에서 SetMenu()를 추가해 준다.


SDI인 경우


BOOL CTestApp::InitInstance()

{

    ...

   m_pMainWnd->SetMenu( NULL );

    m_pMainWnd->ShowWindow(SW_SHOW);

    m_pMainWnd->UpdateWindow();


    return TRUE;

}


MDI인 경우


BOOL CTestApp::InitInstance()

{

    ...

   pDocTemplate->m_hMenuShared = NULL;

   pMainFrame->SetMenu( NULL );

    pMainFrame->ShowWindow(m_nCmdShow);

    pMainFrame->UpdateWindow();


    return TRUE;

}


------------------------------------------------&^>^;;---------------------------------------------
 

시작 시 창 최대화시키기

다음과 같이 InitInstance의 ShowWindow()에서 변경해 준다.


BOOL CTestApp::InitInstance()

{

    ...

   m_pMainWnd->ShowWindow( SW_MAXIMIZE );
    m_pMainWnd->UpdateWindow();


    return TRUE;

}


------------------------------------------------&^>^;;---------------------------------------------
 

프로그램을 항상 최상위 윈도우로 만들기

다음과 같이 다음과 같이 cs.dwExStyle 값을 변경해 준다.


BOOL CMainFrame::PreCreateWindow( CREATESTRUCT& cs )

{

    if( !CFrameWnd::PreCreateWindow(cs) )

       return FALSE;


   cs.dwExStyle |= WS_EX_TOPMOST;   // 항상 위
    return TRUE;

}


------------------------------------------------&^>^;;---------------------------------------------
 

파일을 Drag & Drop으로 파일 개방하기

다음과 같이 InitInstance에 DragAcceptFiles()를 추가한다.


BOOL CTestApp::InitInstance()

{

    ...

    pMainFrame->ShowWindow(m_nCmdShow);
    m_pMainWnd->UpdateWindow();

   m_pMainWnd->DragAcceptFiles();

    return TRUE;

}


------------------------------------------------&^>^;;---------------------------------------------
 

창의 최대화 크기 변경

창의 최대화 버튼을 눌렀을 때 크기를 지정한다.


void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
    lpMMI->ptMaxSize.x = 500;      // 최대화 가로 크기
    lpMMI->ptMaxSize.y = 500;     // 쵀대화 세로 크기
   
   CFrameWnd::OnGetMinMaxInfo(lpMMI);
}


------------------------------------------------&^>^;;---------------------------------------------
 

창의 최소화/최대화 크기 제한

창의 최대화 버튼을 눌렀을 때 크기를 지정한다.


void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{

    lpMMI->ptMinTrackSize.x = 300;     // 최소화 크기를 300으로 제한
    lpMMI->ptMinTrackSize.y = 300;     // 쵀소화 크기를 300으로 제한

    lpMMI->ptMaxTrackSize.x = 600;     // 최대화 크기를 600으로 제한
    lpMMI->ptMaxTrackSize.y = 600;     // 쵀대화 크기를 600으로 제한

    CFrameWnd::OnGetMinMaxInfo(lpMMI);
}




김은철(eunchol71)