Для организации виртуального окна необходимо:
1. В классе окна объявить объект контекста устройства виртуально окна; объект растрового изображения, соответственно виртуальном окну; объект кисти заполнения виртуального окна.
Это может выглядеть так:
class CMainWin :: CFrameWnd
[Public:
CDC memDC; // Контекст устройства виртуального окна;
CBitmap vbmp; // Растровое изображение виртуального окна;
CBrush mbrush; // Кисть для заполнения виртуального окна;
..................... ..
];
2. В конструкторе главного окна программы осуществить следующие изменения:
- Получить размеры физического окна программы;
- Реализовать совместимость контекста виртуального окна с физическим уик-ном;
- Создать растровое изображение, совместимое с основным окном программы и выбрать его в контекст виртуального окна;
- Создать фон виртуального окна (обычно - белого цвета), сделать его текущим и выбрать в контекст виртуального окна, заполнить выбранным фоном виртуальное окно.
CMainWin::CMainWin()
[Create(NULL,"Image example",WS_OVERLAPPEDWINDOW,rectDefault, NULL, MAKEINTRESOURCE(IDR_MENU1));
bmp1.LoadBitmap(IDB_BITMAP1); // завантаження зображення 1
bmp2.LoadBitmap(IDB_BITMAP2); // завантаження зображення 2
m_X=m_Y=0; // поточні координати виведення
maxX=GetSystemMetrics(SM_CXSCREEN); // отримання X – розміру
maxY=GetSystemMetrics(SM_CYSCREEN); // отримання Y – розміру
CClientDC dc(this); // отримання контексту головного вікна
memDC.CreateCompatibleDC(&dc);
vbmp.CreateCompatibleBitmap(&dc,maxX,maxY);
memDC.SelectObject(&vbmp);
mBrush.CreateStockObject(WHITE_BRUSH);
memDC.SelectObject(&mBrush);
memDC.PatBlt(0,0,maxX,maxY,PATCOPY);
]
3. В обработчике сообщения WM_PAINT осуществить копирование содержимого виртуального окна физическое окно программы.
void CMainWin::OnPaint()
[CPaintDC dc(this);
dc.BitBlt(0,0,maxX,maxY,&memDC,0,0,SRCCOPY);
]