TN024: MFC에서 정의한 메시지 및 리소스

참고 항목

다음 기술 노트는 온라인 설명서에 먼저 포함되어 있었으므로 업데이트되지 않았습니다. 따라서 일부 절차 및 항목은 만료되거나 올바르지 않을 수 있습니다. 최신 정보를 보려면 온라인 설명서 색인에서 관심 있는 항목을 검색하는 것이 좋습니다.

이 참고에서는 MFC에서 사용하는 내부 Windows 메시지 및 리소스 형식에 대해 설명합니다. 이 정보는 프레임워크의 구현을 설명하고 애플리케이션 디버깅에 도움이 됩니다. 모험의 경우 이 모든 정보가 공식적으로 지원되지 않더라도 고급 구현에 이 정보 중 일부를 사용할 수 있습니다.

이 참고에는 MFC 프라이빗 구현 세부 정보가 포함되어 있습니다. 모든 콘텐츠는 나중에 변경될 수 있습니다. MFC 프라이빗 Windows 메시지는 하나의 애플리케이션 범위에서만 의미가 있지만 나중에 시스템 전체 메시지를 포함하도록 변경될 예정입니다.

MFC 프라이빗 Windows 메시지 및 리소스 유형의 범위는 Microsoft Windows에서 따로 설정한 예약된 "시스템" 범위에 있습니다. 현재 범위의 모든 숫자가 사용되지는 않으며 나중에 범위의 새 숫자가 사용될 수 있습니다. 현재 사용된 숫자가 변경될 수 있습니다.

MFC 프라이빗 Windows 메시지는 0x360-0x37F> 범위에 있습니다.

MFC 프라이빗 리소스 유형은 0xF0 0xFF> 범위에 있습니다.

MFC 프라이빗 Windows 메시지

이러한 Windows 메시지는 창 개체 간에 비교적 느슨한 결합이 필요하고 C++ 가상 함수가 적절하지 않은 C++ 가상 함수 대신 사용됩니다.

이러한 프라이빗 Windows 메시지 및 관련 매개 변수 구조는 MFC 프라이빗 헤더 'AFXPRIV'에 선언됩니다. H'. 이 헤더를 포함하는 코드는 문서화되지 않은 동작에 의존할 수 있으며 이후 버전의 MFC에서 중단될 수 있음을 경고합니다.

이러한 메시지 중 하나를 처리해야 하는 드문 경우는 ON_MESSAGE 메시지 맵 매크로를 사용하고 제네릭 LRESULT/WPARAM/LPARAM 형식으로 메시지를 처리해야 합니다.

WM_QUERYAFXWNDPROC

이 메시지는 생성 중인 창으로 전송됩니다. WndProc이 AfxWndProc인지 확인하는 방법으로 생성 프로세스 초기에 전송됩니다 . AfxWndProc 은 1을 반환합니다.

매개 변수 및 반환 값 설명
wParam 사용되지 않음
lParam 사용되지 않음
returns AfxWndProc에서 처리하는 경우 1

WM_SIZEPARENT

이 메시지는 프레임의 측면 주위에 컨트롤 막대의 위치를 변경하기 위해 크기 조정(CFrameWnd::OnSize호출 CWnd::RepositionBars호출CFrameWnd::RecalcLayout)하는 동안 프레임 창에서 직접 자식에게 전송됩니다. AFX_SIZEPARENTPARAMS 구조에는 부모의 현재 사용 가능한 클라이언트 사각형과 다시 그리기를 최소화하기 위해 호출 DeferWindowPos 할 HDWP(NULL일 수 있음)가 포함됩니다.

매개 변수 및 반환 값 설명
wParam 사용되지 않음
lParam AFX_SIZEPARENTPARAMS 구조체의 주소
returns 사용되지 않음(0)

메시지를 무시하면 창이 레이아웃에 포함되지 않습니다.

WM_SETMESSAGESTRING

이 메시지는 프레임 창으로 전송되어 상태 표시줄에서 메시지 줄을 업데이트하도록 요청합니다. 문자열 ID 또는 LPCSTR을 지정할 수 있지만 둘 다 지정할 수는 없습니다.

매개 변수 및 반환 값 설명
wParam 문자열 ID(또는 0)
lParam 문자열에 대한 LPCSTR(또는 NULL)
returns 사용되지 않음(0)

WM_IDLEUPDATECMDUI

이 메시지는 업데이트 명령 UI 처리기의 유휴 시간 업데이트를 구현하기 위해 유휴 시간에 전송됩니다. 창(일반적으로 컨트롤 막대)이 메시지를 처리하는 경우 개체(또는 파생 클래스의 개체)를 만들고 CCmdUI 창에서 각 "항목"을 호출 CCmdUI::DoUpdate 합니다. 그러면 명령 처리기 체인의 개체에 대한 ON_UPDATE_COMMAND_UI 처리기에 대한 검사.

매개 변수 및 반환 값 설명
wParam BOOL bDisableIfNoHandler
lParam 사용되지 않음(0)
returns 사용되지 않음(0)

bDisableIfNoHandler 는 ON_UPDATE_COMMAND_UI ON_COMMAND 처리기가 없는 경우 UI 개체를 사용하지 않도록 설정하는 0이 아닙니다.

WM_EXITHELPMODE

이 메시지는 상황에 맞는 도움말 모드를 CFrameWnd 종료하기 위해 게시됩니다. 이 메시지를 수신하면 .에서 시작된 모달 루프가 종료됩니다 CFrameWnd::OnContextHelp.

매개 변수 및 반환 값 설명
wParam 사용되지 않음(0)
lParam 사용되지 않음(0)
returns 사용되지 않음

WM_INITIALUPDATE

이 메시지는 문서 서식 파일에서 프레임 창의 모든 하위 항목으로 전송됩니다. 이 메시지는 초기 업데이트를 수행하는 것이 안전할 때 전송됩니다. 호출 CView::OnInitialUpdate 에 매핑되지만 다른 원샷 업데이트를 위해 다른 CWnd파생 클래스에서 사용할 수 있습니다.

매개 변수 및 반환 값 설명
wParam 사용되지 않음(0)
lParam 사용되지 않음(0)
returns 사용되지 않음(0)

WM_RECALCPARENT

이 메시지는 레이아웃 다시 계산을 강제로 적용하기 위해 뷰에서 부모 창(통해 GetParent가져온)으로 전송됩니다(일반적으로 부모가 호출 RecalcLayout). 이는 보기의 총 크기가 증가함에 따라 프레임의 크기가 커지는 데 필요한 OLE 서버 애플리케이션에서 사용됩니다.

부모 창에서 이 메시지를 처리하는 경우 TRUE를 반환하고 lParam에 전달된 RECT를 클라이언트 영역의 새 크기로 채워야 합니다. 이는 서버 개체가 현재 위치로 활성화될 때 스크롤 막대를 올바르게 처리하는 데 사용됩니다 CScrollView (추가될 때 창 외부에 배치).

매개 변수 및 반환 값 설명
wParam 사용되지 않음(0)
lParam LPRECT rectClient, NULL일 수 있음
returns 새 클라이언트 사각형이 반환되면 TRUE이고, 그렇지 않으면 FALSE입니다.

WM_SIZECHILD

이 메시지는 사용자가 크기 조정 핸들을 사용하여 크기 조정 막대의 크기를 조정할 때 소유자 창(통해GetOwner)으로 전송 COleResizeBar 됩니다. COleIPFrameWnd 는 사용자가 요청한 대로 프레임 창의 위치를 변경하려고 시도하여 이 메시지에 응답합니다.

크기 조정 막대가 포함된 프레임 창을 기준으로 클라이언트 좌표에 지정된 새 사각형은 lParam에서 가리켰습니다.

매개 변수 및 반환 값 설명
wParam 사용되지 않음(0)
lParam LPRECT rectNew
returns 사용되지 않음(0)

WM_DISABLEMODAL

이 메시지는 비활성화 중인 프레임 창이 소유한 모든 팝업 창으로 전송됩니다. 프레임 창은 결과를 사용하여 팝업 창을 사용하지 않도록 설정할지 여부를 결정합니다.

이를 사용하여 프레임이 모달 상태가 될 때 팝업 창에서 특수 처리를 수행하거나 특정 팝업 창이 비활성화되는 것을 방지할 수 있습니다. 예를 들어, 도구 설명은 프레임 창이 모달 상태로 전환되면 이 메시지를 사용하여 자신을 삭제합니다.

매개 변수 및 반환 값 설명
wParam 사용되지 않음(0)
lParam 사용되지 않음(0)
returns 0 이 아니면 창을 사용하지 않도록 설정합니다. 0은 창이 비활성화됨을 나타냅니다.

WM_FLOATSTATUS

이 메시지는 프레임이 활성화되거나 다른 최상위 프레임 창에 의해 비활성화될 때 프레임 창이 소유한 모든 팝업 창으로 전송됩니다. 이는 최상위 프레임 창의 활성화와 동기화된 이러한 팝업 창의 활성화를 유지하기 위해 MFS_SYNCACTIVE CMiniFrameWnd구현에서 사용됩니다.

매개 변수 설명
wParam 다음 값 중 하나입니다.

FS_SHOW

FS_HIDE

FS_ACTIVATE

FS_DEACTIVATE

FS_ENABLEFS_DISABLE

FS_SYNCACTIVE
lParam 사용되지 않음(0)

FS_SYNCACTIVE 설정되고 창이 부모 프레임과 활성화를 동기화하는 경우 반환 값은 0이 아니어야 합니다. CMiniFrameWnd 스타일이 MFS_SYNCACTIVE 설정되면 0이 아닌 값을 반환합니다.

자세한 내용은 .의 CMiniFrameWnd구현을 참조하세요.

WM_ACTIVATETOPLEVEL

이 메시지는 "최상위 그룹"의 창이 활성화되거나 비활성화될 때 최상위 창으로 전송됩니다. 창이 최상위 창(부모 또는 소유자 없음)이거나 해당 창이 소유한 경우 최상위 그룹의 일부입니다. 이 메시지는 WM_ACTIVATEAPP 사용하는 것과 비슷하지만, 여러 프로세스에 속하는 창이 단일 창 계층 구조(OLE 애플리케이션에서 일반적)에 혼합되는 상황에서 작동합니다.

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

이러한 메시지는 상황에 맞는 도움말의 구현에 사용됩니다. 자세한 내용은 Technical Note 28을 참조하세요.

MFC 프라이빗 리소스 형식

현재 MFC는 RT_TOOLBAR 및 RT_DLGINIT 두 개의 프라이빗 리소스 형식을 정의합니다.

RT_TOOLBAR 리소스 형식

AppWizard에서 제공하는 기본 도구 모음은 MFC 4.0에서 도입된 RT_TOOLBAR 사용자 지정 리소스를 기반으로 합니다. 도구 모음 편집기를 사용하여 이 리소스를 편집할 수 있습니다.

RT_DLGINIT 리소스 형식

하나의 MFC 프라이빗 리소스 형식은 추가 대화 초기화 정보를 저장하는 데 사용됩니다. 여기에는 콤보 상자에 저장된 초기 문자열이 포함됩니다. 이 리소스의 형식은 수동으로 편집하도록 설계되지 않았지만 Visual C++에서 처리됩니다.

리소스의 정보를 사용하는 API 대안이 있으므로 Visual C++ 및 이 RT_DLGINIT 리소스는 MFC의 관련 기능을 사용할 필요가 없습니다. Visual C++를 사용하면 장기적으로 애플리케이션을 훨씬 쉽게 작성하고, 기본, 번역할 수 있습니다.

RT_DLGINIT 리소스의 기본 구조는 다음과 같습니다.

+---------------+    \
| Control ID    |   UINT             |
+---------------+    |
| Message #     |   UINT             |
+---------------+    |
|length of data |   DWORD            |
+---------------+    |   Repeated
|   Data        |   Variable Length  |   for each control
|   ...         |   and Format       |   and message
+---------------+    /
|     0         |   BYTE
+---------------+

반복되는 섹션에는 메시지를 보낼 컨트롤 ID, 보낼 메시지 #(일반 Windows 메시지) 및 데이터의 가변 길이가 포함됩니다. Windows 메시지는 다음과 같은 형식으로 전송됩니다.

SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);

이는 Windows 메시지 및 데이터 콘텐츠를 허용하는 매우 일반적인 형식입니다. Visual C++ 리소스 편집기 및 MFC는 제한된 Windows 메시지 하위 집합만 지원합니다. CB_ADDSTRING 콤보 상자의 초기 목록 선택 항목(데이터는 텍스트 문자열)에 대한 것입니다.

참고 항목

번호별 기술 참고 사항
범주별 기술 참고 사항