Приклади використання віртуального вікна
Віртуальне вікно, створене у відповідності із прикладами , може бути використовано для організації виведення інформації як текстового так і графічного вмісту. При цьому, щоразу отримувати контекст поточного вікна вже не буде необхідності і все виведення проводитиметься у контекст віртуального вікна (контекст області пам’яті).
Таким чином із використанням віртуального вікна, у випадку виведення тексту у вікно, обробник 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);]