Исследование способов создания графических объектов с использованием ObjectWindows 2.x, страница 2

│              │        

TPen       │              │ Цвета и стили линий       

│              │        

TRegion    │              │ Контуры и области фигур       

│              │        


Классы графического контекста

В программах  OWL  функциям GDI  не передается  дескриптор контекст устройства. Вместо этого  вызываются  функции, являющиеся элементами контекста.

Процесс использования класса контекста устройства  включает четыре шага:

1. Получите или создайте объект контекста устройства.

2. Создайте графический объект и выберите его в контекст устройства ( функция SelectObject ).

3. Вызовите требуемые функции для объекта контекста устройства.

4. Восстановите первоначальные графические объекты, выбранные в контекст устройства.


Таблица   

Классы контекста устройства

────────────┬───────────┬───────────────────────────────

Класс    │   Файл    │         Назначение    

│ заголовка │        

────────────┼───────────┼───────────────────────────────

TDC        │   DC.H    │ Базовый класc для других клас│           │сов контекста устройства;   ин-        

│           │капсулирует функции GDI        

│           │        

TIC        │           │ Информационный  контекст  уст│           │ройства        

│           │        

TWindowDC  │           │ Обеспечивает доступ к окну

│           │        

TScreenDC  │           │ Обеспечивает доступ  ко всему

│           │экрану

│           │        

TDesktop   │           │ Рисование в клиентной области

│           │"рабочего стола"        

│           │        

TClientDC  │           │ Рисование в клиентной области

│           │окна        

│           │        

TPaintDC   │           │ Рисование в функции Paint

│           │        

TMemoryDC  │           │ Рисование  в битовой  матрице

│           │вне экрана

│           │        

TDibDC     │           │ Обеспечивает доступ к битовым

│           │матрицам, не зависящим  от уст│           │ройства

│           │        

TMetaFileDC│C        C │ Обеспечивает доступ  к контек│           │сту метафайла

│           │        

TPrintDC   │           │ Обеспечивает доступ  к принте│           │ру

│           │        


/* ------------------------------------------------------- *

QwlMain : GDI

* ------------------------------------------------------- */

#include <owl\applicat.h>

#include <owl\framewin.h>

#include <owl\dc.h>

class TMyWin: public TFrameWindow

{

public:

TMyWin( TWindow *parent, const char far* title):

TFrameWindow( parent, title ), TWindow ( parent, title ) {};

virtual void Paint( TDC& dc, BOOL erase, TRect& rect );

virtual void GetWindowClass ( WNDCLASS& wc );

};

// --------------------------------------------------------void

TMyWin::Paint ( TDC& dc, BOOL /*erase*/, TRect& /*rect*/ )

{

TColor    colorP ( 255,0,0 );

TPen      pen1   ( colorP ,2, PS_SOLID  );

TPen        pen2   ( TColor::LtBlue, 1, PS_DASHDOT );

TColor    colorB ( 0,255,0 );

TBrush    brush  ( colorB );

dc.SelectObject ( pen1 );             // red line

dc.Rectangle ( 10,10,100, 200 );

dc.RestorePen   ();

dc.SelectObject ( pen2 );

dc.SelectObject ( brush );           // green brush

dc.Ellipse   ( 25,25, 80, 160 );

dc.RestorePen   ();

dc.RestoreBrush ();

}

// --------------------------------------------------------void TMyWin::GetWindowClass ( WNDCLASS& wc )

{

TFrameWindow::GetWindowClass ( wc );

wc.hbrBackground = ( HBRUSH ) GetStockObject ( BLACK_BRUSH );

}

// --------------------------------------------------------class TMyApp: public TApplication

{

public:

TMyApp( const char far* name ):TApplication( name ) {};

void InitMainWindow ();

};

// --------------------------------------------------------void

TMyApp::InitMainWindow ()

{

MainWindow = new TMyWin ( 0, "Painting" );

}

#pragma argsused

int

OwlMain ( int argc , char* argv[] )

{

TMyApp App ( "Paint" );

return App.Run();

}