2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Самодельная кроссплатформенная графическая библиотека, или
Сообщение13.02.2009, 15:05 
... или подскажите туториал по WinAPI. :mrgreen:

Задача такая. Есть мааленькая программка, написанная на C с использованием Xlib. Хочется перетащить ее под windows.

Но я предварительно переобозвал необходимые функции из Xlib примерно в таком духе:
Код:
void x_init(); // создает одно-единственное окно.
void x_close(); // убивает окно и программу.

void x_setcolor(const char*); // устанавливают цвет для рисования
void x_setcolor_rgb(int,int,int); // то же самое
void x_line(double,double,double,double); // рисует линию
void x_circle(double,double,double); // круг
void x_rect(double,double,double,double); // прямоугольник
void x_print(double,double,const char*); // печатает текст

void x_redraw(); // прототип функции, отвечающей за перерисовку окна
void x_keypress(const char*); // прототип функции, отвечающей за обработку нажатия клавиш на клаве
, и в тексте собственно программы использую только эти самодельные функции, а собственно к Xlib не обращаюсь.

Вопрос - на чём бы дешево и сердито реализовать аналогичные функции под windows? То есть мне не нужны стандартные кнопочки/инпутбоксы, только рисование прямо на единственном окне.

Подозреваю, что надо просто взяться за WinAPI, но оно как-то очень страшно выглядит - гораздо страшнее Xlib :) И начинаются все учебники с кнопочек, а не с рисования. Я бы согласился просто копипастнуть готовый код - если кто-нибудь подкинет ссылку.

 
 
 
 
Сообщение13.02.2009, 15:39 
В WINAPI есть только примитивы вроде рисования линий и кругов ... да и те неизвестного качества - ведь даже линию можно разными способами нарисовать.
Может сразу замахнуться на что-то типа DirectX ?
Или придётся самому всю графическую библиотеку писать (если она конечно не ограничивается линиями и кругами).

 
 
 
 
Сообщение13.02.2009, 15:42 
Если WinAPI, то см. функции
DrawText, SetPixel, BeginPaint, EndPaint, GetDC
Пример использования (выводит текст и рисует синусоиду):

Код:
VOID APIENTRY HandlePaint(
    HWND hwnd
    )
{
    HDC         hdc;
    PAINTSTRUCT ps;
    RECT        rc;
    TCHAR       tszOut[] = TEXT("Tap in the window for a popup menu");
   
    hdc = BeginPaint(hwnd, (LPPAINTSTRUCT)&ps);
   
   for(int i=0;i<2400;i++)
   {
      SetPixel(hdc,i/10,100 +
         sin(float(i)/200)*50,
         RGB(255,0,0));
   }
    /* Center the text in the client area
    GetClientRect (hwnd, (LPRECT)&rc);
    DrawText (hdc,
        tszOut,
        _tcslen(tszOut),
        (LPRECT)&rc,
        DT_VCENTER | DT_CENTER | DT_SINGLELINE);
   */
    EndPaint(hwnd, (LPPAINTSTRUCT)&ps);
}


Для обработки нажатия клавиш и перерисовки надо писать функцию окна, принимающую и реагирующую на соответствующие сообщения системы.

Остальное - линии, круги и т.п. аналогично рисованию точки.

Если хотите, пишите в личку e-mail, пришлю хорошо комментированный файл, в котором создается окно, реализована функция окна, реакции на некоторые события, прорисовка, меню и т.п. Не бойтесь WinAPI, мне хватило часа, чтобы, на основании примера реализовать кое-что свое.

 
 
 
 
Сообщение13.02.2009, 17:54 
а <graphics.h> вам хватит? там можна нарисовать простенькие фигуры в консольном окне. Можна ещо Open-GL если надо чтото не такое примитивное рисовать, эго несложно освоить и легко ресуется( проще чем в DirectX) а если использовать ещо как среду разработки Dev-Cpp то там уже готовый проэкт есть с настроеным окном и.т.п
Хоть бери и сразу рисуй что надо.

 
 
 
 
Сообщение13.02.2009, 21:03 
Цитата:
а <graphics.h> вам хватит? там можна нарисовать простенькие фигуры в консольном окне.

Не хватит ему, не хватит :).

graphics.h - пережиток DOS.

Рисовать в консольном окне невозможно, можно рисовать в графическом режиме консольного приложения.

 
 
 
 
Сообщение14.02.2009, 10:46 
Но зато отлично рисует линии)

 
 
 
 Re: Самодельная кроссплатформенная графическая библиотека, и
Сообщение16.02.2009, 21:44 
AD писал(а):
Задача такая. Есть мааленькая программка, написанная на C с использованием Xlib. Хочется перетащить ее под windows.

А если установить X-server под Windows?
Например, lyx так работает под Windows -- и ничего ему в том не мешает.

 
 
 
 
Сообщение19.02.2009, 16:21 
Вообще кросс-платформенные графические программы лучше писать хотя бы под SDL.

 
 
 
 
Сообщение19.02.2009, 21:21 
Аватара пользователя
Можно посмотреть вот на это: http://libw11.free.fr/libw11/downloads/index.html
Проект давно не развивается, но для простых функций должно хватить.

 
 
 
 
Сообщение19.02.2009, 21:57 
Большое спасибо за все ответы! Думаю, что я присмотрюсь к libw11, и если не заладится - приму предложение e2e4.

Прога ну очень простенькая, и графика там тоже примитивная, так что всякие зверские вещи типа Cygwin-X и DirectX я бы не стал пока трогать. И вообще я еще *сильно* начинающий. И, думаю, эта программка еще всплывет тут, но уже на тему матчасти :)

 
 
 
 
Сообщение20.02.2009, 10:19 
Аватара пользователя
Если Вы используете какую-нибудь достаточно автоматическую систему разработки, которая может Вам сделать заготовку для окна с правильной оконной функцией и т.д. (или можете сделать это все сами), то при перерисовке можно все требуемое сделать без особых проблем.

 
 
 
 
Сообщение20.02.2009, 12:19 
Аватара пользователя
PAV писал(а):
Если Вы используете какую-нибудь достаточно автоматическую систему разработки, которая может Вам сделать заготовку для окна с правильной оконной функцией и т.д. (или можете сделать это все сами), то при перерисовке можно все требуемое сделать без особых проблем.

C++ Builder.

 
 
 
 
Сообщение20.02.2009, 13:17 
Аватара пользователя
Я привык к MFC, но можно обойтись и без него.

Обработчик события WS_PAINT доступен?

 
 
 
 
Сообщение20.02.2009, 15:04 
AD писал(а):
Прога ну очень простенькая, и графика там тоже примитивная, так что всякие зверские вещи типа Cygwin-X ... И вообще я еще *сильно* начинающий.
Я не понял, чего именно Вы хотите.
Если просто пользоваться этой программой и многими другими из мира Unix, то проще всего установить эмулятор типа Cygwin. Ничего "зверского" в этом нет.
Если Вы хотите научиться программировать, то выбирайте систему программирования и переписывайте Вашу программу. MFC (по-моему) вряд ли имеет перспективу. MS обычно свои старые технологии очень энергично вытесняет своими же новыми. Так что либо переходите в .NET, либо на CBuilder.
Можно еще перейти на Linux, тогда и переписывать ничего не придется.

 
 
 
 
Сообщение23.02.2009, 19:39 
Yuri Gendelman в сообщении #188037 писал(а):
Если просто пользоваться этой программой и многими другими из мира Unix, то проще всего установить эмулятор типа Cygwin. Ничего "зверского" в этом нет.
Yuri Gendelman в сообщении #188037 писал(а):
Можно еще перейти на Linux, тогда и переписывать ничего не придется.
Установить-то я установил, перейти-то я перешел :), но не могу же я всем остальным сказать установить и перейти ради моей програмки ... :roll:

Ну я вот написал прогу через xlib, а народ жалуется, что под вендой не идёт. Ищу халявный способ пересадить, чтобы не поддерживать две программы.

 
 
 [ Сообщений: 17 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group