다음을 통해 공유


TN001: 창 클래스 등록

특수 레지스터는 MFC 루틴이이 참고 설명 WNDCLASSes Microsoft Windows가 필요 합니다.특정 WNDCLASS 는 MFC 및 Windows에서 사용 되는 특성을 설명 합니다.

문제

특성은 CWnd 개체, 같은 HWND Windows에서 처리 하 고 두 위치에 저장 됩니다: window 개체 및 WNDCLASS.이름을 WNDCLASS 같은 일반적인 창 만들기 함수에 전달 CWnd::CreateCFrameWnd::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, CFrameWndCMDIChildWndCreate 함수 사용은 lpszClassName 창 클래스의 첫 번째 매개 변수로 문자열 이름을.등록에 사용 하는 방법에 관계 없이 등록 된 창 클래스 이름에 사용할 수 있습니다.

사용 하는 것이 중요 AfxRegisterClass (또는 AfxRegisterWndClass)에서 Win32 dll.Win32 DLL 종료 될 때 명시적으로 클래스를 등록 해야 하므로 여 DLL을 등록 하는 클래스 자동으로 등록 하지 않습니다.사용 하 여 AfxRegisterClass 대신 RegisterClass 이 자동으로 처리 됩니다.AfxRegisterClass고유 클래스 목록에서 DLL 등록 및 DLL 종료 될 때 자동으로 해당 등록 됩니다 유지 됩니다.사용 하는 경우 RegisterClass DLL에 DLL이 종료 되 면 모든 클래스가 등록 되지 않은 확인 합니다 (에서 사용자 DllMain 함수).이렇게 하지 않으면 발생할 수 있습니다 RegisterClass 다른 클라이언트 응용 프로그램 DLL을 사용 하려고 할 때 예기치 않게 실패 합니다.

참고 항목

기타 리소스

번호 기술 정보

범주별 기술 노트