使用 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 时可以浏览到。
FontFamily fontFamily(L"Times New Roman");
"Cannot initialize local variable 'fontFamily' of type 'FontFamily'
with lvalue of type 'wchar_t const[16]'
GraphicsPath path;
"No default constructor exists for class "GraphicsPath""
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;
}
}
我正在尝试在我的 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 时可以浏览到。
FontFamily fontFamily(L"Times New Roman");
"Cannot initialize local variable 'fontFamily' of type 'FontFamily' with lvalue of type 'wchar_t const[16]'
GraphicsPath path;
"No default constructor exists for class "GraphicsPath""
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;
}
}