2013-03-26 1 views
0

Добрый день.
Я пишу плагин с FireBreath. Небольшая проблема возникла из-за моих слабых знаний на С ++, см. Код ниже.Нестационарная ссылка на элемент Ошибка C2352

Я не могу понять, почему функция FB::PluginWindowWin::getBrowserHWND(), которая возвращает HWND не хотят работать HWND для GetWindowRect(hWnd, &rect) функции.

Компилятор подчеркивает FB из FB::PluginWindowWin::getBrowserHWND() и говорит мне, что «не статическая ссылка на элемент должен быть определен, а объект набора» (Это мой перевод, сообщение на русском, но я считаю, что еще есть один и тот же смысл)

Получил эту ошибку:

Error C2352 FB::PluginWindowWin::getBrowserHWND:illegal call of non-static member function 

Код:

TestPlugin.cpp 
#include "Win/PluginWindowWin.h" 
#include "JSObject.h" 
#include "variant_list.h" 
#include "DOM/Document.h" 
#include "global/config.h" 
#include <Windows.h> 
#include "TestPluginAPI.h" 

///////My Functions//////// 

FB::variant PosTest() 
{ 
RECT rect; 
HWND hWnd; 
hWnd = FB::PluginWindowWin::getBrowserHWND(); 
if(GetWindowRect(hWnd, &rect)) 
    { 

    int width = rect.right - rect.left; 
    int height = rect.bottom - rect.top; 
    int left = rect.left; 
     return left; 
    } 
} 


TestPlugin.h 
#include "Win/PluginWindowWin.h" 
#include <string> 
#include <sstream> 
#include <boost/weak_ptr.hpp> 
#include "JSAPIAuto.h" 
#include "BrowserHost.h" 
#include "TestPlugin.h" 
#include <Windows.h> 

/////Declarations///// 

//Rect 
BOOL WINAPI GetWindowRect(HWND hWnd, LPRECT lpRect); 

//Pos Test 
FB::variant PosTest(); 

ответ

4

эта ошибка горе uld указывают, что getBrowserHWND() не является методом static, поэтому для его вызова требуется экземпляр объекта.

Другими словами, вы должны иметь объект типа FB::PluginWindowWin, то вы могли бы назвать это нравится:

hWnd = myPluginWindowWin.getBrowserHWND(); 
+0

Можете ли вы дать мне пример кода такого объекта? –

+2

Я никогда не использовал Firebreath, поэтому я не смогу быть очень конкретным. Я думаю, вам нужно найти образец кода в документации Firebreath и следовать ему. Но, глядя на блог в http://colonelpanic.net/2010/11/firebreath-tips-drawing-on-windows/, кажется, что FB должен вызывать обработчики событий и передавать указатель на «PluginWindow», который вы затем может быть добавлен в 'PluginWindowWin' и вызывается' getBrowserHWND() '. Я думаю, вы должны написать класс, который расширяет «PluginCore». Если это так, вы можете вызвать 'this-> getWindow()' в одном из своих методов, чтобы получить 'PluginWindow'. Надеюсь, это поможет. –

+0

Thx Nate, попробует возиться с ним. –

1

Этот код работает для меня очень хорошо:

HWND myPluginAPI::getBrowserHwnd() { 
    FB::PluginWindow* pluginWindow = getPlugin()->GetWindow(); 
    FB::PluginWindowWin* w = (FB::PluginWindowWin*)(pluginWindow); 
    HWND hwndBrowser = GetAncestor(w->getHWND(), GA_ROOTOWNER); 
    return hwndBrowser; 
} 
+1

Thx, это здорово. –

+0

ответить на ответ !? ;-) – heinob

+0

Я не могу человек не хватало репутации) Ну что ж, вы можете показать мне, как работает ваш 'getPlugin()'? –