cbWndExtra 이용 윈도우 인스턴스 별로 개별적인 메모리 할당...
LONG SetWindowLong( HWND hWnd, int nIndex, LONG dwNewLong);
윈도우에 변경을 가하고자 할때 쓰는 api이다.
두번째는 변경하고자 하는 속성을 나타낸다.
윈도우 지정 디폴트 값 설명
GWL_EXSTYLE 확장 스타일
GWL_STYLE 윈도우 스타일
GWL_WNDPROC 윈도우 프로시저의 번지
GWL_HINSTANCE 인스턴스 핸들
GWL_ID 윈도우의 ID
GWL_USERDATA 윈도우와 관련된 사용자 데이터
DWL_DLGPROC 대화상자 프로시저의 주소
DWL_MSGRESULT 대화상자 프로시저의 리턴값
DWL_USER 사용자 데이터
그런데 사용자가 임의로 윈도우에 여분 메모리가 있을 경우
여분 메모리의 오프셋을 지정할 수도 있다.
윈도우 클래스 등록시에 사용되는 WNDCLASS(EX)구조체의
cbWndExtra 멤버 변수에 여기에 사용된다.
이 값은 반드시 양수여야 하며 cbWndExtra-4보다는 작아야 한다.
예를 들어 여분 메모리가 16바이트 지정되어 있으면 nIndex는 0~12까지 지정할 수 있다.
ex)
SetWindowLong(hWnd, 0, 10);
SetWindowLong(hWnd, 4, RGB(0,0,255));
int iCount=GetWindowLong(hWnd,0);
COLORREF cr=GetWindowLong(hWnd,4);
이런 식으로 사용가능
보통 GWL_USERDATA 를 지정핼 사용자 정의 데이터를 넘겨주는데
그것 말고도 위의 방법이 존재했다.
프로그래머가 컨트롤을 직접제작시 인스턴스별 넘겨줄 데이터를 세팅할 경우
사용하면 좋을 듯 싶다.
참고로 윈도우 디폴트 값은 다음과 같다.
Window field offsets for GetWindowLong()
#define GWL_WNDPROC (-4)
#define GWL_HINSTANCE (-6)
#define GWL_HWNDPARENT (-8)
#define GWL_STYLE (-16)
#define GWL_EXSTYLE (-20)
#define GWL_USERDATA (-21)
#define GWL_ID (-12)
모두 음수로 처리함을 볼 수 있다.
'API' 카테고리의 다른 글
DialogBoxIndirect 예제 심플 (2) | 2008.08.06 |
---|---|
대화상자와 등록 정보 시트 소프트웨어 (0) | 2008.08.06 |
DialogBoxIndirect 사용 예제 (3) | 2008.08.06 |
DLL 에 대해서 알아보자. (0) | 2008.08.04 |
재진입성(reentrant)와 스레드 안전성(thread safe)의 개념 (0) | 2008.08.01 |
reentrant와 thread-safe함수와의 관계... (3) | 2008.08.01 |
SendMessage vs PostMessage, 기타 프로시저 재진입 (1) | 2008.07.31 |