Режим на съответствие (mapping mode) в GDI
| Информационни технологии | 2009-12-04 | 44 сваляния |
43. Режим на съответствие (mapping mode) в GDI. Преобразувания в координатните системи при рисуване.
Mapping Mode
Избраната mapping mode се помни в текущия DC и може да се прочете GetMapMode() SetMapMode() ).
Има следните MM:
= ММ позоляващ мащабитане анизотропна, както и различна ориентация на осите.
= ММ, както горната , но с еднакъв мащаб по двете оси (изотропна).
= ММ лог. единица във физическа 0.001 инч или 0.01 инч. Осите са : надясно и нагоре
= ММ, както горната но с 0.01 мм или 0.1 мм.
= ММ, лог. единица е = 1 пиксел (текстова). Осите са надясно и надолу.
= ММ лог. единица се преобразува в 1/20 от точката (1/1440 от инч). Осите са надясно и нагоре.
Има възможност за манипулация на обект чрез координатната мрежа. Може да се упр. транслация, ротация, мащабиране,промяна на ориентацията на осите за определен Device context. Има функции за автоматично увеличение, ротация, транслиране, инверсно изображение, сплескване.
Превръщане на координати
Това става с CDC::LPtoDP() или CDC::DPtoLP();
за да получим в цифров вид централната точка на екрана:
CRect rect; GetClientRect(&rect);
CPoint point( rect.width() / 2, rect.Height() / 2);
Но ако искате същата инф. в MM_LOENGLISH единици:
CRect rect; GetClientRect(&rect); CPoint point( rect.width()/ 2, rect.Height()/ 2);
CClientDC(this); dc.SetMapMode(MM_LOENGLISH); dc.DPtoLP(&point);
Местене началото на коорд.с-ма
CDC::SetWindowOrg() // за прозореца
CDC::SetViewportOrg() // за видимата област
клиентски координати
екранни координати
преобразуваме: CWnd::ClientToScreen(); CWnd::ScreenToClient();
Клиентските координати се задават с началните координати (горния ляв ъгъл на клиентската част).
Екранни координати- координати спрямо горния ляв ъгъл на екрана.
Друг атрибут е областта на извеждане Clipping Region може да се окаже област в клиентската област, в която след избора се извежда информацията.
Базови типове DC:
-Display DC
-Printer DC свързва се с принтер или плотер
-Memory DC свързва се с работа и bitmap
-Информационен DC
MFC класова йерархия за поддръжка на DC в NT
-CDC базов калс
-CPaintDC използва се за прерисуване с Wnd_ms_Paint
-CClientDC използва се за прерисуване извън Wnd_ms_Paint
-CMetaFileDC има възможност за направата на метаблокове
-CWindowDC когато ще рисуваме в дадена област, на прозореца а не само в клиентската
Последователността с MetaFile обикновено протича така:
-
създава се променлива от тип СMetaFile
-
рисуваме като командите се съхраняват в MetaFile
-
след като приключим заключваме MetaFile-а
След това в друг DC с метод, в който се указва MetaFile, може той да се изпълни
За да изработите DC в приложението можете:
CDC* pDC = GetDC(); //всъщност CWnd::GetDC()
/* използване на DC за рисуване */ ReleaseDC(pDC);
същото може и с : PAINTSTRUCT ps;
CDC* pDC = BeginPaint(&ps); ..
извън кл. област трябва друг DC: CWnd::GetWindowDC();
За да получим инф. за възможностите на у-вото преди рисуване:
CDC::GetDeviceCaps(); // напр. допустими цветове, пиксели
пр: CClientDC dc(this);
int cx = dc.GetDeviceCaps(HORZRES);
int cy = dc.GetDeviceCaps(VERTRES); // получаваме напр. 1024 , 768
Тагове от реферата: коорнатни, съотвтств, суване, съответвие, mapping











