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
сообщение 6.05.2011 16:42
Сообщение #2


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

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

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


Цитата
Цвета будет всего 2 красный и синий,а все промежуточные цвета будут вычисляться.
Значит, они все-таки будут. То есть, цветов будет уже не 2. Ну, скажем, оттенков цвета...

Блин... Тормоз я, не посмотрел сразу на прототип. Krjuger, внимательно посмотри, что требует на входе FillRectangle?

Цитата(MSDN)
public:
void FillRectangle(Brush^ brush, 
	float x, float y, float width, float height)
Чуешь, да, куда я клоню? Ширину и высоту 3 и 4 параметром. А не конечную точку. То есть, у тебя отрисовывалось не много маленьких прямоугольников, а много больших, причем постоянно увеличивающихся в размере. Итого, вот такой код:
		void Button1Click(object sender, EventArgs e)
		{
			const int N=100;
			float size=1.0f;
			float h=size/N;
			float Xkoef= (pictureBox1.Width)/size;
			float Ykoef= (pictureBox1.Height)/size;
			Graphics g = pictureBox1.CreateGraphics();
			Pen bluePen = /*gc*/new Pen( Color.Blue, 1.0f );
			Pen redPen = /*gc*/new Pen( Color.Red, 1.0f );
			SolidBrush hBrush = /*gc*/new SolidBrush (Color.Red);
			SolidBrush hBrush2 = /*gc*/new SolidBrush (Color.Blue);
			
			float y = 0;
			for(int j = 0; j <= N; j++)
			{
				float x = h * Xkoef;
				for(int i = 1; i <= N; i++)
				{
					if ((i + j) % 2 == 1)
					{
						g.FillRectangle( hBrush, x, y, h * Xkoef, h * Ykoef);
					}
					else
					{
						g.FillRectangle( hBrush2, x, y, h * Xkoef, h * Ykoef);
					}
					x += h * Xkoef;
				}
				y += h * Ykoef;
			}
		}
работает на порядок быстрее...

Цитата
я к счастью, или к несчастью, не на нем пишу.
А на чем же ты пишешь? Graphics^, SolidBrush^, System::Object^, System::EventArgs^ - это что, по-твоему? WinAPI?

Сообщение отредактировано: IUnknown - 6.05.2011 16:46
 Оффлайн  Профиль  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

 

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