2014 dxdy logo

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

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




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


17/06/06
5004
... или подскажите туториал по 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 


19/11/08
347
В WINAPI есть только примитивы вроде рисования линий и кругов ... да и те неизвестного качества - ведь даже линию можно разными способами нарисовать.
Может сразу замахнуться на что-то типа DirectX ?
Или придётся самому всю графическую библиотеку писать (если она конечно не ограничивается линиями и кругами).

 Профиль  
                  
 
 
Сообщение13.02.2009, 15:42 


21/03/06
1545
Москва
Если 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 


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

 Профиль  
                  
 
 
Сообщение13.02.2009, 21:03 


21/03/06
1545
Москва
Цитата:
а <graphics.h> вам хватит? там можна нарисовать простенькие фигуры в консольном окне.

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

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

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

 Профиль  
                  
 
 
Сообщение14.02.2009, 10:46 


23/12/08
245
Украина
Но зато отлично рисует линии)

 Профиль  
                  
 
 Re: Самодельная кроссплатформенная графическая библиотека, и
Сообщение16.02.2009, 21:44 
Заслуженный участник


14/12/06
881
AD писал(а):
Задача такая. Есть мааленькая программка, написанная на C с использованием Xlib. Хочется перетащить ее под windows.

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

 Профиль  
                  
 
 
Сообщение19.02.2009, 16:21 


02/09/08
143
Вообще кросс-платформенные графические программы лучше писать хотя бы под SDL.

 Профиль  
                  
 
 
Сообщение19.02.2009, 21:21 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Можно посмотреть вот на это: http://libw11.free.fr/libw11/downloads/index.html
Проект давно не развивается, но для простых функций должно хватить.

 Профиль  
                  
 
 
Сообщение19.02.2009, 21:57 
Экс-модератор


17/06/06
5004
Большое спасибо за все ответы! Думаю, что я присмотрюсь к libw11, и если не заладится - приму предложение e2e4.

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

 Профиль  
                  
 
 
Сообщение20.02.2009, 10:19 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Если Вы используете какую-нибудь достаточно автоматическую систему разработки, которая может Вам сделать заготовку для окна с правильной оконной функцией и т.д. (или можете сделать это все сами), то при перерисовке можно все требуемое сделать без особых проблем.

 Профиль  
                  
 
 
Сообщение20.02.2009, 12:19 
Заблокирован
Аватара пользователя


13/01/09

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

C++ Builder.

 Профиль  
                  
 
 
Сообщение20.02.2009, 13:17 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Я привык к MFC, но можно обойтись и без него.

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

 Профиль  
                  
 
 
Сообщение20.02.2009, 15:04 
Заслуженный участник


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

 Профиль  
                  
 
 
Сообщение23.02.2009, 19:39 
Экс-модератор


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

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group