WINE 코드 보신분 있나요? 궁금한게 있습니다.
WINE 이 내부적으로 managed 모드일때와 unmanaged 모드일때,
nonclient 영역을 어떻게 처리하는지를 (managed 모드이면 WM에 위임, 아니면 wine이 윈도우 에뮬레이션하여 직접 그림) 알고 싶어서 코드를 봤습니다.
/dlls/winex11/window.c 에서 managed 모드 처리를 하는데 이건 WM에 힌트를 주는 정도의 코드 같습니다.
한가지 알아낸 거라고는
/dlls/user/nonclient.c 에서 non clinet 영역을 그리는 코드가 있는데,
GetClipBox( hdc, &rectClip ); rectWindow = wndPtr->rectWindow; rect.top = rect.left = 0; rect.right = rectWindow.right - rectWindow.left; rect.bottom = rectWindow.bottom - rectWindow.top; NC_DrawFrame(hdc, &rect, active, dwStyle, dwExStyle ); if( IntersectRect( &rfuzz, &r, &rectClip ) ) // rfuzz 는 의미없음 NC_DrawCaption(hdc, &r, hwnd, dwStyle, dwExStyle, active);
rectClip 과 r 이 겹치는지 확인해서 캡션을 그리는데,
managed 모드일때는 rectClip 값이 전부 {0, 0, 0, 0} 이 나와서, 겹치는 부분이 안생기고,
unmanaged 모드일때는 rectClip 값이 윈도우 크기가 나오는 거 같습니다.
GetClipBox 함수에 뭔가 있겠다 싶어 호출과정을 따라 쭈욱 코드를 보는데.. 좌절입니다.. -_-;
지푸라기라도 잠는 심정으로 여기다 질문을 올리오니,
혹시 밥먹고 할일없어서 WINE 코드라도 분석해 보셨거나 Guru 의 경지에 오르셔서 코드를 한번만 봐도 이해가 되시는 분은
불쌍한 저좀 도와주시면 감사하겠습니다. 머리가 깨질것 같은데 도저히 눈을 뗄수가 없습니다... 아 밥도 먹어야 되는데.. -_-;;
wine-devel 메일링 리스트에 나온 메일주소로 메일을 보내봤는데.. -_-; 참 메일링 리스트란게 생소해서 어케되는건지 모르겠더군요-_-;
archive 들어가서 보니까 제가 보낸 메일은 아직도 안보이는데.. (답장도 없습니다) -_-;
혹시 wine hacking 에 관련해서 질/답 할수 있는 곳을 아시면 알려주심 감사하겠습니다.
그럼 좋은 주말되세요
논외지만
이 bbs에서 tag는 빈칸이 아닌 콤마로 구분해주는 것이더라구요.
댓글 달기