특정 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를 설정할 수 있다.