비고
다음 기술 정보는 온라인 설명서에 처음 포함되었으므로 업데이트되지 않았습니다. 따라서 일부 절차와 항목이 만료되거나 올바르지 않을 수 있습니다. 최신 정보는 온라인 설명서 인덱스의 관심 항목을 검색하는 것이 좋습니다.
이 참고에서는 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 | 사용되지 않음 |
| 반환 | AfxWndProc에서 처리하는 경우 1 |
WM_SIZEPARENT
이 메시지는 프레임 창에서 크기 조정 중에(CFrameWnd::OnSize 호출 CFrameWnd::RecalcLayout 호출 CWnd::RepositionBars) 프레임의 측면 주변에 있는 컨트롤 막대의 위치를 재배치하기 위해 직접 자식에게 전송됩니다. AFX_SIZEPARENTPARAMS 구조에는 부모의 사용 가능한 클라이언트 사각형과 HDWP(NULL일 수 있음)를 사용하여 DeferWindowPos을 호출해 다시 그리기를 최소화하기 위한 정보가 포함됩니다.
| 매개 변수 및 반환 값 | 설명 |
|---|---|
| wParam | 사용되지 않음 |
| lParam | AFX_SIZEPARENTPARAMS 구조체의 주소 |
| 반환 | 사용되지 않음(0) |
메시지를 무시하면 창이 레이아웃에 포함되지 않습니다.
WM_SETMESSAGESTRING
이 메시지는 상태 표시줄에서 메시지 줄을 업데이트하도록 요청하는 프레임 창으로 전송됩니다. 문자열 ID 또는 LPCSTR을 지정할 수 있지만 둘 다 지정할 수는 없습니다.
| 매개 변수 및 반환 값 | 설명 |
|---|---|
| wParam | 문자열 ID(또는 0) |
| lParam | 문자열에 대한 LPCSTR(또는 NULL) |
| 반환 | 사용되지 않음(0) |
WM_IDLEUPDATECMDUI
이 메시지는 업데이트 명령 UI 처리기의 유휴 시간 업데이트를 구현하기 위해 유휴 시간에 전송됩니다. 창(일반적으로 컨트롤 막대)이 메시지를 처리하는 경우, CCmdUI 개체(또는 파생 클래스의 개체)를 생성하고, 창에 있는 각 "항목"에 대해 CCmdUI::DoUpdate 을 호출합니다. 그러면 명령 처리기 체인의 개체에 대한 ON_UPDATE_COMMAND_UI 처리기가 확인됩니다.
| 매개 변수 및 반환 값 | 설명 |
|---|---|
| wParam | BOOL bDisableIfNoHandler (핸들러 없음 시 비활성화 여부) |
| lParam (엘파람) | 사용되지 않음(0) |
| 반환 | 사용되지 않음(0) |
bDisableIfNoHandler가 0이 아닐 경우, ON_UPDATE_COMMAND_UI나 ON_COMMAND 처리기가 없으면 UI 개체를 사용하지 않도록 설정합니다.
WM_EXITHELPMODE
이 메시지는 컨텍스트 민감 도움말 모드를 종료하기 위해 게시됩니다. 이 메시지를 수신하면 .에서 시작된 모달 루프가 종료됩니다 CFrameWnd::OnContextHelp.
| 매개 변수 및 반환 값 | 설명 |
|---|---|
| wParam | 사용되지 않음(0) |
| lParam | 사용되지 않음(0) |
| 반환 | 사용되지 않음 |
WM_INITIALUPDATE
이 메시지는 문서 서식 파일에서 프레임 창의 모든 하위 항목으로 전송됩니다. 이 메시지는 초기 업데이트를 수행하는 것이 안전할 때 전송됩니다.
CView::OnInitialUpdate 호출에 매핑되지만, 다른 일회성 업데이트를 위해 다른 CWnd 파생 클래스에서도 사용할 수 있습니다.
| 매개 변수 및 반환 값 | 설명 |
|---|---|
| wParam | 사용되지 않음(0) |
| lParam | 사용되지 않음(0) |
| 반환 | 사용되지 않음(0) |
WM_RECALCPARENT
이 메시지는 레이아웃을 다시 계산하도록 강제로 적용하기 위해 뷰에서 (보통 부모가 GetParent을 호출하는) 부모 창(RecalcLayout을 통해 가져옴)으로 전송됩니다. 이는 보기의 총 크기가 증가함에 따라 프레임의 크기가 커지는 데 필요한 OLE 서버 애플리케이션에서 사용됩니다.
부모 창에서 이 메시지를 처리하는 경우 TRUE를 반환하고 lParam에 전달된 RECT를 클라이언트 영역의 새 크기로 채워야 합니다. 이는 서버 개체가 현재 위치에서 활성화될 때 스크롤 막대를 올바르게 처리하기 위해 사용됩니다. 스크롤 막대가 추가될 때 창 외부에 배치합니다 CScrollView.
| 매개 변수 및 반환 값 | 설명 |
|---|---|
| wParam | 사용되지 않음(0) |
| lParam | LPRECT rectClient, NULL일 수 있음 |
| 반환 | 새 클라이언트 사각형이 반환되면 TRUE이고, 그렇지 않으면 FALSE입니다. |
WM_SIZECHILD
이 메시지는 사용자가 크기 조정 핸들을 사용하여 크기 조정 막대의 크기를 조정할 때, COleResizeBar가 GetOwner를 통해 소유자 창으로 전송됩니다.
COleIPFrameWnd 는 사용자가 요청한 대로 프레임 창의 위치를 변경하려고 시도하여 이 메시지에 응답합니다.
크기 조정 막대가 포함된 프레임 창을 기준으로 클라이언트 좌표에 지정된 새 사각형은 lParam에서 가리켰습니다.
| 매개 변수 및 반환 값 | 설명 |
|---|---|
| wParam | 사용되지 않음(0) |
| lParam | LPRECT rectNew |
| 반환 | 사용되지 않음(0) |
WM_DISABLEMODAL
이 메시지는 비활성화 중인 프레임 창이 소유한 모든 팝업 창으로 전송됩니다. 프레임 창은 결과를 사용하여 팝업 창을 사용하지 않도록 설정할지 여부를 결정합니다.
이를 사용하여 프레임이 모달 상태가 될 때 팝업 창에서 특수 처리를 수행하거나 특정 팝업 창이 비활성화되는 것을 방지할 수 있습니다. 예를 들어, 툴팁은 프레임 창이 모달 상태로 전환되면 이 메시지를 사용하여 자체 삭제합니다.
| 매개 변수 및 반환 값 | 설명 |
|---|---|
| wParam | 사용되지 않음(0) |
| lParam | 사용되지 않음(0) |
| 반환 | 0이 아니면 창을 사용하지 않도록 설정합니다. 0은 창이 비활성화됨을 나타냅니다. |
WM_FLOATSTATUS
이 메시지는 프레임이 활성화되거나 다른 최상위 프레임 창에 의해 비활성화될 때 프레임 창이 소유한 모든 팝업 창으로 전송됩니다. 이는 최상위 프레임 창의 활성화와 동기화된 이러한 팝업 창의 활성화를 유지하기 위해 MFS_SYNCACTIVE CMiniFrameWnd구현에서 사용됩니다.
| 매개 변수 | 설명 |
|---|---|
| wParam | 다음 값 중 하나입니다. FS_SHOW FS_숨김 기능_활성화 FS_비활성화 FS_ENABLEFS_DISABLE FS_SYNCACTIVE |
| lParam | 사용되지 않음(0) |
FS_SYNCACTIVE 설정되고 창이 부모 프레임과 활성화를 동기화하는 경우 반환 값은 0이 아니어야 합니다.
CMiniFrameWnd 스타일이 MFS_SYNCACTIVE 설정되면 0이 아닌 값을 반환합니다.
자세한 내용은 .의 CMiniFrameWnd구현을 참조하세요.
WM_최상위활성화
이 메시지는 "최상위 그룹"의 창이 활성화되거나 비활성화될 때 최상위 창으로 전송됩니다. 창이 최상위 창(부모 또는 소유자 없음)이거나 해당 창이 소유한 경우 최상위 그룹의 일부입니다. 이 메시지는 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 콤보 상자의 초기 목록 선택 항목(데이터는 텍스트 문자열)에 대한 것입니다.
참고하십시오
숫자로 된 기술 노트
범주별 기술 정보