관리 메뉴

ㄴrㅎnㅂrㄹrㄱi

SetWindowLong(A) 본문

API 관련/Win32 API 함수

SetWindowLong(A)

님투 2007. 11. 8. 23:27
반응형

SetWindowLong(A)

지정된 윈도우의 속성을 변경합니다.또, 확장 윈드우메모리의 지정된 오프셋의32비트치를 고쳐 쓸 수 있습니다.

이 함수는 SetWindowLongPtr 에 교체되고 있습니다.32비트판과64비트판의 Windows 그리고 공통되어 이용할 수 있는 코드를 기술하는 경우에는, SetWindowLongPtr 함수를 사용할 필요가 있습니다.

LONG SetWindowLongA(
    HWND  hWnd,       // 윈도우 핸들
    int   nIndex,     // 변경하는 데이터의 지정
    LONG  dwNewLong   // 새로운 값
);

USER32.DLL

인수

hWnd

속성을 변경하는 윈도우의 핸들을 지정합니다.

Windows 95/98/Me: 호출 스렛드와는 다른 프로세스에 속하는 윈도우의 핸들을 지정하면, 이 함수는 실패합니다.

nIndex

어느 정보를 변경하는지를 지정합니다.

확장 윈드우메모리로부터 데이터를 고쳐 쓸 때는, 0 (으)로부터 시작되는 오프셋을 아르바이트 단위로 지정합니다.유효한 오프셋은, 0 (으)로부터 (확장 윈드우메모리의 아르바이트수 - 4) 까지입니다.

확장 윈드우메모리 이외의 값을 변경하려면 , 다음의 어느쪽이든을 지정합니다.

p>
설정되는 속성
-4 (GWL_WNDPROC) 윈도우 프로시저의 주소

Windows NT/2000/XP: 지정된 윈도우가 호출해 스렛드와는 다른 프로세스에 속하는 경우는, 이 속성을 변경할 수 없습니다.

-6 (GWL_HINSTANCE) 어플리케이션의 인스턴스 핸들
-16 (GWL_STYLE) 윈도우 스타일
-20 (GWL_EXSTYLE) 확장 윈도우 스타일
-21 (GWL_USERDATA) 윈도우에 관련지을 수 있었던 어플리케이션 정의의32비트치
-12 (GWL_ID) 윈도우 ID

hWnd 파라미터가 다이알로그 박스의 핸들인 경우에는, 이하의 값을 지정할 수도 있습니다.

설정되는 속성
0 (DWL_MSGRESULT) 다이알로그 박스 프로시저로 처리된 메세지의 반환값
4 (DWL_DLGPROC) 다이알로그 박스 프로시저의 주소
8 (DWL_USER) 어플리케이션 정의의 정보(핸들이나 포인터 등)
dwNewLong

새롭게 설정한다32비트치를 지정합니다.

반환값

성공하면, 변경전의 값이 돌아갑니다.

실패하면 0 하지만 돌아갑니다.확장 에러 정보를 취득하려면 , GetLastError 함수를 사용합니다.

변경전의 값이 0 (이었)였다고 와, 성공해도 0 하지만 돌아갑니다.이 문제를 해결하려면 , SetLastError 함수를 인수 0 그리고 호출하고 나서, SetWindowLong 함수를 호출합니다.함수가 실패하면, 직후에 호출한다 GetLastError 함수가 0 이외의 값을 돌려줍니다.

해설

몇개의 종류의 데이터는 캐쉬되고 있고, SetWindowLong 함수로 변경된 그 데이터는 SetWindowPos 함수가 불려 갈 때까지 반영되지 않습니다.특히, 데이터의 변경에 의해서 윈도우 프레임의 스타일이 변경되는 경우에는, SWP_FRAMECHANGED 플래그를 지정해 SetWindowPos 함수를 호출하고, 캐쉬를 갱신하지 않으면 안됩니다.

GWL_WNDPROC (을)를 지정해 SetWindowLong 함수를 호출하면, 윈도우 작성에 사용된 윈도우 클래스의 서브 클래스가 작성됩니다.어플리케이션은 시스템 클래스를 서브 클래스화할 수 있습니다만, 다른 프로세스에 의해서 작성된 윈도우를 서브 클래스화 해야 하지는 않습니다.윈도우의 서브 클래스화에서는, 윈도우 클래스에 관련지을 수 있고 있는 윈도우 프로시저가 변경되어 시스템이 이전의 윈도우 프로시저는 아니고 새로운 윈도우 프로시저를 호출하게 됩니다.어플리케이션은, 새로운 윈도우 프로시저에서는 처리되지 않는 메세지를, CallWindowProc 함수를 호출해 이전의 윈도우 프로시저에 건네주지 않으면 안됩니다.

확장 윈드우메모리는, RegisterClassEx 함수에 건네준다 WNDCLASSEX 구조체(또는 RegisterClass 함수에 건네준다 WNDCLASS 구조체)의 cbWndExtra 멤버에 0 이외의 값을 설정하는 것에 의해서 확보합니다.

nIndex 파라미터에 GWL_HWNDPARENT (을)를 지정할 수 없습니다.아이 윈도우의 친윈도우를 변경하려면 , SetParent 함수를 사용합니다.

대응 정보

Windows 95 이후 / Windows NT 3.1 이후

반응형

'API 관련 > Win32 API 함수' 카테고리의 다른 글

SHBrowseForFolder(A)  (0) 2007.11.08
SetWindowRgn  (0) 2007.11.08
SetThreadPriority  (0) 2007.11.08
SetPriorityClass  (0) 2007.11.08
SetParent  (0) 2007.11.08
Comments