2012-11-13 4 views
3

나는 놀이터 SDK와 함께 일하고 있으며 내 게임 창의 WNDCLASS를 얻어야합니다. SDK에서 아무 것도 찾지 못했습니다. 게임 창의 hWnd로이 작업을 수행하려고하는 이유입니다. HWND에서 WNDCLASS를 얻을 수있는 방법이 있습니까? 게임 창에서 시스템 커서를 변경하려면이 항목이 필요합니다.HWND에서 WNDCLASS를 얻는 방법?

+1

궁금한데, 왜 'RegisterClass'에 전달한 데이터를 추적 할 수 없습니까? –

+0

@AdamRosenfield 놀이터는 캐주얼 게임을위한 크로스 플랫폼 SDK이며 창을 만듭니다. – IronMensan

+0

@ 엘도라도, 수업에 자주 액세스 할 필요가 없으므로 궁금합니다. 무엇을하고 계십니까? – chris

답변

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::arraystd::vector.data()으로 바꾸고 &className[0]nullptrNULL으로 바꿀 수 있습니다. GetClassInfoWNDCLASSEX 대신 필요한 경우 WNDCLASS을 반환합니다.

+0

WNDCLASS의 일부 속성을 변경했다면 어떻게 저장해야합니까? RegisterClassEx와 같은 것? 나는 그것들을 바꾸기 위해서만 시도했으나 제대로 작동하지 않는 것 같습니다 (최소한이 속성은 저장되지 않습니다). – ElDorado

+0

@ 엘도라도, 당신은 정확히 무엇을 바꾸고 있습니까? – chris

+0

h 커서 속성 – ElDorado