SetWindowLongPtrA 함수(winuser.h)

지정된 창의 특성을 변경합니다. 또한 함수는 추가 창 메모리에서 지정된 오프셋의 값을 설정합니다.

참고 32비트 및 64비트 버전의 Windows와 호환되는 코드를 작성하려면 SetWindowLongPtr을 사용합니다. 32비트 Windows용으로 컴파일할 때 SetWindowLongPtrSetWindowLong 함수에 대한 호출로 정의됩니다.

 

구문

LONG_PTR SetWindowLongPtrA(
  [in] HWND     hWnd,
  [in] int      nIndex,
  [in] LONG_PTR dwNewLong
);

매개 변수

[in] hWnd

형식: HWND

창 및 간접적으로 창이 속한 클래스에 대한 핸들입니다. hWnd 매개 변수로 지정된 창을 소유하는 프로세스가 호출 스레드가 상주하는 프로세스보다 UIPI 계층 구조에서 더 높은 프로세스 권한에 있으면 SetWindowLongPtr 함수가 실패합니다.

Windows XP/2000: hWnd 매개 변수로 지정된 창이 호출 스레드와 동일한 프로세스에 속하지 않으면 SetWindowLongPtr 함수가 실패합니다.

[in] nIndex

형식: int

설정할 값에 대한 0부터 시작하는 오프셋입니다. 유효한 값은 추가 창 메모리의 바이트 수에서 LONG_PTR 크기를 뺀 범위 0에 있습니다. 다른 값을 설정하려면 다음 값 중 하나를 지정합니다.

의미
GWL_EXSTYLE
-20
확장 창 스타일을 설정합니다.
GWLP_HINSTANCE
-6
새 애플리케이션 instance 핸들을 설정합니다.
GWLP_ID
-12
자식 창의 새 식별자를 설정합니다. 창은 최상위 창일 수 없습니다.
GWL_STYLE
-16
창 스타일을 설정합니다.
GWLP_USERDATA
-21
창과 연결된 사용자 데이터를 설정합니다. 이 데이터는 창을 만든 애플리케이션에서 사용하기 위한 것입니다. 해당 값은 처음에 0입니다.
GWLP_WNDPROC
-4
창 프로시저의 새 주소를 설정합니다.
 

hWnd 매개 변수가 대화 상자를 식별하는 경우에도 다음 값을 사용할 수 있습니다.

의미
DWLP_DLGPROC
DWLP_MSGRESULT + sizeof(LRESULT)
대화 상자 프로시저에 대한 새 포인터를 설정합니다.
DWLP_MSGRESULT
0
대화 상자 프로시저에서 처리되는 메시지의 반환 값을 설정합니다.
DWLP_USER
DWLP_DLGPROC + sizeof(DLGPROC)
핸들 또는 포인터와 같이 애플리케이션에 비공개인 새 추가 정보를 설정합니다.

[in] dwNewLong

형식: LONG_PTR

교체 값입니다.

반환 값

형식: LONG_PTR

함수가 성공하면 반환 값은 지정된 오프셋의 이전 값입니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

이전 값이 0이고 함수가 성공하면 반환 값은 0이지만 함수는 마지막 오류 정보를 지우지 않습니다. 성공 또는 실패를 확인하려면 SetLastError 를 0으로 호출하여 마지막 오류 정보를 지우고 SetWindowLongPtr를 호출합니다. 함수 오류는 반환 값 0과 0이 아닌 GetLastError 결과로 표시됩니다.

설명

특정 창 데이터가 캐시되므로 SetWindowLongPtr 을 사용하여 변경한 내용은 SetWindowPos 함수를 호출할 때까지 적용되지 않습니다.

SetWindowLongPtrGWLP_WNDPROC 인덱스와 함께 사용하여 창 프로시저를 바꾸는 경우 창 프로시저는 WindowProc 콜백 함수 설명에 지정된 지침을 따라야 합니다.

DWLP_MSGRESULT 인덱스와 함께 SetWindowLongPtr을 사용하여 대화 상자 프로시저에서 처리한 메시지의 반환 값을 설정하는 경우 대화 상자 프로시저는 나중에 직접 TRUE를 반환해야 합니다. 그렇지 않으면 대화 상자 프로시저에서 창 메시지를 수신하는 함수를 호출하는 경우 중첩된 창 메시지는 DWLP_MSGRESULT 사용하여 설정한 반환 값을 덮어쓸 수 있습니다.

GWLP_WNDPROC 인덱스를 사용하여 SetWindowLongPtr을 호출하면 창을 만드는 데 사용되는 창 클래스의 하위 클래스가 만들어집니다. 애플리케이션은 시스템 클래스를 서브클래스할 수 있지만 다른 프로세스에서 만든 창 클래스를 서브클래스해서는 안 됩니다. SetWindowLongPtr 함수는 특정 창 클래스와 연결된 창 프로시저를 변경하여 창 서브클래스를 만들어 시스템이 이전 창 프로시저 대신 새 창 프로시저를 호출하게 합니다. 애플리케이션은 CallWindowProc을 호출하여 새 창 프로시저에서 처리되지 않은 메시지를 이전 창 프로시저에 전달해야 합니다. 이렇게 하면 애플리케이션에서 창 프로시저 체인을 만들 수 있습니다.

RegisterClassEx 함수와 함께 사용되는 WNDCLASSEX 구조체의 cbWndExtra 멤버에 0이 아닌 값을 지정하여 추가 창 메모리를 예약합니다.

자식 창의 부모를 변경하려면 GWLP_HWNDPARENT 인덱스로 SetWindowLongPtr을 호출하지 마세요. 대신 SetParent 함수를 사용합니다.

창에 CS_CLASSDC 또는 CS_PARENTDC 클래스 스타일이 있는 경우 확장 창 스타일을 WS_EX_COMPOSITED 설정하거나 WS_EX_LAYERED 않습니다.

SetWindowLongPtr을 호출하여 진행률 표시줄에서 스타일을 설정하면 위치가 다시 설정됩니다.

참고

winuser.h 헤더는 SETWindowLongPtr을 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 winuser.h(Windows.h 포함)
라이브러리 User32.lib
DLL User32.dll
API 세트 ext-ms-win-ntuser-windowclass-l1-1-0(Windows 8에서 도입)

추가 정보

CallWindowProc

개념

GetWindowLongPtr

참조

RegisterClassEx

SetParent

WNDCLASSEX

창 클래스

WindowProc