TN001: 창 클래스 등록
특수 레지스터는 MFC 루틴이이 참고 설명 WNDCLASSes Microsoft Windows가 필요 합니다.특정 WNDCLASS 는 MFC 및 Windows에서 사용 되는 특성을 설명 합니다.
문제
특성은 CWnd 개체, 같은 HWND Windows에서 처리 하 고 두 위치에 저장 됩니다: window 개체 및 WNDCLASS.이름을 WNDCLASS 같은 일반적인 창 만들기 함수에 전달 CWnd::Create 및 CFrameWnd::Create 에 있는 lpszClassName 매개 변수.
이 WNDCLASS 네 가지 방법 중 하나를 통해 등록 해야 합니다.
암시적으로 제공 되는 MFC를 사용 하 여 WNDCLASS.
암시적으로 Windows 컨트롤 (또는 일부 다른 컨트롤) 싱 하 여.
MFC를 호출 하 여 명시적으로 AfxRegisterWndClass 또는 AfxRegisterClass.
Windows 루틴을 호출 하 여 명시적으로 RegisterClass.
WNDCLASS 필드
WNDCLASS 창 클래스를 설명 하는 다양 한 필드의 구조에 구성 됩니다.다음 표에서 필드를 표시 하 고 MFC 응용 프로그램에서 사용 되는 지정:
필드 |
설명 |
---|---|
lpfnWndProc |
창 프로시저 여야는AfxWndProc |
cbClsExtra |
사용 되지 않는 (0 이어야 합니다.) |
cbWndExtra |
사용 되지 않는 (0 이어야 합니다.) |
hInstance |
자동으로 채워진AfxGetInstanceHandle |
hIcon |
프레임 창에 대 한 아이콘이 아래 |
hCursor |
아래에 마우스의 창 위에 있을 때 커서를 참조 하십시오 |
hbrBackground |
배경색을 아래 참조 |
lpszMenuName |
사용 되지 않는 (NULL 이어야 합니다.) |
lpszClassName |
클래스 이름, 아래 참조 |
Wndclasses를 제공합니다.
이전 버전의 MFC (MFC 4.0), 전 몇 가지 미리 정의 된 창 클래스를 제공 합니다.이러한 창 클래스는 더 이상 기본적으로 제공 됩니다.응용 프로그램을 사용 해야 합니다 AfxRegisterWndClass 적절 한 매개 변수를 사용 합니다.
MFC 응용 프로그램 리소스에 지정 된 리소스 ID (예: AFX_IDI_STD_FRAME)를 제공 하는 경우 해당 리소스를 사용 합니다.그렇지 않은 경우 해당 기본 리소스를 사용 합니다.아이콘에 대 한 표준 응용 프로그램 아이콘을 사용 하 고 표준 화살표 커서는 커서를 사용 합니다.
두 아이콘 MDI 응용 프로그램의 단일 문서 형식 지원: 주 응용 프로그램에 대 한 아이콘, 아이콘 스크롤바 문서/MDIChild windows 용.다른 아이콘 다중 문서 형식에 대 한 추가 등록 해야 WNDCLASSes 또는 사용 하는 CFrameWnd::LoadFrame 함수.
CFrameWnd::LoadFrame등록은 WNDCLASS 첫 번째 매개 변수 및 다음 표준 속성으로 지정한 아이콘 ID를 사용 하 여:
클래스 스타일: CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW.
아이콘 AFX_IDI_STD_FRAME
화살표 커서입니다.
COLOR_WINDOW 배경색
배경색 및 커서에 대 한 값은 CMDIFrameWnd 이후 클라이언트 영역을 사용 하지 않습니다의 CMDIFrameWnd 가 완전히 가려져는 MDICLIENT 창.Microsoft 서브클래싱 권장 하지는 MDICLIENT 창을 사용 하므로 표준 색과 커서 유형이 사용 가능한 경우.
서브클래싱 및 컨트롤 슈퍼 클 래 싱
사용자 서브 클래스 또는 슈퍼 클래스는 Windows 제어 하는 경우 (예를 들어, CButton) 클래스를 자동으로 가져오고는 WNDCLASS Windows 컨트롤 구현에 제공 되는 특성입니다.
AfxRegisterWndClass 함수
MFC 창 클래스를 등록 하는 도우미 함수를 제공 합니다.(클래스 스타일 창, 커서, 배경 브러시 및 아이콘) 특성 집합이 주어 지 면 종합 이름을 생성 되 고 결과 창 클래스를 등록 합니다.다음 예제를 참조하십시오.
const char* AfxRegisterWndClass(UINT nClassStyle, HCURSOR hCursor, HBRUSH hbrBackground, HICON hIcon);
이 함수는 임시 문자열 생성 된 등록 된 창 클래스 이름을 반환합니다.이 함수에 대 한 자세한 내용은 AfxRegisterWndClass.
반환 된 문자열 임시 포인터 정적 문자열 버퍼입니다.다음 호출 될 때까지 잘못 된 AfxRegisterWndClass.이 문자열 주위에 유지 하려면 저장 된 CString 이 예제에서와 같이 변수:
CString strWndClass = AfxRegisterWndClass(CS_DBLCLK, ...);
...
CWnd* pWnd = new CWnd;
pWnd->Create(strWndClass, ...);
...
AfxRegisterWndClassthrow 되는 CResourceException 창 클래스 (잘못 된 매개 변수를 인해 또는 Windows 메모리 부족) 등록 하지 못했습니다 경우.
RegisterClass 하 고 AfxRegisterClass 함수
수행 하려는 경우 아무 것도 더 무엇 보다 정교한 AfxRegisterWndClass 에서 제공 하는 Windows API 호출 RegisterClass 또는 MFC 함수 AfxRegisterClass.CWnd, CFrameWnd 및 CMDIChildWndCreate 함수 사용은 lpszClassName 창 클래스의 첫 번째 매개 변수로 문자열 이름을.등록에 사용 하는 방법에 관계 없이 등록 된 창 클래스 이름에 사용할 수 있습니다.
사용 하는 것이 중요 AfxRegisterClass (또는 AfxRegisterWndClass)에서 Win32 dll.Win32 DLL 종료 될 때 명시적으로 클래스를 등록 해야 하므로 여 DLL을 등록 하는 클래스 자동으로 등록 하지 않습니다.사용 하 여 AfxRegisterClass 대신 RegisterClass 이 자동으로 처리 됩니다.AfxRegisterClass고유 클래스 목록에서 DLL 등록 및 DLL 종료 될 때 자동으로 해당 등록 됩니다 유지 됩니다.사용 하는 경우 RegisterClass DLL에 DLL이 종료 되 면 모든 클래스가 등록 되지 않은 확인 합니다 (에서 사용자 DllMain 함수).이렇게 하지 않으면 발생할 수 있습니다 RegisterClass 다른 클라이언트 응용 프로그램 DLL을 사용 하려고 할 때 예기치 않게 실패 합니다.