用SetWindowsLong()函数。指定另外一个回调函数

解决方案 »

  1.   

    试试我们的 Subclass 控件:http://www.greatmidnight.com/redir.asp?type=product&name=msubcls
      

  2.   

    使用窗口子類化可以實現,相關資料給你,去試試...
    SetWindowLong ( )用來重新設置指定窗口的屬性
    GetWindowLong ( )用來取回指定窗口的屬性LONG GetWindowLong ( HWND hWnd, int nIndex ); 
    LONG SetWindowLong ( HWND hWnd,  int nIndex,  LONG dwNewLong ); hWnd 為 handle of window窗口句柄
    dwnewLong為new value替換的新值nIndex 
    GWL_EXSTYLE 擴展窗口樣式 
    GWL_STYLE 窗口樣式 
    GWL_WNDPROC 該窗口的窗口函數的位址 
    GWL_HINSTANCE 擁有窗口的實例的句柄 
    GWL_HWNDPARENT   其父窗口的句柄 
    GWL_ID 對話框中一個子窗口的識別字 
    GWL_USERDATA 含義由應用程式規定 
    下列值用于對話框,即hWnd為DlghWnd時: 
    DWL_DLGPROC 對話框函數位址 
    DWL_MSGRESULT 在對話框函數中處理的一條消息返回的值 
    DWL_USER 含義由應用程式規定 
            所謂窗口子類化,實際上就是改變窗口內存塊中的有關參數。由於這種修改只涉及到一個窗口的窗口內存塊,因此它不會影響到屬於同一窗口類的其他窗口的功能和表現。窗口子類化中最常見的是修改窗口內存塊中的窗口函數位址(lpfnWndProc),使其指向一個新的窗口函數,從而改變原窗口函數的處理方法,改進其功能。其基本步驟如下:
    (1) 編寫子類化窗口函數。該函數必須為標準的窗口函數格式即:
      LRESULT CALLBACK SubClassWndProc ( HWND , UINT , WPARAM , LPARAM ) ;
      在這個函數中對感興趣的消息進行處理,而把未處理或者需要原窗口函數進一步處理的消息傳送給原窗口函數;
     
    (2) 利用待子類化窗口的句柄hWnd,調用GetWindowLong ( hWnd , GWL_WNDPROC ) 函數獲得原窗口函數的位址並保存起來;
     
    (3) 調用SetWIndowLong ( hWnd , GWL_WNDPROC , SubClassWndProc ) 把窗口函數設置成子類化窗口函數,完成窗口子類化。