使用GraphicsPath :: AddString()抱怨“类'GraphicsPath'没有成员'AddString'”

时间:2019-12-27 21:34:28

标签: c++ gdi+ visual-studio-2019 cinder

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

想法是通过上述方法创建字母/字形的路径,然后将其传递到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)。标题在那里,在按F12键时可以浏览到。

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

“无法初始化类型为'FontFamily'的局部变量'fontFamily'   左值类型为'wchar_t const [16]'

  1. GraphicsPath path;
  

“类“ GraphicsPath”不存在默认构造函数”

  1. path.AddString(...)
  

“类'GraphicsPath'没有成员'AddString'”

我们非常感谢您的帮助。我花了几个小时来解决这个问题,但进度为零。

1 个答案:

答案 0 :(得分:0)

搜索了高点和低点后,我发现了这一点。我缺少几个包含项。但是说实话,我还是不太明白为什么编译器会抱怨该特定消息...

以下内容确实为我编译,并生成字母“ 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;
  }
}