LINUX.ORG.RU

xlib XDrawString Русские буквы


0

0

Как написать и скомпелировать программу,
что бы вывести на екран Русские буквы
программа написана в UTF-8 (системный локал)

static char * message = "Hello";
XDrawString(display, win, gc, msg_x, msg_y, message, strlen(message));

Пример маке-файла

usiX: usiX.o
g++ -Wall -g -L/usr/X11R6/lib -lX11 -Wno-deprecated -o usiX usiX.o

usiX.o: usiX.cpp
g++ -Wall -g -c -Wno-deprecated usiX.cpp

Ответ на: комментарий от devinull

файл в кодировке утф.... почему бы и нет?
а что надо сделать чтобы данная функция
вывела Русские буквы ????

andyS1976
() автор топика
Ответ на: комментарий от andyS1976

Примерчик чего именно? В glib есть ф-ции для перевода из utf8 в ucs-2. Если все-таки с ними не поладишь, пиши. Завтра утром ( сейчас времени нет) приведу примерчик. PS: а ты шрифт русский поставил?

devinull ★★
()
Ответ на: комментарий от devinull

Примерчик перевода из utf8 в ucs-2 и вывода на экран...

а русские шрифт у меня есть, вот им сейчас и пишу эти строки.

PS
если не секрет какие программы используеш для программирования
под Линух? Мне понравился SlickEdit,... скачал триальную 10.02
версию но найте крак к ней не могу... кряки есть только к 10-ке
может поможешь заодно и с этим ?:)

andyS1976
() автор топика
Ответ на: комментарий от andyS1976

Использую vim. Мне хватает. Кроме шуток. С примерчиком попробую что-нибудь сообразить. А про шрифты, я имел ввиду другое. Перед рисование надо в GC выбрать русский шрифт в качестве текущего. Без этого работать и не должно.

devinull ★★
()

Что-то у меня ничегошеньки не получается с XDrawString16. 
Английский выводит, а с остальными - беда. Вообще, если
поразмыслить, то вполне возможно, что делать надо по-другому. Установи как текущий шрифт в кодировке KOI8-R, и в неё 
конвертируй текст. Примеров в тырнете полно. А выводится он 
очень просто.

main.cpp:

#include <X11/Xlib.h>
#include <glib.h>

#include <cstring>

using namespace std;

Display* dsp = 0;
Window root_window = 0;

int main( int, char** )
{
  dsp = XOpenDisplay( 0 );
  root_window = XDefaultRootWindow( dsp );
  Window wnd = XCreateSimpleWindow( dsp, root_window, 0, 0, 256, 256, 0, 0xffffff, None );
	
  XMapRaised( dsp, wnd );

  XEvent event;
  while( 1 )
  {
    GC gc = XCreateGC( dsp, wnd, 0, 0 );
    // вот оно - самое святое - загрузка шрифта
    Font font = XLoadFont( dsp, "-cronyx-fixed-*-*-*-*-*-*-*-*-*-*-koi8-r" );
		
    // и установка его в gc
    XSetFont( dsp, gc, font );
		
    XSetForeground( dsp, gc, 0xffffff );
    XSetBackground( dsp, gc, 0 );

    // так можно нарисовать текст в koi8-r
    const char* msg = "Ненавижу Иксы!!!";
    XDrawString( dsp, wnd, gc, 16, 16, msg, strlen( msg ) );
    XUnloadFont( dsp, font );
    XFreeGC( dsp, gc );
  }
}

Makefile:
CXXFLAGS=-ggdb -O0 -pipe `pkg-config --cflags glib-2.0` -I/usr/X11R6/include
LIBS=`pkg-config --libs glib-2.0` -L/usr/X11R6/lib -lX11

xdrawstring:main.cpp
	g++ $(CXXFLAGS) $(LIBS) main.cpp -o xdrawstring

devinull ★★
()
Ответ на: комментарий от devinull

СПАСИБО !!!

вот "самого святого" насчет загузки шрифта я и не знал:)

andyS1976
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.