F.R.I.D.A.Y.

사용자 정의 비클라이언트 영역 본문

DEV/.Net

사용자 정의 비클라이언트 영역

F.R.I.D.A.Y. 2022. 7. 11. 09:38
반응형

C#에서 비클라이언트의 ownerdraw를 하려면WinApi가 필수일 듯.

https://docs.microsoft.com/ko-kr/windows/win32/gdi/nonclient-area

 

비클라이언트 영역 - Win32 apps

시스템은 제목 표시줄, 메뉴 모음 또는 창 프레임과 같은 비클라이언트 영역의 일부를 업데이트해야 할 때마다 WM\_NCPAINT 메시지를 창으로 보냅니다.

docs.microsoft.com

        protected override void WndProc(ref Message Msg)
        {
            Rectangle rect;

            switch (Msg.Msg)
            {
                case WinApi.Message.WM_NCACTIVE:
                case WinApi.Message.WM_NCPAINT:

                    rect = new Rectangle(Location, Size);
                    IntPtr hdc = HDC.GetWindowDC(Msg.HWnd);

                    HDC.Rectangle(hdc, 0, 0, Width, 40);
                
                    Msg.WParam = (IntPtr)1;
                    return;
            }
            base.WndProc(ref Msg);
        }

 HDC는 WinAPI 중 HDC, Rectangle 등 GDI 관련 코드를 C#에서 사용할 수 있도록 작성한 클래스이며, Form의 WndProc를 오버라이드한다.

 

실행 결과

OwnerDrawing 되었다. 물론, 안 예쁘지만.. 우측 끝 부분에 닫기, 최대/최소 버튼이 그려지지 않고 숨겨져 있는데, 기능은 한다.

제목 높이도 수정할 수 있을 것으로 보인다. 대신, WinApi를 적절히 사용해야한다.

728x90
반응형
Comments