Обратный вызов с использованием CustomWndProc для дескриптора окна только для сообщений - PullRequest
0 голосов
/ 17 декабря 2011

Я разрабатываю плагин NPAPI, использующий Firebreath.Я использую стороннюю dll для интеграции с игровым устройством. Входные данные на устройствах распространяются на плагин через окно только для сообщений (HWND), зарегистрированное при открытии канала для устройства.

Первоначально, рукопожатие с драйвером устройства, рукопожатие (HWND, ...) и после которого при вводе пользователем выполняется обратный вызов в CustomWinProc () для уведомления.

Я сделал следующее,

- Создан файл заголовка и CPP в WIN-CustomCallbackHandler.h,

   #include "Win\PluginWindowWin.h"
   #include "Win\WindowContextWin.h"

    class CustomCallbackHandler : public FB::PluginWindowWin
     {
       public:
     CustomCallbackHandler (const FB::WindowContextWin& ctx);

      protected:
     virtual bool CustomWinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM   
        lParamm,LRESULT & lRes);
     };

-CustomCallbackHandler.cpp

    [code]
    #include "CustomCallbackHandler.h"
    #include "PluginWindowForwardDecl.h"
    #include "Win\WindowContextWin.h"
    #include "Win\PluginWindowWin.h"

    CustomCallbackHandler::CustomCallbackHandler(const FB::WindowContextWin& ctx) :    
    FB::PluginWindowWin(ctx){
    }

    bool CustomCallbackHandler::CustomWinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM 
    lParamm,LRESULT & lRes){
    //if WPARAM is something some operation has to be performed.
 return false;
    }
    [/code]

-Factory.cpp - Добавлено следующееметод для переопределения PluginWindowWin

FB::PluginWindowWin* createPluginWindowWin(const FB::WindowContextWin& ctx)
{
    return new CustomCallbackHandler(ctx);

}

-MyFirstPluginAPI.cpp- (автоматически сгенерированный подкласс JSAPIAuto) - метод JS.

    bool MyFirstPluginAPI::handshake(FB::JSObjectPtr &callback)
     {
        FB::WinMessageWindow window;
        thirdpartymethod(window.getHWND());
     }

Теперь, когда я отлаживаю, я вижу, что обработчик пользовательских вызововвызывается несколько раз для обычных событий плагина, но события, генерируемые устройствами, недоступны. Я полагаю, что другой экземпляр окна сообщения передается в dll.

-Как я могу получить дескрипторPluginWindowWin?
- Как только я получаю обратный вызов на CustomCallbackHandler, Как мне создать собственный sendEvent ()?

Ваша помощь очень важна.

Я Java разработчик и не имеет большого опыта в программировании на C ++.Я считаю, что мне не хватает чего-то фундаментального.

1 Ответ

1 голос
/ 17 декабря 2011

То, что вы хотите, это использовать WinMessageWindow:

https://github.com/firebreath/FireBreath/blob/master/src/PluginCore/Win/WinMessageWindow.h

Вы не хотите использовать PluginWindowWin;это слишком специфично для других вещей.WinMessageWindow был создан специально для того, чтобы делать то, что вы пытаетесь сделать, и он позволяет вам создавать обработчик winproc для содержащего класса.

Я недавно опубликовал пример использования WinMessageWindow для получения сообщений WM_DEVICENOTIFY;Я уверен, что вы можете использовать его как пример того, как работает класс, чтобы вы начали.

...