home > working > C/C++ > Source, Tip

 


Name  
   조규남 
Subject  
   Sub Classing
subject: sub classing, 서브 클래싱, Win32 API

MFC를 사용하면 원하는 함수나 이벤트 핸들러를 Override할 수 있다. 하지만 win32에서 컨트롤의 메세지 핸들러를 어떻게 대체 할 수 있을까? win32는 C style로 구성되어 있기 때문에(맞나? ^^;) Override라는 방법은 상상도 할 수 없다.
그렇다면 손 놓고 구경만 해야 하는가? 아니다. 방법이 있다. Sub Classing이 바로 그것이다.
Sub Classing은 어떤 프로시져를 다른 프로시져로 대체하는 방법이다.

아주 간단 하다.

SetWindowLong이라는 함수를 사용해서 새로운 프로시져를 알려주기만 하면 된다.

            WNDPROC                OldLunchBoxWndProc;
            OldLunchBoxWndProc = (WNDPROC) SetWindowLong(m_hwndDlg, GWL_WNDPROC, (LONG)LibraryProc);

새롭게 대체된 프로시져는 Win32에서 볼 수 있는 WinProc이다.

            LRESULT CALLBACK LibraryProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
            {
                        switch(message)
                        {
                                    case WM_COMMAND:        // easthoon
                                                return FALSE;
                                    case WM_PAINT:
                                                return FALSE;
                                    case WM_RBUTTONDOWN:
                                                return FALSE;
                                    case WM_LBUTTONDBLCLK:
                                    case WM_LBUTTONDOWN:
                                    default:
                                                return CallWindowProc(OldLunchBoxWndProc, hWnd, message, wParam, lParam);
                        }
                        return 0;
            }

사용자가 원하는 메세지 이외의 동작은 기본 프로시져를 사용하면 된다.


Name Memo Password  
        


Prev
   ps를 만들어 버리자 [1]

조규남
Next
   뒷배경과 똑같은 배경을 같는 Tree View

조규남


Copyright 1999-2018 Zeroboard / skin by JiYoo / edit by Mystous