2008-10-14 3 views
2

내가 네이티브 윈도우 서브 클래 싱하고있어 (콤보 상자의 편집 컨트롤을 ...)C#에서는 WIN32 WndProc에 대한 IntPtr이 있습니다. 호출 구문은 무엇입니까?

oldWndProc = SetWindowLong에 (HandleOfCbEditControl, GWL_WNDPROC, newWndProc);

내 서브 클래스 wndproc에서 이와 같은 코드를 사용 하겠지만, oldWndProc을 호출하는 구문을 이해할 수는 없습니다.

int MyWndProc(int Msg, int wParam, int lParam) 
    { 
     if (Msg.m == something I'm interested in...) 
     { 
       return something special 
     } 
     else 
     { 
       return result of call to oldWndProc <<<< What does this look like?*** 
     } 

    } 

EDIT :이 질문에서 "서브 클래 싱"이란 단어는 C#이 아니라 WIN32 API 의미를 나타냅니다. 여기에 서브 클래 싱한다고해서 .NET 기본 클래스 비헤이비어를 재정의하는 것이 아닙니다. WIN32가 Windows 현재 콜백 대신 함수 포인터를 호출하도록하는 것을 의미합니다. C#의 상속과는 아무런 관련이 없습니다.

답변

2

당신의 상호 운용성/P-호출 노력 (SetWindowLong)의 모든 매우 도움이 될 것입니다. 매개 변수를 Int 변수로 정의하면 (SetWindowLong 호출에서 정의한 것처럼 보입니다)

[DllImport ("CallWindowProc"...] public static extern int CallWindowProc previousProc, INT nativeControlHandle, INT MSG, INT의 lParam, INT의 wParam).

가 정렬 화, INT, UINT 및 IntPtr입니다 모두 동일하다는 것을 기억

+0

기본 proc을 호출하기 전에 그는 oldWndProc가 가리키는 이전 사용자 proc를 호출하려고합니다. –

+0

int, uint 및 IntPtr이 모두 동일하다는 정보를 보내 주셔서 감사합니다. 나는 당신의 코멘트를 읽기 전에 주위에 걸음으로 그것을 배웠지 만, 당신의 의견은 내가 옳은 일을하고 있다고 위로하고 있습니다. –

+0

사실, 저는 전화 WIN32 함수 CallWindowProc –

0

site 당신은 P/호출에 의해 CallWindowProc 전화 할게

+0

SetWindowLong 부분을 이해했습니다. 원래 winproc을 호출하는 방법에 대해 묻고있었습니다. –

1
당신은 oldWndProc 포인터

것을 호출 CallWindowProc를 사용해야합니다

.

[DllImport("user32")] 
private static extern int CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, int Msg, int wParam, int lParam); 
관련 문제