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

> Внимание!

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

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Пропадает результат picturebox.
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 





- Текстовая версия 23.12.2025 20:01
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name