IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Пропадает результат picturebox.
Krjuger
сообщение 5.05.2011 18:08
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Собственно,есть проэкт в VS 2008 C++,у фрейма есть кнопка и picturebox.По нажатии на кнопку должна отрисоваться сетка из прямоугольников.(100х100 где то) Дело в том что после нажания кнопки происходит отрисовка,но по завершению результат пропадает,приходится нажимать 2 раз,и тогда от нормально и длительно отображается,хотя иногда тоже пропадает.Мне непонятно почему такое может происходить??Еще мне немного не нравится та скорость,с которой происходит отрисовка,можно ли ее как нибудь ускорить?Дело в том,что потом для каждой "клетки" будет задаваться свой собственный цвет.

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
      { 
	 const int N=100;
	 double size=1.0;
	 double x,y;
	 double h=size/N;
	 double Xkoef= (pictureBox1->Width)/size;
                 double Ykoef= (pictureBox1->Height)/size;
	 Graphics^ g = pictureBox1->CreateGraphics();
                  Pen^ bluePen = gcnew Pen( Color::Blue,1.0f );
  	 SolidBrush^ hBrush = gcnew SolidBrush (Color::Red);
                  for ( int i=1 ; i<=N ; i++)
	 {
	       for ( int j=0 ; j<=N ; j++)
                       {
	               x= (i)*h * Xkoef;
                               y= (j)*h * Ykoef;
	               g->FillRectangle( hBrush,Rectangle(x, y,(x + h*Xkoef),(y + h*Ykoef)));
	               g->DrawRectangle(bluePen,Rectangle(x, y,(x + h*Xkoef),(y + h*Ykoef)));
	       }
	 }
 }



Сообщение отредактировано: Krjuger - 5.05.2011 18:09
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
IUnknown
сообщение 5.05.2011 20:13
Сообщение #2


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Krjuger, тип RectangleF как-то больше подходит для заталкивания в него вещественных значений, чем Rectangle. Опять же, не надо перерасчитывать значения X в цикле по J, результаты будут одинаковыми, вынеси вычисления из внутреннего цикла. Но это так, для проформы. На скорость отрисовки влияния не окажет.

С точки зрения алгоритма - все прекрасно, почему сбоит реализация в VS 2008 - непонятно. Проверил на C# - рисует прямоугольнички как положено, ничего не исчезает.

Цитата
Еще мне немного не нравится та скорость, с которой происходит отрисовка,можно ли ее как нибудь ускорить?
Если б ты не написал ниже, что
Цитата
потом для каждой "клетки" будет задаваться свой собственный цвет.
- то ларчик открывался просто: в цикле заполняешь массив RectangleF[], без отрисовки, а потом одним махом g->FillRectangles + g->DrawRectangles. Выигрыш по скорости очень заметен. Но раз для каждой клетки - свой цвет, то можно сэкономить на одной из отрисовок. В цикле делаешь g->FillRectangle, и запоминаешь область. А потом, после циклов - опять же один вызов g->DrawRectangles, и тебе все клеточки обведутся...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Krjuger   Пропадает результат picturebox.   5.05.2011 18:08
-TarasBer-   А сколько пикселей занимает 1 прямоугольник? Если ...   5.05.2011 19:56
IUnknown   Krjuger, тип RectangleF как-то больше подходит для...   5.05.2011 20:13
-TarasBer-   Кстати, обход по икс должен быть внутри обхода по ...   5.05.2011 20:41
Krjuger   Ну просто тут такое дело,что эта задача напрямую с...   5.05.2011 21:03
IUnknown   Тогда тебе волноваться не о чем. Распахнутое на ве...   5.05.2011 21:18
-TarasBer-   > Распахнутое на весь экран окно (при расширени...   5.05.2011 21:50
IUnknown   Нет, у меня по-прежнему E4400. Чтоб применить норм...   5.05.2011 22:25
TarasBer   > А StretchBlt тебе что, очень поможет (даже ес...   6.05.2011 10:03
IUnknown   Это ты о чем, вообще? :blink: Блин... Да ты пой...   6.05.2011 10:18
TarasBer   > Это ты о чем, вообще? А, это не ты был? Ти...   6.05.2011 10:36
IUnknown   :mad: Знаешь, что? Свои фантазии оставь при себе....   6.05.2011 12:54
TarasBer   > А если очень хочется, и делаешь "можно...   6.05.2011 13:04
Krjuger   Я благодарен за такой интерес к этой теме,но после...   6.05.2011 15:26
IUnknown   Значит, они все-таки будут. То есть, цветов будет ...   6.05.2011 16:42
Krjuger   Да я сам чето тормознул,повелся на то,что преподав...   6.05.2011 18:41
IUnknown   Зачем же выделять память, если можно сделать измен...   6.05.2011 19:16
Krjuger   Спасибо за совет,сам бы врятли додумался :) Новую ...   6.05.2011 23:33
IUnknown   Молодец. Перенаправить вывод в stdout в файл - дог...   7.05.2011 1:43
Krjuger   Ну а тут возникли некоторые проблемы. Дело в том,ч...   7.05.2011 13:40
IUnknown   Что именно не понятно? Вроде все прозрачно: читаем...   7.05.2011 15:06
Krjuger   Возвращаясь к тем же баранам.Тот код ,что ты скиды...   8.05.2011 11:18
-TarasBer-   > ,что число дабл храниться в в памяти с точкой...   8.05.2011 11:48
Krjuger   Да решение оказалось действительно достаточно прос...   8.05.2011 12:39
Krjuger   В общем я наконецто доделал.Протестировал на разны...   8.05.2011 14:22


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 28.07.2025 12:48
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"