C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Помогите разобраться, GDI+
aLiEn
Отправлено: 27.07.2005, 07:25


Не зарегистрирован







Hello, All!
Есть главный класс в котором GDI+ инициализируется. Так же там объявляю
Gdiplus::Graphics* GM; // класс GDI+
Есть другой класс где я просто создаю панель (хочу на ней рисовать). Теперь создаем проект и
инициализируем главный класс
GP = new TERedGDIP();
следом создаю панель, на которой я буду рисовать
if( GP->CreateGP( Form1 ) )
ShowMessage(" YES "); // для своей проверки
GP->Document->Area->Height = 400;
GP->Document->Area->Width = 600;
GP->SetPageUnit( UnitPixel );

В главном классе это описано так
CODE

bool __fastcall TERedGDIP::CreateGP( TForm* MainForm )
{
 GM = 0;
 Document = 0;
 try
 {
   Document = new TDocGDIP( MainForm );
   GM = new Gdiplus::Graphics( Document->hDC );
 }
 catch(...)
 {
   bGM = false;
   delete Document;
   return false;
 }
bGM = true;
return true;
}

Все создается, все видится на главной форме проги. Но вот захотел нарисовать
линию и написать, ан не вышло.
CODE

void __fastcall TERedGDIP::OutTextT(  )
{
  WCHAR welcome[]=L"Привет GDI+!";
  RECT rc;

  Gdiplus::Pen blackPen(Gdiplus::Color(255, 0, 0, 0), 3);

  int x1 = 100;
  int y1 = 100;
  int x2 = 500;
  int y2 = 200;

  GM->DrawLine(&blackPen, x1, y1, x2, y2);
  Gdiplus::RectF bounds(0, 0, 500, 500);
   LinearGradientBrush brush(bounds, Gdiplus::Color(130, 255, 0, 0),
Gdiplus::Color(255, 0, 0, 255),
           Gdiplus::LinearGradientModeBackwardDiagonal);

   Gdiplus::StringFormat format;
   format.SetAlignment(Gdiplus::StringAlignmentCenter);
   format.SetLineAlignment(Gdiplus::StringAlignmentCenter);
   Gdiplus::Font font(L"Arial", 30, Gdiplus::FontStyleBold);

   GM->DrawString(welcome, -1, &font, bounds, &format, &brush);
}

Все отрабатывается, но на панели ничего не видно. Если же в этой функции
создаю Gdiplus::Graphics g( Document->hDC ); (соответственно везде меняю
GM-> на g. ), все работает.

Почему? Куда смотреть, куда рыть?

СПАСИБО!
timson
Отправлено: 28.07.2005, 07:59


Станционный диспетчер

Группа: Участник
Сообщений: 82



смотреть в MSDN, там много примеров

Вернуться в Вопросы программирования в C++Builder