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 콤보 상자의 초기 목록 선택 항목(데이터는 텍스트 문자열)에 대한 것입니다.