>  기사  >  운영 및 유지보수  >  Win32 SDK 기초 (6) 윈도우 클래스 검색 과정 및 관련 API에 대한 자세한 설명

Win32 SDK 기초 (6) 윈도우 클래스 검색 과정 및 관련 API에 대한 자세한 설명

黄舟
黄舟원래의
2017-06-06 09:44:402397검색

1. 윈도우 클래스 검색 과정

이전 글에서는 windows 시스템의 세 가지 윈도우 클래스인 시스템 윈도우 클래스, 글로벌 윈도우 클래스, 로컬 윈도우 클래스를 소개했습니다. 각 윈도우 클래스는 운영체제에서 서로 다른 범위를 가지며, 각 범위에 등록된 윈도우 클래스 이름은 중복될 수 없습니다. 창을 생성할 때 시스템, 전역 및 로컬 범위에서 창 클래스 이름에 따라 검색되는 경우가 많습니다. 검색 프로세스는 다음과 같이 요약됩니다.

(1) 이제 운영 체제는 로컬 창 클래스에서 검색합니다. 들어오는 창 클래스 이름을 기준으로 발견되면 2 단계를 실행하고, 발견되지 않으면 3 단계를 실행합니다.

(2)창을 생성할 때 전달한 HINSTANCE변수와 로컬 창 클래스를 비교하세요. 동일한 것으로 확인되면 생성된 창과 등록된 창이 동일한 모듈에 있다는 의미이며, 생성된 창이 반환됩니다. 같지 않으면 3 단계를 계속 진행하세요.

(3)응용 프로그램 전역 창 클래스에서 검색합니다. 발견되면 4 단계를 실행합니다. 발견되지 않으면 5 단계를 실행합니다.

(4) 찾은 윈도우 클래스 정보를 이용하여 윈도우를 생성하고 복귀합니다.

(5) 시스템 윈도우 클래스에서 검색하여 발견되면 윈도우를 생성합니다. 발견되지 않으면 윈도우 생성이 실패합니다.

2. API RegisterClass 및 RegisterClassEx

을 사용하여 창 클래스를 등록할 수 있습니다.

ATOM WINAPI RegisterClass(
  _In_ const WNDCLASS *lpWndClass
);
ATOM WINAPI RegisterClassEx(
  _In_ const WNDCLASSEX *lpwcx
);
From

API에서.

프로토타입, 두 매개변수의 차이점은 주로 수신된 매개변수에 있음을 알 수 있습니다. 이 매개변수는 우리가 등록해야 하는 창 클래스입니다. 두 개의 창 클래스는 다음과 같이 선언됩니다.

typedef struct tagWNDCLASS {
  UINT      style;
  WNDPROC   lpfnWndProc;
  int       cbClsExtra;
  int       cbWndExtra;
  HINSTANCE hInstance;
  HICON     hIcon;
  HCURSOR   hCursor;
  HBRUSH    hbrBackground;
  LPCTSTR   lpszMenuName;
  LPCTSTR   lpszClassName;
} WNDCLASS, *PWNDCLASS;
typedef struct tagWNDCLASSEX {
  UINT      cbSize;
  UINT      style;
  WNDPROC   lpfnWndProc;
  int       cbClsExtra;
  int       cbWndExtra;
  HINSTANCE hInstance;
  HICON     hIcon;
  HCURSOR   hCursor;
  HBRUSH    hbrBackground;
  LPCTSTR   lpszMenuName;
  LPCTSTR   lpszClassName;
  HICON     hIconSm;
} WNDCLASSEX, *PWNDCLASSEX;
위 코드에서 볼 수 있듯이 두 창 클래스 structures의 주요 차이점은 WNDCLASSEX에 cbSize 창의 구조 크기와 작은 아이콘이 포함된다는 것입니다. hIconSm 창의 핸들입니다. 다른 매개변수의 의미는

MSDN

을 참조하세요. 3.

등록된 창 정보 가져오기

GetClassInfoGetClassInfo() API는 등록된 창의 정보를

얻을 수 있습니다.

function프로토타입은 다음과 같습니다.

BOOL WINAPI GetClassInfo(
  _In_opt_ HINSTANCE  hInstance,
  _In_     LPCTSTR    lpClassName,
  _Out_    LPWNDCLASS lpWndClass
);
hInstance—— set lookup 의 범위를 NULL

로 설정하면 시스템, 전역, 로컬의 세 가지 범위에서 검색됩니다.

lpClassName - 찾을 창 클래스의 이름입니다. lpWndClass - 창 클래스 정보를 수신하는 데 사용되는 전달된 WndClass

구조 변수의 주소입니다. 위에서 생성한

Button

클래스의 윈도우 정보를 찾아보자:

WNDCLASS wc;
if (GetClassInfo(NULL, "Button", &wc) == false)
MessageBox(NULL,"GetClassInfo Faile",NULL,NULL);
중단점을 설정하여 얻은

Button

윈도우 클래스 정보를 확인해보자:

Windows 클래스 제거

Un. RegisterClass

UnregisterClass를 통해 등록된 창 클래스를 등록 취소할 수 있습니다. 해당 프로토타입은 다음과 같습니다.

BOOL WINAPI UnregisterClass(
  _In_     LPCTSTR   lpClassName,
  _In_opt_ HINSTANCE hInstance
);
lpClassName - 제거할 창 클래스의 이름입니다. hInstance —— 검색 범위를 설정합니다. NULL

로 설정하면 시스템, 글로벌, 로컬 세 가지 범위에서 검색합니다. 다음 코드는 등록된

Button🎜 창 클래스를 제거합니다. 🎜🎜
 if (UnregisterClass("Button",NULL) == false)
MessageBox(NULL, "UnregisterClass Faile", NULL, NULL);

위 내용은 Win32 SDK 기초 (6) 윈도우 클래스 검색 과정 및 관련 API에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.