【发布时间】:2013-04-16 21:00:28
【问题描述】:
我设法找到了这段代码 sn-p 并用 Cairo 编译它:
#define LIBCAIRO_EXPORTS
#include <cairo/cairo.h>
#include <cairo/cairo-win32.h>
int main(int argc, char** argv)
{
cairo_surface_t *surface;
cairo_t *cr;
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 240, 80);
cr = cairo_create (surface);
cairo_select_font_face (cr, "serif", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size (cr, 32.0);
cairo_set_source_rgb (cr, 0.0, 0.0, 1.0);
cairo_move_to (cr, 10.0, 50.0);
cairo_show_text (cr, "Hello, World");
cairo_destroy (cr);
cairo_surface_write_to_png (surface, "hello.png");
cairo_surface_destroy (surface);
return 0;
}
如您所见,它创建了一个带有文本“Hello World”的图像并将其保存在驱动器上。 如何创建一个 win32 表面并改为绘制到窗口?
我使用失败:cairo_win32_surface_create
它需要hdc,我不知道那是什么。我尝试阅读一些教程,但似乎没有一个可以引导您完成打印到新窗口。
我找到了这个链接: http://windrealm.org/cairo-gdi/
它有一个工作演示,但它使用int WINAPI WinMain。我不想用那个。
【问题讨论】:
-
HDC是设备上下文的句柄,它基本上是一个虚拟画布,其状态包括选定的笔、选定的画笔和选定的位图。我希望这至少会有所帮助。 -
如果你不熟悉 Windows GDI 开发,你可能想看看here。您可能对Device Contexts 和Bitmaps 最感兴趣
-
我发现这个链接显示了如何使用除 win32 gdi 之外的所有内容:zetcode.com/gfx/cairo/cairobackends
-
我还发现这似乎部分回答了我的问题:windrealm.org/cairo-gdi 但它使用了我希望避免的 winmain。有可能吗?
-
您可以从控制台程序创建一个窗口,但您必须运行一个消息循环才能正确操作它。从使用 winmain 的示例开始会更容易。