본문 바로가기
IT·컴퓨터

MFC 애플리케이션을 종료하지 않고 유지하는 일반적인 기술

by 기부전사 2024. 4. 1.

1. 메시지 루프 유지

#include <afxwin.h>

class CMyApp : public CWinApp
{
public:
    virtual BOOL InitInstance()
    {
        // ... 애플리케이션 초기화 코드 ...

        // 메시지 루프 유지
        while (PumpMessage())
        {
            // 메시지 처리
        }

        return FALSE; // 메시지 루프를 빠져나가지 않도록 합니다.
    }
};

CMyApp thetheApp;

MFC 애플리케이션은 주로 메시지 기반으로 동작합니다. 메인 함수에서 메시지 루프를 유지하면 애플리케이션이 종료되지 않고 계속 실행됩니다. 메시지 루프는 CWinApp::Run() 함수에서 처리됩니다.

 

2. 윈도우 닫기 버튼 처리 

LRESULT CMyWnd::OnClose(WPARAM wParam, LPARAM lParam)
{
    // 윈도우 닫기 버튼(X 버튼)을 눌렀을 때 호출되는 함수
    // 여기서 윈도우를 종료하지 않도록 처리
    return 0;
}

윈도우의 닫기 버튼(X 버튼)을 누를 때 메인 윈도우를 종료하지 않도록 처리할 수 있습니다. 이를 위해 윈도우 클래스에서 WM_CLOSE 메시지를 처리하고 DestroyWindow() 함수를 호출하지 않도록 합니다.

 

3. 종료 확인 대화 상자

int nResult = AfxMessageBox(_T("정말로 종료하시겠습니까?"), MB_YESNO | MB_ICONQUESTION);
if (nResult == IDYES)
{
    // 종료 처리
    // ...
}

사용자가 애플리케이션을 종료하려고 할 때 종료 여부를 확인하는 대화 상자를 표시할 수 있습니다. 이를 통해 사용자가 실수로 애플리케이션을 종료하는 것을 방지할 수 있습니다.

 

4.트레이 아이콘 사용

// 트레이 아이콘 추가
NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA);
// ... 아이콘 설정 및 기타 필요한 정보 설정 ...
Shell_NotifyIcon(NIM_ADD, &nid);

// 트레이 아이콘 클릭 시 처리
void CMyWnd::OnTrayIconClick()
{
    // 트레이 아이콘을 클릭했을 때 호출되는 함수
    // 애플리케이션을 복원하거나 다른 작업 수행
}

애플리케이션을 종료하지 않고 시스템 트레이에 아이콘을 표시하여 백그라운드에서 계속 실행되도록 할 수 있습니다.

반응형