Share via


특수 CWinApp 서비스

메시지 루프를 실행하고 애플리케이션을 초기화하고 그 후에 클린 수 있는 기회를 제공하는 것 외에도 CWinApp은 몇 가지 다른 서비스를 제공합니다.

셸 등록

기본적으로 MFC 애플리케이션 마법사를 사용하면 파일 탐색기 또는 파일 관리자에서 두 번 클릭하여 애플리케이션에서 생성된 데이터 파일을 열 수 있습니다. 애플리케이션이 MDI 애플리케이션이고 애플리케이션이 만드는 파일에 대한 확장을 지정하는 경우 MFC 애플리케이션 마법사는 CWinApp의 RegisterShellFileTypesEnableShellOpen 멤버 함수에 InitInstance 대한 호출을 추가하여 사용자가 작성하는 재정의를 수행합니다.

RegisterShellFileTypes는 사용자의 애플리케이션 문서 형식을 파일 탐색기 또는 파일 관리자에 등록합니다. 이 함수는 Windows에서 유지 관리되는 등록 데이터베이스에 항목을 추가합니다. 항목은 각 문서 유형을 등록하고, 파일 확장자를 해당 파일 형식과 연결하고, 애플리케이션을 열기 위한 명령줄을 지정하고, 해당 형식의 문서를 열기 위해 DDE(동적 데이터 교환) 명령을 지정합니다.

EnableShellOpen은 파일 탐색기 또는 파일 관리자에서 DDE 명령을 수신하도록 허용하여 프로세스를 완료하고 사용자가 선택한 파일을 엽니다.

CWinApp의 이러한 자동 등록 지원 덕분에 애플리케이션에 .reg 파일을 포함하거나 특별한 설치 작업을 수행할 필요가 없습니다.

InitInstance 함수에서 GdiplusStartup을 호출하여 애플리케이션에 대해 GDI+를 초기화하려면 GDI+ 백그라운드 스레드를 표시하지 않도록 해야 합니다.

GdiplusStartupInput 구조체의 멤버를 TRUE로 설정 SuppressBackgroundThread 하여 이 작업을 수행할 수 있습니다. GDI+ 백그라운드 스레드 NotificationHook 를 표시하지 않는 경우 애플리케이션의 메시지 루프를 입력하고 종료하기 직전에 호출 NotificationUnhook 을 수행해야 합니다. 이러한 호출에 대한 자세한 내용은 GdiplusStartupOutput을 참조하세요. 따라서 호출 GdiplusStartup 하기에 좋은 위치이며 후크 알림 함수는 아래와 같이 가상 함수 CWinApp::Run의 재정의에 있습니다.

int CMyWinApp::Run()
{
   GdiplusStartupInput gdiSI;
   GdiplusStartupOutput gdiSO;
   ULONG_PTR gdiToken;
   ULONG_PTR gdiHookToken;

   gdiSI.SuppressBackgroundThread = TRUE;
   GdiplusStartup(&gdiToken, &gdiSI, &gdiSO);
   gdiSO.NotificationHook(&gdiHookToken);
   int nRet = CWinApp::Run();

   gdiSO.NotificationUnhook(gdiHookToken);
   GdiplusShutdown(gdiToken);

   return nRet;
}

백그라운드 GDI+ 스레드를 숨기지 않으면, 해당 기본 창이 생성되기 전에 DDE 명령이 애플리케이션에 너무 빨리 실행될 수 있습니다. 셸에서 실행된 DDE 명령은 중간에 중단되어 오류 메시지가 나타날 수 있습니다.

파일 관리자 끌어서 놓기

파일은 파일 관리자 또는 파일 탐색기의 파일 보기 창에서 애플리케이션의 창으로 끌어 놓을 수 있습니다. 예를 들어 MDI 애플리케이션의 기본 창에 하나 이상의 파일을 끌어 놓을 수 있도록 설정해야 할 수 있습니다. 여기에서 애플리케이션은 해당 파일에 대한 파일 이름을 검색하고 MDI 자식 창을 열 수 있습니다.

애플리케이션에서 파일 끌어서 놓기를 사용하도록 설정하기 위해 MFC 애플리케이션 마법사는 기본 프레임 창에 대한 CWnd 멤버 함수 DragAcceptFilesInitInstance대한 호출을 씁니다. 끌어서 놓기 기능을 구현할 필요가 없으면 이 호출을 제거할 수 있습니다.

참고 항목

또한 OLE를 사용하면 문서 간 또는 문서 내에서의 데이터 끌기와 같은 보다 일반적인 끌어서 놓기 기능을 구현할 수도 있습니다. 자세한 내용은 OLE 끌어서 놓기 문서를 참조하세요.

가장 최근에 사용한 문서 추적

사용자가 파일을 열고 닫을 때 애플리케이션 개체는 최근에 사용된 4개 파일에 대한 추적을 유지합니다. 이러한 파일의 이름은 파일 메뉴에 추가되며 변경될 경우 업데이트됩니다. 프레임워크는 레지스트리 또는 .ini 파일에서 프로젝트와 동일한 이름을 사용해서 이러한 파일 이름을 저장하고, 애플리케이션이 시작될 때 파일에서 이를 읽어옵니다. MFC 애플리케이션 마법사에서 만드는 재정의에는 InitInstance 가장 최근에 사용한 파일 이름을 포함하여 레지스트리 또는 .ini 파일에서 정보를 로드하는 CWinApp 멤버 함수 LoadStdProfile설정 호출이 포함됩니다.

이러한 항목은 다음과 같이 저장됩니다.

  • Windows NT, Windows 2000 이상에서 값은 레지스트리 키에 저장됩니다.

  • Windows 3.x에서 값은 WIN.INI 파일에 저장됩니다.

  • Windows 95 이상에서 값은 WIN.INI 의 캐시된 버전에 저장됩니다.

참고 항목

CWinApp: 애플리케이션 클래스