Russian Qt Forum

Qt => Мультимедиа => Тема начата: Eyxeniy от Май 19, 2011, 19:37



Название: хранитель экрана
Отправлено: Eyxeniy от Май 19, 2011, 19:37
Привет, вот надо код переделать, кто может помочь ?

Прога: при запуске крутятся 2 квадрата в разные стороны.


/*
   ssaver.cpp - simpliest screensaver.
   Especially for "MyComputer" readers :-)
   -------------------------------------
   Programmed by Ivan Gavrilyuk on Aug, 2002
   mailto: ivg@hotbox.ru
   best chat: http://chat.chat.ru, channel "Programmers" :-)
*/

#include <windows.h>
#include <scrnsave.h>
#include <math.h>

double pi = 3.1415926;
double pi2 = 2*pi;
double hpi = pi/2;

//screensaver message cycle. Works like WinMain in clean Win32API application
LRESULT WINAPI ScreenSaverProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   static PAINTSTRUCT ps = {NULL};
   static HDC hDC = NULL;
   static HPEN hPen1;
   static UINT uTimer = 0;
   static int x_max, y_max;
   static double step = 0.01, angle = 0;
   static int center_x, center_y;

   switch(message)
   {
   case WM_CREATE:
      x_max = GetSystemMetrics(SM_CXSCREEN);
      y_max = GetSystemMetrics(SM_CYSCREEN);
      center_x = x_max / 2;
      center_y = y_max / 2;
      uTimer = SetTimer(hWnd, 1, 10, NULL);
      hPen1 = (HPEN)GetStockObject(WHITE_PEN);
      break;

    case WM_DESTROY:
      if(uTimer) KillTimer(hWnd, uTimer);
      PostQuitMessage(0);
      break;

   case WM_TIMER:
      angle += step;
      if(angle > pi2) angle = 0;

      RECT lpr;
      lpr.left = center_x - 102;
      lpr.top = center_y - 102;
      lpr.right = center_x + 102;
      lpr.bottom = center_y + 102;;
      InvalidateRect(hWnd, &lpr, true);
      break;

   case WM_PAINT:
      x_max = GetSystemMetrics(SM_CXSCREEN);
      y_max = GetSystemMetrics(SM_CYSCREEN);
      center_x = x_max / 2;
      center_y = y_max / 2;
      
      hDC = BeginPaint(hWnd, &ps);
      
      if(fChildPreview)
      {
         SetBkColor(hDC, RGB(0, 0, 0));
         SetTextColor(hDC, RGB(255, 255, 0));
         char szPreview[] = "Мои квадратики :-)";
         TextOut(hDC, 15, 45, szPreview, strlen(szPreview));
      }
      else
      {
         SetBkColor(hDC, RGB(1, 0, 0));
         SetTextColor(hDC, RGB(120, 120, 120));

         SelectObject(hDC, hPen1);
         MoveToEx(hDC, center_x + (int)(cos(angle)*(double)100), center_y + (int)(sin(angle)*(double)(-100)), NULL);
         LineTo(hDC, center_x + (int)(cos(hpi + angle)*(double)100), center_y + (int)(sin(hpi + angle)*(double)(-100)));
         LineTo(hDC, center_x + (int)(cos(pi + angle)*(double)100), center_y + (int)(sin(pi + angle)*(double)(-100)));
         LineTo(hDC, center_x + (int)(cos(hpi + pi + angle)*(double)100), center_y + (int)(sin(hpi + pi + angle)*(double)(-100)));
         LineTo(hDC, center_x + (int)(cos(angle)*(double)100), center_y + (int)(sin(angle)*(double)(-100)));

         MoveToEx(hDC, center_x + (int)(cos(-angle)*(double)50), center_y + (int)(sin(-angle)*(double)(-50)), NULL);
         LineTo(hDC, center_x + (int)(cos(hpi - angle)*(double)50), center_y + (int)(sin(hpi - angle)*(double)(-50)));
         LineTo(hDC, center_x + (int)(cos(pi - angle)*(double)50), center_y + (int)(sin(pi - angle)*(double)(-50)));
         LineTo(hDC, center_x + (int)(cos(hpi + pi - angle)*(double)50), center_y + (int)(sin(hpi + pi - angle)*(double)(-50)));
         LineTo(hDC, center_x + (int)(cos(-angle)*(double)50), center_y + (int)(sin(-angle)*(double)(-50)));

         static char szAuthor[] = "Programmed by Evgeniy";
         TextOut(hDC, 0, y_max - 20, szAuthor, strlen(szAuthor));
      }
      
      EndPaint(hWnd, &ps);
      break;

    default:
      return DefScreenSaverProc(hWnd, message, wParam, lParam);
   }

   return 0;
}

BOOL WINAPI ScreenSaverConfigureDialog (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
   return true;
}

BOOL WINAPI RegisterDialogClasses (HANDLE hInst)
{
   return true;
}

//That's all, folks!


Название: Re: хранитель экрана
Отправлено: Пантер от Май 20, 2011, 09:01
Во что переделать?


Название: Re: хранитель экрана
Отправлено: ecspertiza от Май 20, 2011, 11:36
В прогу по синхронизации данных между, между БД MySQL и SQLite c помощью SOAP протокола  ;D


Название: Re: хранитель экрана
Отправлено: Пантер от Май 20, 2011, 11:59
ecspertiza, жжешь.  ;D


Название: Re: хранитель экрана
Отправлено: Eyxeniy от Май 20, 2011, 15:27
Переделать на qt(с++), чтобы запускался под линуксом.


Название: Re: хранитель экрана
Отправлено: ecspertiza от Май 20, 2011, 15:33
Встречный вопрос, сколько платите ? Либо рассказывайте что сами пробовали сделать, и что получилось. Бесплатно просто никому не охото работать  :) Курите примеры из папки QT \examples\graphicsview\ они я думаю должны во многом помочь.


Название: Re: хранитель экрана
Отправлено: Eyxeniy от Май 20, 2011, 15:45
Я вас прекрасно понимаю ......
Пробовал, только ошибки выкидывает и все (((


Название: Re: хранитель экрана
Отправлено: Пантер от Май 20, 2011, 15:46
Что пробовал? Скомпилить под Линухом? Дык тут винапи непереносимое. Тут не переделывать нужно, а делать с нуля.


Название: Re: хранитель экрана
Отправлено: ecspertiza от Май 20, 2011, 15:51
Кстати а как автор поста под линухом работает? ну я имею ввиду опыт есть? Скачай для начала себе Qt под линукс, собери его, потом покури немного примеры, попробуй чего нибудь навоять, кидай сюда что выйдет, а мы поможем)))) Но поверь перекладывать винапи под Qt с нуля, ну уж совсем не хочется(без вознаграждения) :)


Название: Re: хранитель экрана
Отправлено: Eyxeniy от Май 20, 2011, 23:02
Граждане, за идею надо, за идею )))
Идея не победима ))))

В линуксе, хоть как-нибудь можно увидеть код скринсевера ?
У линукса же операционка открыта.

И ещё, можно сделать прогу под виндой, а затем воспользоваться программой(?) и перекомпилировать её на линукс ? О, как ))


Название: Re: хранитель экрана
Отправлено: ecspertiza от Май 21, 2011, 13:44
для того что бы запустить программу написанную под винду на линуксе можно воспользоваться wine. А можно написать программу кроссплатформену на Qt например и собрать под каждую платформу :)