0

再会。
我正在用 FireBreath 编写一个插件。由于我的 C++ 知识贫乏,出现了一些小问题,请参阅下面的代码。

我不明白,为什么FB::PluginWindowWin::getBrowserHWND()返回的函数HWND 不想像函数一样HWND工作GetWindowRect(hWnd, &rect)

编译器强调FBFB::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

2 回答 2

4

该错误表明这getBrowserHWND()不是一个static方法,因此它需要一个对象实例来调用它。

换句话说,你需要有一个 type 的对象FB::PluginWindowWin,然后你可以这样称呼它:

hWnd = myPluginWindowWin.getBrowserHWND();
于 2013-03-26T18:11:33.403 回答
1

这段代码非常适合我:

HWND myPluginAPI::getBrowserHwnd() {
    FB::PluginWindow* pluginWindow = getPlugin()->GetWindow();
    FB::PluginWindowWin* w = (FB::PluginWindowWin*)(pluginWindow);
    HWND hwndBrowser = GetAncestor( w->getHWND(), GA_ROOTOWNER );
    return hwndBrowser;
}
于 2013-03-27T09:48:28.550 回答