이 노트 Microsoft Windows에 필요한 특별 한 WNDCLASSes를 등록 하는 MFC 루틴을 설명 합니다. MFC에서 사용 하는 특정 WNDCLASS 특성 및 Windows를 설명 하는。
문제
Windows에서 HWND 처럼 CWnd 개체의 특성은 두 위치에 저장 됩니다: window 개체와 WNDCLASS. WNDCLASS c + + 클래스 보다 다르다. LpszClassName 매개 변수에서 CWnd::Create 및 CFrameWnd::Create 와 같은 일반 창 생성 기능 WNDCLASS 의 이름을 전달 됩니다.
4 가지 방법 중 하나를 통해이 WNDCLASS 를 등록 해야 합니다.:
WNDCLASSes 및 MFC
창 클래스를 설명 하는 다양 한 분야의 WNDCLASS 구조 구성 됩니다. 다음은 필드 및 MFC 응용 프로그램에 사용 되는 방법。
| 스타일 | 창 스타일: 아래 참조 |
| LpfnWndProc | 창 프로시저 AfxWndProc 여야 합니다. |
| CbClsExtra | 사용 되지 않습니다 (0 이어야 함) |
| CbWndExtra | 사용 되지 않습니다 (0 이어야 함) |
| HInstance | AfxGetInstanceHandle 함께 자동으로 채워진다 |
| HIcon | 프레임 창에 대 한 아이콘을 아래 참조 |
| HCursor | 창 위에 마우스가 때 커서 아래 참조 |
| HbrBackground | 배경 색상을 아래 참조 |
| LpszMenuName | 사용 하지 (NULL 이어야 한다) |
| LpszClassName | 클래스 이름, 아래 참조 |
WNDCLASSes 제공
이전 버전의 MFC (MFC 4.0) 하기 전에, 제공 하는 미리 정의 된 창 클래스의 숫자가 했다. 이러한 창 클래스의 버전 관리 (MFC의 여러 버전 하나의 주소 공간에 로드 된) 뿐만 아니라 MFC 응용 프로그램과 OLE 컨트롤 MFC Dll을 사용할 수 없습니다 사실에 관련 된 문제에 관련 된 기술적인 문제 때문에 기본적으로 더 이상 제공 됩니다.
다음 참조는 이러한 이전 WNDCLASSes를 제공를 사용 하는 코드를 마이그레이션할 수 있도록 제공 됩니다. 응용 프로그램은 이러한 클래스 대신 AfxRegisterWndClass (와 적절 한 매개 변수)를 사용 해야。
다음은 클래스와 그들의 특성:
지정 된 리소스 ID (예를 들어, AFX_IDI_STD_FRAME) ID 사용 하 여 리소스를 제공 하는 응용 프로그램, MFC 리소스를 사용 하 여 있는 것입니다. 그렇지 않으면 기본 리소스가 사용 됩니다. 아이콘에 대 한 표준 응용 프로그램 아이콘을 사용 하 고 표준 화살표 커서를 사용 하는 커서,。
단일 문서 형식 (기본 응용 프로그램에 대 한 하나의 아이콘, 아이코 닉 문서/MDIChild 창에 대 한 다른 아이콘)와 MDI 응용 프로그램을 지 원하는 두 개의 아이콘이 있습니다. 다른 아이콘 다중 문서 형식에 대 한 추가 WNDCLASSes를 등록 해야 합니다 또는 CFrameWnd::LoadFrame 함수를 사용 하 여。
CFrameWnd::LoadFrame 에 WNDCLASS 표준 "AfxFrameOrView" 속성을 사용 하 여 있지만 LoadFrame 첫 번째 매개 변수로 지정 하는 아이콘 ID를 사용 하 여 자동으로 등록。
MDIFrameWnd 의 클라이언트 영역을 "MDICLIENT" 창에 의해 완전히 덮여 이후 배경색에 대 한 값과 MDIFrameWnd 에 대 한 커서 사용 되지 않습니다. Microsoft 권장 하지 않습니다 표준 색과 커서 유형 가능한 경우 사용 너무 "MDICLIENT" 창 서브클래싱。
컨트롤 서브클래싱
만약 당신이 서브 클래스 또는 슈퍼 클래스는 Windows 제어 (예: CButton) 다음 클래스 자동으로 해당 컨트롤의 Windows 구현에서 제공 하는 WNDCLASS 특성을 가져옵니다.
AfxRegisterWndClass 함수
MFC 창 클래스를 등록 하기 위한 도우미 루틴을 제공 합니다. 특성 (창 클래스 스타일, 커서, 배경 브러시 및 아이콘) 집합을 감안할 때, 합성 이름 생성 되 고 결과 창 클래스를 등록 합니다. 예를 들어,
const char * AfxRegisterWndClass (UINT nClassStyle, HCURSOR hCursor, HBRUSH hbrBackground, HICON hIcon)
이 함수는 생성 된 등록 된 창 클래스 이름의 임시 문자열을 반환합니다. 자세한 내용은 클래스 라이브러리 참조 를 참조 하십시오。
반환 되는 문자열 AfxRegisterWndClass를 다음 호출 될 때까지 유효 하는 정적 문자열 버퍼에 임시 포인터입니다. 당신이 주위에이 문자열을 유지 하 고 싶다면 CString 변수에 저장 합니다. 예를 들어,
CString strWndClass = AfxRegisterWndClass (CS_DBLCLK,...);
...
CWnd * pWnd 새로운 CWnd; =
pWnd gt;(StrWndClass,...)을 생성;(&G)
AfxRegisterWndClass window 클래스 (나쁜 매개 변수의 때문에 또는 Windows 메모리) 등록에 실패 한 경우에 CResourceException 를 던 질 것 이다。
RegisterClass 및 AfxRegisterClass 함수
당신이 무엇이 AfxRegisterWndClass 제공 하는 것 보다 더 복잡 하 고 싶다면 RegisterClass Windows API 또는 MFC 함수 AfxRegisterClass를 호출할 수 있습니다. CWnd CFrameWnd , CMDIChildWnd 만들기 함수 창 클래스에 대 한 lpszClassName 문자열 이름을 첫 번째 매개 변수로 걸릴. 모든 창 클래스 이름을 사용할 수 있습니다, 그것을 등록 하는 방법에 관계 없이。
그것은 AfxRegisterClass (또는 AfxRegisterWndClass)에 Win32 DLL에서 사용 하는 것이 중요 합니다. Win32 그래서이 이루어져야 합니다 명시적으로 DLL 종료 될 때 DLL을 등록 하는 클래스를 자동으로 등록 되지 않습니다. RegisterClass 대신 AfxRegisterClass 를 사용 하 여이 당신을 위해 자동으로 수행 됩니다. AfxRegisterClass DLL에 의해 등록 된 고유한 클래스의 목록을 유지 하 고 DLL 종료 될 때 다음 등록 자동으로 됩니다. RegisterClass dll에서을 사용 하는 경우 DLL ( DllMain 함수)에서 종료 될 때 모든 클래스가 등록 되지 보장 해야 합니다. 그렇게 하지 않으면 RegisterClass 예기치 않게 다른 클라이언트 응용 프로그램에서 DLL을 사용 하는 경우 오류가 발생할 수 있습니다.
기술 노트 번호로 |nbsp; 카테고리별 기술 노트(&N)