Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2013, 18:14   #1
Deman1986
Пользователь
 
Регистрация: 08.04.2013
Сообщений: 16
По умолчанию графическое прилодение с окружностями

Доброго времени суток. у меня такой вопрос учусь в институте разрабатываю прогу. Задание такое Вопрос 1 С помощью API-функций создать графическое приложение, которое выводит 8-10 окружностей с разными атрибутами (цвет, толщина, стиль), с обязательной перерисовкой изображения при манипуляциях с окном.
вот собственно и сам код программы:
Код:
program Project55;
uses
  windows,
  messages;

{$R *.RES}
var
  MyWin: HWND;
  MyDC: HDC;


function WindowFunc(MyWin: HWND; Mess,wParam,lParam: longint):longint; export; stdcall;
var ps : TPaintStruct;
    i : Integer;
    Pen : HPEN;
    brush : HBRUSH;

begin
  WindowFunc:=0;
  case Mess of
   WM_DESTROY: begin
               PostQuitMessage(0);
               Exit;
               end;

   WM_Paint: begin
              BeginPaint(MyWin, ps);
                for i := 0 to 9 do
                begin
                  Pen :=  SelectObject(ps.hdc, CreatePen(Random(8), Random(10)+1,  Random($ffffff + 1)));
                  brush := SelectObject(ps.hdc, CreateSolidBrush(Random($ffffff + 1)));
                    Ellipse(ps.hdc,
                      250 + i * 5,
                      250 + i * 5,
                      500 - i * 5,
                      500 - i * 5);
                  DeleteObject( SelectObject(ps.hdc, brush));
                  DeleteObject( SelectObject(ps.hdc, pen));
                end;
              EndPaint(MyWin, ps);
             end;
  end;
   WindowFunc:=DefWindowProc(MyWin, Mess, wParam, lParam);
  end;

procedure WinMain;
var
  Mess: TMsg;
  MyWClass: TWndClass;
begin

  MyWClass.lpfnWndProc:= @WindowFunc;
  MyWClass.lpszClassName:= 'MyClass';
  MyWClass.lpszMenuName:= nil;
  MyWClass.hCursor:= LoadCursor(0,IDC_ARROW);
  MyWClass.hbrBackground:= Hbrush (COLOR_WINDOW);
  MyWClass.hIcon:= LoadIcon(0, IDI_ASTERISK);
  MyWClass.Style:= cs_VRedraw OR cs_HRedraw OR cs_DblClks;
  MyWClass.cbClsExtra:= 0;
  MyWClass.cbWndExtra:= 0;
  MyWClass.hInstance:= hInstance;

  if RegisterClass(MyWClass)=0 then Exit;
  MyWin:= CreateWindow('MyClass', 'My first window',
                         WS_OVERLAPPEDWINDOW,
                         100, 100, 700, 700, 0, 0,
                         hInstance, nil);

  ShowWindow(MyWin, CmdShow);
  UpdateWindow(MyWin);
  while GetMessage(Mess, 0, 0, 0) do
    begin
     TranslateMessage(Mess);
     DispatchMessage(Mess);
    end;
end;

begin
  WinMain;
end.
Отправил преподу. Но он от меня требует перерисовки изображения при манипуляции с окном подскажите подалуйста в чём моя ошибка спасибо.

Последний раз редактировалось Deman1986; 08.04.2013 в 18:34. Причина: добавление текста
Deman1986 вне форума Ответить с цитированием
Старый 08.04.2013, 18:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
требует перерисовки
Потребуй у него отставки )
Твой обработчик WM_Paint как раз и занимается перерисовкой, когда виндовс считает что окно должно перерисовываться.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.04.2013, 18:30   #3
Deman1986
Пользователь
 
Регистрация: 08.04.2013
Сообщений: 16
По умолчанию

Может быть он просит перерисовку самих окружностей т.е. изменение самого размера окружностей при манипуляции с окном. Подскажите как это реализовать. спасибо

Последний раз редактировалось Deman1986; 08.04.2013 в 18:33. Причина: добавление текста
Deman1986 вне форума Ответить с цитированием
Старый 08.04.2013, 19:57   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Deman1986 Посмотреть сообщение
Может быть он просит перерисовку самих окружностей т.е. изменение самого размера окружностей при манипуляции с окном.
Это Вы у нас спрашиваете, что именно просит у Вас преподаватель?
Цитата:
Подскажите как это реализовать. спасибо
А что такое манипуляция?
Если эта манипуляция сопровождается какими-либо сообщениями окну, то заведите переменные, характеризующие параметры, которые нужно изменять, и меняйте их при приходе нужных сообщений.
s-andriano вне форума Ответить с цитированием
Старый 08.04.2013, 20:24   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Может быть он просит перерисовку самих окружностей
Тык ты выясни у него подробнее какая муха его мочей в голову укусила )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.04.2013, 09:24   #6
Deman1986
Пользователь
 
Регистрация: 08.04.2013
Сообщений: 16
По умолчанию

Уважаемые форумчане нужно кроме цвета менять еще толщину окружностей со стилем при манипуляцйии с окном т.е. когда изменяется размер окна окружности должны менять цвет, толщину линий. Спасибо за ответы

Последний раз редактировалось Deman1986; 09.04.2013 в 09:30. Причина: добавление текста
Deman1986 вне форума Ответить с цитированием
Старый 10.04.2013, 15:42   #7
Deman1986
Пользователь
 
Регистрация: 08.04.2013
Сообщений: 16
По умолчанию

Препод вот что написал на заданный мною вопрос: Перерисовка - это повторный вывод изображения БЕЗ его изменения, т.е. изображение меняться НЕ должно. Именно это я написал как замечание
Deman1986 вне форума Ответить с цитированием
Старый 14.04.2013, 09:29   #8
Deman1986
Пользователь
 
Регистрация: 08.04.2013
Сообщений: 16
По умолчанию

Уважаемые подскажите срок здачи подходит.
Deman1986 вне форума Ответить с цитированием
Старый 14.04.2013, 10:04   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

С потолка так накидаю, поскольку в ВИНАПИ не особо сведущ:
Код:
 Pen: HPEN;
 lPen: LOGPEN;
...
   WM_Paint: begin
              BeginPaint(MyWin, ps);

lPen.lopnWidth:=3; // Это ширина
lPen.lopnStyle:=PS_SOLID; // Это стиль
nPen:=CreatePenIndirect(lPen); // Создаем новое перо

                for i := 0 to 9 do
                begin
                  Pen :=  SelectObject(ps.hdc,nPen);
                    Ellipse(ps.hdc,
                      250 + i * 5,
                      250 + i * 5,
                      500 - i * 5,
                      500 - i * 5);
                  DeleteObject( SelectObject(ps.hdc, pen));
                end;
              EndPaint(MyWin, ps);
             end;
...
end;
Цитата:
т.е. изображение меняться НЕ должно.
Дубина он. Если ты при перерисовке меняешь стиль линий, то это уже совсем другое изображение.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа с окружностями денис133 Помощь студентам 1 03.07.2011 22:37
Растояние между двумя окружностями IGOMERL Паскаль, Turbo Pascal, PascalABC.NET 3 01.05.2011 10:40
Зарисовать весь экран окружностями. vereney Паскаль, Turbo Pascal, PascalABC.NET 13 10.04.2011 20:28
Прилодение без главной формы Altera Общие вопросы Delphi 5 25.10.2009 17:40
графическое отображение CraZZy RabbIt Общие вопросы Delphi 15 14.04.2009 15:22