我试图在我的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键时可以浏览到。
FontFamily fontFamily(L"Times New Roman");
“无法初始化类型为'FontFamily'的局部变量'fontFamily' 左值类型为'wchar_t const [16]'
GraphicsPath path;
“类“ GraphicsPath”不存在默认构造函数”
path.AddString(...)
“类'GraphicsPath'没有成员'AddString'”
我们非常感谢您的帮助。我花了几个小时来解决这个问题,但进度为零。
答案 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;
}
}