액셀러레이터 키 및 주 메뉴 Visual C++ 에서 대화 상자에서 사용하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 100770 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

요약

많은 응용 프로그램이 주 응용 프로그램 창으로 모달 대화 상자를 사용합니다. 이 기술을 사용하는 응용 프로그램의 주 메뉴에서 대화 상자 포함할 수도 있습니다. 일반적으로 연결된 바로 가기를 메뉴 항목 중 하나 이상이 있습니다. 이 문서에서는 MFC 응용 프로그램 마법사 대화 상자 기반 응용 프로그램에 메뉴와 키보드 액셀러레이터 키를 추가하는 데 필요한 단계를 설명합니다.

추가 정보

Visual C++ 및 Microsoft Windows 소프트웨어 개발 키트 (SDK)를 사용하여 Microsoft Windows 운영 체제에 대한 개발할 수 및 액셀러레이터 키 사용하는 일반적인 응용 프로그램에서 해당 주 메시지 루프가 TranslateAccelerator() 함수를 호출합니다. 그러나 주 창으로 모달 대화 상자를 사용하면 응용 프로그램의 주 메시지 루프가 없는, 대신 응용 프로그램이 번역하고 메시지를 발송하는 데 (Windows에 기본 제공된) 대화 상자에서 관리자 메시지 루프를 사용합니다. 물론 이 메시지 루프를 액셀러레이터 키를 처리하도록 디자인되었기 때문에 TranslateAccelerator() 함수를 호출하지 않습니다.

모달 대화 상자의 MFC에서 액셀러레이터 키를 처리하는 데 CWinApp::ProcessMessageFilter() 함수를 재정의해야 합니다. 메시지를 처리하기 전에 ProcessMessageFilter() 프레임워크에서가 호출합니다.

액셀러레이터 키를 올바르게 처리하도록 Visual C++ .NET의 MFC 응용 프로그램 마법사 대화 상자 기반 응용 프로그램 형식을 수정하려면 다음과 같이 하십시오.
  1. Visual Studio .NET에서 새 MFC 응용 프로그램을 만듭니다. 왼쪽 창에서 MFC 응용 프로그램 마법사의 응용 프로그램 종류 를 클릭한 다음 응용 프로그램 종류대화 상자 기반 로 설정되어 있는지 확인하십시오.
  2. 리소스 뷰에서 대화 상자 리소스 편집기를 열려면 대화 상자 리소스를 두 번 클릭하십시오. 대화 상자 리소스가 리소스 ID (응용 프로그램 프로젝트를 만들 때 지정한 이름이 MYPROJECT 곳에) IDD_ MYPROJECT _DIALOG 비슷합니다.
  3. 대화 상자 리소스를 열기 대화 상자 리소스 편집기에서 속성 창을 찾습니다. 대화 상자의 테두리 속성을 편집하고 좁게 테두리 스타일을 지정하십시오. 이 단계는 메뉴가 들어 있는 대화 상자가 필요합니다.
  4. 라는 최상위 항목을 포함하는 새 메뉴 리소스를 & 파일 및 명명된 항목 메뉴에서 & Exit\tCTRL + E 만듭니다 (Ctrl + E를 대신 사용할 수 있도록 Ctrl + X를 사용하여 텍스트 잘라내기, 일반적으로 관련된 있음).
  5. 메뉴 편집기에서 새로 만든된 끝내기 메뉴 항목을 클릭하십시오. 속성 창에서 끝내기 메뉴 항목에 대한 ID 속성의 ID_FILE_EXIT 로 설정되어 있는지 확인하십시오.
  6. 새 메뉴를 메뉴 속성 대화 상자 리소스를 메뉴 ID를 입력하여 대화 상자를 사용하여 연결하십시오. 대화 상자 리소스에 대한 대화 상자 편집기를 열고 속성 창에서 메뉴 속성을 찾습니다. 메뉴 4단계에서 만든 리소스 ID를 설정하십시오. 이렇게 하려면 메뉴 속성 행의 드롭다운 목록을 클릭한 다음 목록에서 메뉴에 대한 리소스 ID를 누릅니다.
  7. 메뉴 편집기, 오른쪽 및 Exit\tCTRL + E, 이벤트 처리기 추가 클릭합니다.
  8. 이벤트 처리기 마법사 COMMAND 메시지 형식을 선택하십시오. 생성된 처리기에 대한 주 클래스가 CDialog 파생 클래스 목록에서 선택하십시오. 함수 처리기 이름 적절한지 확인한 다음 메뉴 항목을 이벤트 처리기를 만들려면 추가 및 편집 을 클릭하십시오.
  9. 8 단계에서 생성되는 끝내기 메뉴 항목 이벤트 처리기 메서드 함수에서 다음 줄을 삽입합니다:
    PostMessage(WM_COMMAND, IDOK, 0L);
    					
    이것은 사용자가 파일 메뉴에서 끝내기 를 클릭하면 확인 을 클릭하는 것과 같은 효과를 만듭니다. 확인 을 클릭하여 대화 상자를 응용 프로그램을 닫습니다.

  10. 새 액셀러레이터 리소스를 만들고 Ctrl + E를 연결할 키 조합을 사용하여 ID_FILE_EXIT. 변경 내용을 저장하십시오.
  11. # include 문 다음에 다음 전역 변수를 선언하는 Stdafx.h 파일을 편집하여:
    extern HWND    ghDlg;          // Handle to main dialog box.
    extern HACCEL  ghAccelTable;   // Handle to accelerator table.
    					
  12. CWinApp 포함하는 .cpp 파일에서 다음 전역 변수 초기화가 파생된 클래스의 구현 (일반적으로 .cpp 파일과 기본 이름이 동일한 프로젝트 이름) 추가:
    HWND    ghDlg = 0;          // Handle to main dialog box.
    HACCEL  ghAccelTable = 0;   // Handle to accelerator table.
    					
  13. CDialog 파생된 클래스 (기본 정보 대화 상자를 구현하는 없습니다 대화 클래스), OnInitDialog() 메서드를 찾습니다. 필요한 경우 OnInitDialog() 메서드에 대한 재정의를 추가할 수 있습니다. 이렇게 하려면 클래스 뷰 창에서 CDialog 파생 클래스 선택하려면 누른 다음 재정의 속성 창에서. OnInitDialog 행을 찾아 오른쪽 열을 클릭하십시오. 이 클래스는 OnInitDialog() 재정의하지 않은 경우 재정의를 만들 수가 있습니다.
  14. 다음 코드 줄을 포함할 앞서 추가한 함수 편집:
    ghDlg = m_hWnd;
    					
  15. CWinApp 파생 구현을 포함하는 .cpp 파일에서 InitInstance() 클래스 메서드를 찾습니다. 기본 클래스 CWinApp::InitInstance() 호출하면 즉시 다음 줄을 추가합니다:
    ghAccelTable = LoadAccelerators(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(IDR_ACCELERATOR1));
    					
    참고: 여기서 사용된 이 리소스 ID (IDR_ACCELERATOR1)는 추가된 액셀러레이터 키 테이블 리소스를 ID입니다 단계 10에서.

  16. CWinApp 파생 클래스 ProcessMessageFilter() 클래스 메서드에 대한 재정의를 추가하십시오. 이렇게 클래스 보기 창에서 프로젝트에 CWinApp 파생 클래스를 선택하십시오. 그런 다음 속성 창에서 재정의 를 클릭하십시오. 속성 창에서 ProcessMessageFilter 행 찾아 해당 행의 맨 오른쪽 열을 선택하십시오. 드롭다운 화살표를 클릭한 다음 ProcessMessageFilter 메서드에 대한 재정의를 추가하려면 옵션을 클릭하십시오.
  17. 다음 구현을 가질 수 있도록 ProcessMessageFilter() 메서드 재정의가 편집:
    BOOL CMyProjectApp::ProcessMessageFilter(int code, LPMSG lpMsg)
           {
              if (code < 0)
                 CWinApp::ProcessMessageFilter(code, lpMsg);
    
              if (ghDlg && ghAccelTable)
                 {
                 if (::TranslateAccelerator(ghDlg, ghAccelTable, lpMsg))
                    return(TRUE);
                 }
    
             return CWinApp::ProcessMessageFilter(code, lpMsg);
          }
    					
  18. 컴파일하고 응용 프로그램을 실행하십시오. 참고 메뉴에 있습니다. 파일 메뉴에서 끝내기 를 클릭하거나 Ctrl + E를 누릅니다 때 예상대로 수 응용 프로그램을 닫습니다.

속성

기술 자료: 100770 - 마지막 검토: 2006년 11월 21일 화요일 - 수정: 3.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Foundation Class Library 4.2?을(를) 다음과 함께 사용했을 때
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 5.0 Standard Edition
    • Microsoft Visual C++ 6.0 서비스 팩 5
    • Microsoft Visual C# .NET 2002 Standard Edition
키워드:?
kbmt kbacceleratorkey kbhowto kbkeyaccel kbmenu kbui KB100770 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com