Несколько функций WndProc в Win32 - PullRequest
4 голосов
/ 24 сентября 2011

Это может быть глупый вопрос, но вы можете зарегистрировать несколько функций WndProc в Win32? например фреймворк перехватывает некоторые сообщения, а мое приложение интересует другие - как мне перехватить их без изменения кода фреймворка?

Ответы [ 2 ]

7 голосов
/ 24 сентября 2011

Если я правильно понимаю ваше намерение, вы можете сделать это, установив хук .Предполагая, что вы знаете поток, чей цикл сообщений вы хотите перехватить, вы можете сделать что-то вроде этого (не проверено):

SetWindowsHookEx(WH_CALLWNDPROC, yourHOOKPROC, NULL, theThreadId);
5 голосов
/ 12 января 2012

Вы можете объединить несколько функций обработки сообщений, используя функцию CallWindowProc вместо DefWindowProc.

Вот пример:

pfOriginalProc = SetWindowLong( hwnd, GWL_WNDPROC, (long) wndproc1 );    // First WNDPROC

pfOriginalProc2 = SetWindowLong( hwnd, GWL_WNDPROC, (long) wndproc2);   // Second WNDPROC, WILL EXECUTE FIRST!!


LRESULT wndproc1( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    switch ( uMsg )
    {
      ...
      default:
         return CallWindowProc( pfOriginalProc, hwnd, uMsg, wParam, lParam );
    }


}


LRESULT wndproc2( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{

    switch ( uMsg )
    {
        ...
        default:
            return CallWindowProc( pfOriginalProc2, hwnd, uMsg, wParam, lParam );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...