특정 Window
의 속성을 변경하는 함수 매크로이다. 32bit 값으로 메모리에 추가한다.
(프로젝트에 설정된 문자 집합(유니코드 or 멀티바이트)에 따라 W, A 함수로 전개된다.)
공식 문서에 따르면 32, 64bit 모두 호환을 위해
SetWindowLongPtr
함수로 대체되었다고 한다. 처리 및 인자값은 동일하니 추후 이걸로 사용하면 될 것 같다.
Syntax는 아래와 같다.
LONG SetWindowLongA( HWND hWnd, int nIndex, LONG dwNewLong );
인자값들을 하나하나 살펴보자.
(HWND) hWnd
: 속성을 변경하려는 Window, 또는 Window에 간접적으로 속하는 class의 핸들값
(int) nIndex
: 변경할 속성을 설정한다.
GWL_EXSTYLE
: 새로운 확장 윈도우 스타일을 설정한다.GWL_HINSTANCE
: 해당 window를 생성한 응용 프로그램의 인스턴스 핸들을 변경한다.GWL_ID
: 윈도우 컨트롤의 ID를 변경한다.GWL_STYLE
: 새로운 윈도우 스타일을 설정한다.GWL_USERDATA
: 해당 윈도우와 연관된 32bit 값을 변경한다. 이 값은 창을 만든 응용 프로그램에서 사용함.GWL_WNDPROC
: 윈도우 프로시저(WndProc)의 주소를 변경한다.
아래 속성들은 Dialog box(대화상자) 전용으로 사용된다.
DWL_DLGPROC
: 대화상자 프로시저(DlgProc)의 주소를 변경한다.DWL_MSGRESULT
: DlgProc에서 처리되는 메시지의 반환값을 변경한다.DWL_USER
: 응용 프로그램에 대한 추가정보를 새로 설정한다.
(LONg) dwNewLong
: 해당 속성에 대해 실제 변경할 값을 상수 형태로 설정한다. or( |
) 로 여러 값을 설정할 수 있다.
GWL_EXSTYLE, GWL_STYLE의 경우 여러개의 윈도우 스타일을 설정할 수 있기 때문에 필요할 때 마다 아래와 같이 기록하려 한다.
(자세한 내용은 GWL_EXSTYLE, GWL_STYLE 을 참고)
GWL_STYLE
WS_CHILD
: child window로 설정함. 해당 값으로 설정하면 menu bar를 사용할 수 없다.WS_POPUP
과 같이 사용할 수 없다. (=WS_CHILDWINDOW
)WS_CLIPCHILDREN
: parent window를 그릴 때 child window와 겹치는 부분(이미 사용하고 있는 부분)은 그리기 영역에서 제외시킨다.WS_CLIPSIBLINGS
: child window에 WM_PAINT 이벤트가 들어와 그리기 작업을 하게 될 때, 해당 child window에 다른 child window(siblings)와 겹치는 부분은 그리기 영역에서 제외시킨다.※ WM_SIZE 이벤트가 발생했을 때 크기 변경을 하다 보면 전체를 지우고 다시 그리는 작업을 하는 과정에서 flickering(깜빡임) 현상이 나타난다. 이를 방지하기 위해
WS_CLIPCHILDREN
,WS_CLIPSIBLINGS
를 설정할 수 있다.