나는 놀이터 SDK와 함께 일하고 있으며 내 게임 창의 WNDCLASS를 얻어야합니다. SDK에서 아무 것도 찾지 못했습니다. 게임 창의 hWnd로이 작업을 수행하려고하는 이유입니다. HWND에서 WNDCLASS를 얻을 수있는 방법이 있습니까? 게임 창에서 시스템 커서를 변경하려면이 항목이 필요합니다.HWND에서 WNDCLASS를 얻는 방법?
3
A
답변
5
해당 SDK에 대해서는 잘 모르지만 기본 HWND
유형에 대한 액세스를 제공하는 한 기본 전화를 사용할 수 있습니다.
사용 SetClassLongPtr
기능 :
SetClassLongPtr(hwnd, GCLP_HCURSOR, reinterpret_cast<LONG_PTR>(newCursorHandle));
그냥 게임 윈도우 커서를 변경하려면
해당 클래스의 모든 창에 커서를 변경하려면 :
우선, 윈도우에 표시된 커서를 제어하기 위해 처리 할 수있는 메시지가 WM_SETCURSOR
입니다. 아담 로젠 필드 (Adam Rosenfield)의 코멘트에서 그 점에 대해 더 많이 읽을 수 있습니다.
다른 방법이 있습니다. SetCursor
설명서에 따라 먼저 클래스의 커서가 nothing (NULL
)으로 설정되어 있는지 확인하십시오. 그런 다음 마우스가 클라이언트 영역으로 들어가고 나갈 때 SetCursor
기능을 사용할 수 있습니다. 클래스의 다른 창을 방해하지 않으려면 클래스 커서를 마우스 입력시 NULL로 설정하고 마우스를 놓았을 때의 값으로 다시 설정하십시오.
std::array<TCHAR, 256> className; //256 is max classname length
GetClassName(hwnd, className.data(), className.size());
:이
첫째, 윈도우와 관련된 클래스의 이름을 얻을 수 GetClassName
를 사용
otherCursor = SetCursor(otherCursor);
는 윈도우와 관련된 읽기 전용 WNDCLASSEX를 얻으려면
그런 다음 GetClassInfoEx
에 대한 호출에서 사용 :
WNDCLASSEX wce;
GetClassInfoEx(GetModuleHandle(nullptr), className.data(), &wce);
이제 wce
에 액세스하여 클래스 구조의 내용을 읽을 수 있습니다. 필요한 경우 std::array
을 std::vector
및 .data()
으로 바꾸고 &className[0]
과 nullptr
을 NULL
으로 바꿀 수 있습니다. GetClassInfo
은 WNDCLASSEX
대신 필요한 경우 WNDCLASS
을 반환합니다.
궁금한데, 왜 'RegisterClass'에 전달한 데이터를 추적 할 수 없습니까? –
@AdamRosenfield 놀이터는 캐주얼 게임을위한 크로스 플랫폼 SDK이며 창을 만듭니다. – IronMensan
@ 엘도라도, 수업에 자주 액세스 할 필요가 없으므로 궁금합니다. 무엇을하고 계십니까? – chris