пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Послідовність роботи з віртуальним вікном. Приклади роботи з віртуальним вікном.

Приклади використання віртуального вікна

Віртуальне вікно, створене у відповідності із прикладами , може бути використовано для організації виведення інформації як текстового так і графічного вмісту. При цьому, щоразу отримувати контекст поточного вікна вже не буде необхідності і все виведення проводитиметься у контекст віртуального вікна (контекст області пам’яті).

 Таким чином із використанням віртуального вікна, у випадку виведення тексту у вікно, обробник OnText() можна переписати у такий спосіб:

void CMainWin::OnText()

[char t[255];

 TEXTMETRIC tm; CSize size;

 memDC.SetTextColor(RGB(255,0,0)); 

 memDC.SetBkColor(RGB(0,255,0));

 memDC.GetTextMetrics(&tm);

 wsprintf(t,"Шрифт має висоту %ld логічних одиниць",tm.tmHeight);

 memDC.TextOut(m_X,m_Y,t,strlen(t));

 m_Y=m_Y+tm.tmHeight+tm.tmExternalLeading;

 memDC.SelectObject(&m_AnsiVarFont);

 strcpy(t," Рядок перейшов на наступну позицію шрифтом ANSI_VAR_FONT");

 memDC.TextOut(m_X,m_Y,t,strlen(t));

 m_Y=m_Y+tm.tmHeight+tm.tmExternalLeading;

 wsprintf(t,"Шрифт має насиченість %ld одиниць",tm.tmWeight);

 memDC.TextOut(m_X,m_Y,t,strlen(t));

 size= memDC.GetTextExtent(t,strlen(t));

 wsprintf(t,"Попередній рядок має довжину %ld логічних одиниць",size.cx);

 m_Y=m_Y+tm.tmHeight+tm.tmExternalLeading;

 memDC.TextOut(m_X,m_Y,t,strlen(t));

 m_Y=m_Y+tm.tmHeight+tm.tmExternalLeading;

 wsprintf(t," Розміри екрану: %d %d шрифтом ANSI_FIX_FONT",maxX,maxY);

 memDC.SelectObject(&m_AnsiFixFont);

 memDC.TextOut(m_X,m_Y,t,strlen(t));

 InvalidateRect(NULL);]

Аналогічним чином можна переписати обробник натискання правої клавіші миші OnRButtonDown().

 Приклад обробника OnRButtonDown() із віртуальним вікном

void CMainWin::OnRButtonDown(UINT Flags, CPoint Loc)

[CClientDC dc(this);

 CDC mdc;

 mdc.CreateCompatibleDC(&dc);

 BITMAP map;

 bmp2.GetBitmap(&map);

 mdc.SelectObject(&bmp2);

 memDC.BitBlt(Loc.x,Loc.y,map.bmWidth,map.bmHeight,&mdc,0,0,SRCCOPY);

 CRect a(Loc.x,Loc.y,Loc.x+map.bmWidth,Loc.y+map.bmHeight);

 InvalidateRect(a);]


21.06.2015; 22:45
хиты: 71
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь