![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
Krjuger |
![]()
Сообщение
#1
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Собственно,есть проэкт в 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 |
![]() ![]() |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Цвета будет всего 2 красный и синий,а все промежуточные цвета будут вычисляться. Значит, они все-таки будут. То есть, цветов будет уже не 2. Ну, скажем, оттенков цвета...Блин... Тормоз я, не посмотрел сразу на прототип. Krjuger, внимательно посмотри, что требует на входе FillRectangle? Цитата(MSDN) public:
void FillRectangle(Brush^ brush,
float x, float y, float width, float height)
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 |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 11:33 |