Кто знает, эффективно выводить текст в SimpleOpenGLControl средсвами Tao?
В моей проге, которую я пишу с помощью Tao, нужно рисовать 2D текст. Насколько я понял задача эта вовсе не тривиальная.
Необходимо чтобы я мог задавать шрифт, размер, цвет и язык вывода (мне нужна кириллица). То есть библиотека freeGlut здесь не подойдет (на сколько я понял из урока 5.4 там очень ограниченный набор шрифтов и невозможность использовать кириллицу). Вот тут и начались мои google мытарства. В итоге после многих часов поиска я не обнаружил ни одного внятного способа вывода текста в SimpleOpenGLControl.
Думаю каждому из нас это может понадобиться, поэтому надо основательно разобраться. Вот, например, в Tao есть FreeType. Но, как ей пользоваться? Ни толкового примера найдено не было...
Буду премного благодарен за разъяснение этого вопроса...
Необходимо чтобы я мог задавать шрифт, размер, цвет и язык вывода (мне нужна кириллица). То есть библиотека freeGlut здесь не подойдет (на сколько я понял из урока 5.4 там очень ограниченный набор шрифтов и невозможность использовать кириллицу). Вот тут и начались мои google мытарства. В итоге после многих часов поиска я не обнаружил ни одного внятного способа вывода текста в SimpleOpenGLControl.
Думаю каждому из нас это может понадобиться, поэтому надо основательно разобраться. Вот, например, в Tao есть FreeType. Но, как ей пользоваться? Ни толкового примера найдено не было...
Буду премного благодарен за разъяснение этого вопроса...
А label сверху наложить, просто перетянуть с toolbox-а и поместить сверху SimpleOpenglContol-a, а в коде управлять цветом, видимостью, положением и т. д.
Первым аргументом она принимает hDC — контекст устройства. Может кто знает, как определить какой hDC у simpleOpenGlControl? Возможно тогда проблема решится…
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Tao.Platform.Windows;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
simpleOpenGlControl1.InitializeContexts();
}
private void simpleOpenGlControl1_Load(object sender, EventArgs e)
{
IntPtr hdc1 = Wgl.wglGetCurrentContext();//первый способ
//MessageBox.Show(hdc1.ToString());
}
private void simpleOpenGlControl1_Paint(object sender, PaintEventArgs e)
{
IntPtr hdc1 = Wgl.wglGetCurrentContext();//первый способ
IntPtr hdc2 = e.Graphics.GetHdc();//второй
//label1.Text = hdc1.ToString();
//label1.Text += " " + hdc2.ToString();
}
}
}
попробуй, я не проверял. Какой-то, по идеи должен работать.
+ суперкнига стр.658 там нечто аналогичное. Хотел сходу проверить, но возникла проблема создания
HFONT hFont;
LOGFONT logfont;
Думаю чуть позже разберусь и напишу о результатах.
System.Drawing.Font g = new Font(FontFamily.GenericSansSerif, 14.0);
Object log;
g.ToLogFont(log);
про
На с++ есть пару библиотек для этого, чтоб самому не писать, вот пример:
вот сюда случайно
Как я понял из разных источников, это все берется из gdi32.dll, как, например, в этом случае:
Все бы ничего, только как правильно осуществить DllImport пока не понятно. В примере это место пропущено. Через ссылки gdi32.dll добавляться не хочет. Может кто чего знает по этому поводу?
[DllImport("user32.dll", EntryPoint = "LoadCursorFromFileW", CharSet = CharSet.Unicode)]
public static extern IntPtr LoadCursorFromFile(String str);
есть не плохая утилитка, для удобного импорта.