이 노트에서는 내부 Windows 메시지 및 MFC 사용 하는 리소스 형식에 설명 합니다. 이 정보는 프레임 워크의 구현을 설명 하 고 응용 프로그램을 디버깅 하는 데 도움이 됩니다. 모험, 비록이 모든 정보를 공식적으로 지원 되지 사용할 수 있습니다이 정보 중 일부 고급 구현에 대 한。
이 노트 포함 MFC 개인 구현 세부 사항; 모든 내용을 차후에 변경 될 수 있습니다. MFC Windows 쪽지만 한 응용 프로그램의 범위에 의미가 하지만 나중에 시스템 전체 메시지를 포함 하도록 변경 됩니다.
MFC의 범위 개인 Windows 메시지와 리소스 종류는 "예약된 시스템" 범위에서 따로 설정 Microsoft Windows에서. 범위에 있는 현재 모든 숫자 들을 사용 하 고 미래에 새로운 숫자를 범위에 사용 될 수 있습니다. 현재 사용 되는 번호를 변경할 수 있습니다.
MFC 개인 Windows 메시지 범위 0x360 gt는; 0x37F(&G)。
MFC 개인 리소스 유형은 범위 0xF0 gt; 0xFF(&G)。
MFC 개인 Windows 메시지
이러한 Windows 메시지 c + + 가상 함수 대신 사용 됩니다 있는 비교적 느슨한 결합 이며 필요 window 개체 사이의 어디 c + + 가상 함수를 적절 한 되지 않을 것 이라고。
이러한 개인 Windows 메시지와 관련 된 매개 변수 구조 MFC의 전용 헤더에 선언 된 ' AFXPRIV.H'. 경고는이 헤더를 포함 하는 코드의 수 수에 의존 문서화 동작과 것입니다 가능성이 휴식 미래에 MFC의 버전。
이러한 메시지 중 하나를 처리합니다 하는 드문 경우에 ON_MESSAGE 메시지 맵 매크로 사용 해야 및 일반 LRESULT/WPARAM/LPARAM 형식에서 메시지 처리。
WM_QUERYAFXWNDPROC
이 메시지는 생성 되는 창으로 전송 됩니다. 이 경우는 Wndproc를 결정 하는 방법으로 생성 과정에서 매우 일찍 보내집니다 AfxWndProc. AfxWndProc 는 1을 반환합니다.
| wParam | 사용 되지 않음 |
| lParam | 사용 되지 않음 |
| 반환 | 1 AfxWndProc 에 의해 처리 하는 경우 |
WM_SIZEPARENT
이 메시지가 보내지고 프레임 창에 의해 즉시 하위 (CFrameWnd::OnSize 호출 호출 하는 CWnd::RepositionBars CFrameWnd::RecalcLayout )의 크기를 조정 하는 동안 컨트롤 막대는 프레임의 측의 주위에 위치 합니다. 부모와 DeferWindowPos 를 호출 하는 HDWP (이 NULL이 될 수 있습니다) 다시 그리기를 최소화 하기 위해 현재 사용할 수 있는 클라이언트 가시 사각형을 포함 하는 AFX_SIZEPARENTPARAMS 구조。
| wParam | 사용 되지 않음 |
| lParam | AFX_SIZEPARENTPARAMS 구조체의 주소 |
| 반환 | (0)를 사용 하지 |
창 레이아웃에서 부분을 고려 하지 않습니다 나타냅니다 메시지를 무시 하 고。
WM_SETMESSAGESTRING
이 메시지는 상태 표시줄의 메시지 줄을 업데이트 하 게 프레임 창으로 전송 됩니다. 문자열 ID 나는 LPCSTR (둘 다)만 지정할 수 있습니다.
| wParam | 문자열 ID (또는 0) |
| lParam | 문자열 (또는 NULL) LPCSTR |
| 반환 | (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 에 있도록 상황 종료 모드 게시 됩니다. 이 메시지의 수신을 종료 모달 루프에 의해 시작 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
이 메시지는 프레임 활성화 되거나 다른 최상위 수준 프레임 창이 비활성화 될 때 프레임 창에 의해 소유 하는 모든 팝업 창에 전송 됩니다. 이 CMiniFrameWnd에서 MFS_SYNCACTIVE 의 구현을 이러한 팝업 윈도우의 활성화의 최상위 수준 프레임 창이 활성화와 동기화를 유지 하는。
| wParam | 다음 값 중 하나입니다. FS_SHOW FS_HIDE FS_ACTIVATE FS_DEACTIVATE FS_ENABLE FS_DISABLE FS_SYNCACTIVE |
| lParam | (0)를 사용 하지 |
반환 값은 0이 아닌 경우 FS_SYNCACTIVE 설정 하 고 창 syncronizes 여야 부모 프레임으로 정품 인증 합니다. CMiniFrameWnd 스타일으로 설정 된 경우 0이 아닌 반환 MFS_SYNCACTIVE.
자세한 내용은 다음 웹 사이트를 참조 하십시오. CMiniFrameWnd 구현。
WM_ACTIVATETOPLEVEL
이 메시지는 "최상위 그룹"의 창 활성화 또는 비활성화 하는 경우 최상위 창에 전송 됩니다. 창이 최상위 창 (부모 또는 소유자), 또는 같은 창에 의해 소유 하는 경우 최상위 그룹의 일부입니다. 이 메시지는 WM_ACTIVATEAPP, 사용와 유사 하지만 다른 프로세스에 속하는 windows (OLE 응용 프로그램에서 공통) 단일 창 계층에서 혼합 되어 상황에서 작동。
WM_QUERY3DCONTROLS
이 메시지는 창 ctl3d32에 의해 서브클래싱된 해야 경우 확인 하려면 창 생성 하는 동안 전송 됩니다.DLL. 기본 3 차원 컨트롤에 대해 설정 되어 CControlBar, CDialog, CPropertySheet 및 CFormView.
| wParam | (0)를 사용 하지 |
| lParam | (0)를 사용 하지 |
| 반환 | 비-제로 CTL3D.nbsp;와 서브 반환 값은 사용 하는 호출에 대 한 Ctl3dSubclassDlgEx.(&N) |
WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE
이러한 메시지는 상황에 맞는 도움말 구현에서 사용 됩니다. 자세한 내용은 기술 노트 28 참조 하십시오。
MFC 개인 리소스 형식
거기에 현재 단 하나의 MFC 개인 리소스 형식 정의 RT_DLGINIT。
RT_DLGINIT 리소스 형식
추가 대화 상자 초기화 정보를 저장 한 MFC 전용 리소스 형식이 사용 됩니다. 이 콤보 상자에 저장 된 초기 문자열을 포함 합니다. 이 리소스의 형식을 수동으로 편집 하도록 설계 되지 않았습니다 있지만 Visual c + +에 의해 처리。
Visual c + + 및 RT_DLGINIT 리소스에이 리소스에서 정보를 사용 하 여 API 대체 되므로 MFC의 관련된 기능을 사용할 필요는 없습니다. Visual c + +를 사용 하 여 훨씬 쉽게 작성 하 고, 유지 하 고, 긴 안목으로 보면 응용 프로그램 번역。
RT_DLGINIT 리소스의 기본 구조는 다음과 같습니다.:
+---------------+nbsp;?????????????????? \
| 컨트롤 ID (ko) |?? UINT (KO) |
+---------------+??????????????????? |
| # 메시지 (ko) |?? UINT (KO) |
+---------------+??????????????????? |
데이터의 |length (ko) |?? DWORD (KO) |
+---------------+??????????????????? | 반복
|?? 데이터 |?? 가변 길이 (ko) |?? 각 컨트롤에 대 한
|???? ...????? |?? 형식 (ko) |?? 그리고 메시지
+---------------+??????????????????? /
|???? 0???????? |?? 바이트
+---------------+(&N)
메시지를 보내는 컨트롤 ID를 포함 하는 반복된 구역 메시지 보내기 (일반 Windows 메시지)와 데이터의 가변 길이 #. Windows 메시지 형태로 전송 됩니다.:
SendDlgItemMessage (lt;컨트롤 ID >, < # 메시지 > 0 & <Data>)
이것은 매우 일반적인 형식으로 데이터 콘텐츠 및 Windows 메시지를 허용 합니다. Visual c + + 리소스 편집기 및 MFC Windows 메시지의 제한 된 하위 집합 지원: (데이터는 텍스트 문자열) 콤보 상자에 대 한 초기 목록 선택에 대 한 CB_ADDSTRING。
기술 노트 번호로 |nbsp; 카테고리별 기술 노트(&N)