使用 GraphicsPath::AddString() 抱怨 "class 'GraphicsPath' has no member 'AddString'"

Using GraphicsPath::AddString() complains with "class 'GraphicsPath' has no member 'AddString'"

我正在尝试在我的 libcinder 项目中使用 GDI+ 的 GraphicsPath::AddString() 方法。

想法是通过上述方法创建一个 letter/glyph 的路径,然后将其传递给 gl::draw() 和 box2d 的 b2FixtureDef。目标是创建显示准确碰撞行为的下降字母。

然而,以下取自 docs.microsoft.com 的示例向我抛出了几个错误。

#include "cinder/app/App.h"
#include "cinder/app/RendererGl.h"
#include "cinder/gl/gl.h"
#include "cinder/Rand.h"
#include <Box2D/Box2D.h>

#include <gdiplus.h>
#pragma comment (lib, "gdiplus.lib")

using namespace Gdiplus;
using namespace ci;
using namespace ci::app;
using namespace std;

// ... 

void MyApp::draw()
{
  FontFamily fontFamily(L"Times New Roman");
    GraphicsPath path;

    // const WCHAR
    // Status AddString(
    //    IN const WCHAR         *string,
    //    IN INT                  length,
    //    IN const FontFamily    *family,
    //    IN INT                  style,
    //    IN REAL                 emSize,  // World units
    //    IN const PointF        &origin,
    //    IN const StringFormat  *format
    //)

  path.AddString(
    L"Hello World",
    -1,                 // NULL-terminated string
    &FontFamily("Arial"),
    FontStyleRegular,
    48,
    PointF(50.0f, 50.0f),
    NULL);
}

我的代码有几个问题无法解决...我项目的目标平台版本是 8.1,平台工具集是 Visual Studio 2015 (v140)。 headers 在那里,按 F12 时可以浏览到。

  1. FontFamily fontFamily(L"Times New Roman");

"Cannot initialize local variable 'fontFamily' of type 'FontFamily' with lvalue of type 'wchar_t const[16]'

  1. GraphicsPath path;

"No default constructor exists for class "GraphicsPath""

  1. path.AddString(...)

"class 'GraphicsPath' has no member 'AddString'"

非常感谢任何帮助。我花了几个小时解决这个问题,但进展为零。

在高低搜索之后我明白了。我错过了几个包含。但老实说,我还是不太明白,为什么编译器会抱怨那个特定的消息...

以下内容为我编译并生成字母 "A" 的路径坐标。

// other includes
#include <windows.h>
#include <ObjIdl.h>
#include <minmax.h>
#include <gdiplus.h>

using namespace Gdiplus;
using namespace ci;
using namespace ci::app;

#pragma comment (lib, "Gdiplus.lib")

// ...

void MyApp::setup()
{
  // ...

  GraphicsPath p(FillModeAlternate);
  FontFamily fontFamily(L"Arial");

  if (p.AddString(L"A", -1, &fontFamily, FontStyleRegular, 48, PointF(0.0f, 0.0f), NULL) != Status::Ok)
  {
    std::cout << "Error while adding points" << std::endl;
  }

  PointF points[64];

  if (p.GetPathPoints(points, sizeof(points)) != Status::Ok)
  {
    std::cout << "Error while getting points" << std::endl;
  }
}