Graphics^ g = e->Graphics;
g->DrawEllipse(greenPen,10,10,1,1); // рисует "точку" в два пикселя
g->DrawLine(1,1,1,1); //вообще ничего не рисует
g->DrawLine(1,1,2,1);//рисует два пикселя
Как нарисовать точку?
Код:
подскажите, пожалуйста, как нарисовать точку в один пиксель?
SetPixel
получилось вот так:
Код:
private: System::Void panel1_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e) {
Bitmap^ myBitmap = gcnew Bitmap(600,200);
Pen^ redPen = gcnew Pen(Color::Red);
System::Drawing::Font^ drawFont =
gcnew System::Drawing::Font( "Arial",10 );
SolidBrush^ drawBrush = gcnew SolidBrush(Color::Yellow);
e->Graphics->Clear(Color::Black);
//координатные оси
redPen->Width = 1;
e->Graphics->DrawLine(redPen, 0, 100, 600, 100);
e->Graphics->DrawLine(redPen, 10, 0, 10, 200);
//!координатные оси
//график
for(int i=0; i<1000; i++) {
int g=(int)(30*sin(i*3.1415926536/180*3));
myBitmap->SetPixel(10+i/3,100+g,Color::Green);
}
e->Graphics->DrawImage( myBitmap, 0, 0, 600, 200 );
//!график
//подписи
for(int i=0; i<=10; i++){
PointF drawPoint = PointF(i*40,100);
e->Graphics->DrawString((i*40).ToString(),
drawFont,drawBrush,drawPoint);
}
//!подписи
}
System::Windows::Forms::PaintEventArgs^ e) {
Bitmap^ myBitmap = gcnew Bitmap(600,200);
Pen^ redPen = gcnew Pen(Color::Red);
System::Drawing::Font^ drawFont =
gcnew System::Drawing::Font( "Arial",10 );
SolidBrush^ drawBrush = gcnew SolidBrush(Color::Yellow);
e->Graphics->Clear(Color::Black);
//координатные оси
redPen->Width = 1;
e->Graphics->DrawLine(redPen, 0, 100, 600, 100);
e->Graphics->DrawLine(redPen, 10, 0, 10, 200);
//!координатные оси
//график
for(int i=0; i<1000; i++) {
int g=(int)(30*sin(i*3.1415926536/180*3));
myBitmap->SetPixel(10+i/3,100+g,Color::Green);
}
e->Graphics->DrawImage( myBitmap, 0, 0, 600, 200 );
//!график
//подписи
for(int i=0; i<=10; i++){
PointF drawPoint = PointF(i*40,100);
e->Graphics->DrawString((i*40).ToString(),
drawFont,drawBrush,drawPoint);
}
//!подписи
}
посмотрите, опытным глазом, есть какие-нибудь "несуразности" :)?
Цитата: annufriy
посмотрите, опытным глазом, есть какие-нибудь "несуразности" :)?
График обычно рисуется "ломаной". Т.е. отрезками от i-ой точки до i+1ой точки. Я бы создал экземпляр GraphicsPath и добавлял в него эти отрезки (конечно, используя вещественные числа), затем выводил методом Graphics.FillPath.
Этот способ позволит применять аффинные преобразования самого Graphics-а: повороты координат, масштабирование, или их комбинации.
З.Ы. MC++ совершенно для иных задач нужен - начните использовать C#, если вы еще не ориентируетесь в классах .NET.
Код:
private: System::Void panel1_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e) {
...
}
System::Windows::Forms::PaintEventArgs^ e) {
...
}
это обработчик события Paint панели.
если я хочу вызвать его вручную (по нажатию кнопки), как сформировать второй параметр System::Windows::Forms::PaintEventArgs^ e?
Цитата: annufriy
Код:
private: System::Void panel1_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e) {
...
}
System::Windows::Forms::PaintEventArgs^ e) {
...
}
если я хочу вызвать его вручную (по нажатию кнопки), как сформировать второй параметр System::Windows::Forms::PaintEventArgs^ e?
panel1->Invalidate(true);
а как все-таки сформировать структуру e? хотелось бы получить доступ к соответствующему Graphics извне. это возможно?
Цитата: annufriy
ок. спасибо, работает :).
а как все-таки сформировать структуру e? хотелось бы получить доступ к соответствующему Graphics извне. это возможно?
а как все-таки сформировать структуру e? хотелось бы получить доступ к соответствующему Graphics извне. это возможно?
Код:
Graphics^ gfx = panel1->CreateGraphics();
try {
// чтото делаем
} finally {
gfx->Dispose();
}
try {
// чтото делаем
} finally {
gfx->Dispose();
}
Вы в конце-концов удосужитесь открыть документацию или нет?
не нервничайте, учителЪ, вы еще будете мной гордиться :)