2008-10-14 55 views
2

我正在創建一個本機窗口(編輯控件的組合框...)在C#中,我有一個IntPtr到WIN32 WndProc。調用它的語法是什麼?

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?*** 
     } 

    } 

編輯:在這個問題上的字 「子類化」 指的是WIN32 API的意義,不C#。這裏的子類化並不意味着重寫.NET基類的行爲。這意味着告訴WIN32調用你的函數指針而不是Windows當前的回調函數。它與C#中的繼承無關。

回答

2

你會通過P/Invoke調用CallWindowProc您的互操作/ P-調用的努力(SetWindowLong)的非常有幫助。只需將參數定義爲int變量(因爲它看起來像是你在SetWindowLong調用中定義它們的方式),所以像這樣:

[DllImport(「CallWindowProc」...] public static extern int CallWindowProc(int previousProc,INT nativeControlHandle,詮釋味精,詮釋lParam的,詮釋的wParam);

記住,用於編組,INT,UINT和IntPtr的都是相同的

+0

在調用默認proc之前,他想調用oldWndProc指向的上一個用戶proc。 – 2008-10-14 13:15:15

0

site將與所有

+0

我瞭解SetWindowLong部分。我在問如何調用原始的winproc。 – 2008-10-14 13:19:02

1

您應該使用CallWindowProc的調用該oldWndProc指針

[DllImport("user32")] 
private static extern int CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, int Msg, int wParam, int lParam); 
相關問題