Проектирование диалоговой панели
Когда же это кончится?!
//Разместить в памяти объект метафайла
m_pMF = new
CMetaFileDC;
//Создать МетаФайл
m_pMF->Create();
void CPaintORamaDlg::OnClearbtn() //Cоздать новый метафайл
{
CClientDC
dc(this);
//Закрыть метафайл
HMETAFILE
hmf=m_pMF->Close();
//Удалить данные о
метафайле
::DeleteMetaFile(hmf);
delete hmf;
m_pMF=new
CMetaFileDC;
m_pMF->Create();
m_pMF->SetAttribDC(dc);
dc.SelectStockObject(NULL_PEN);
dc.Rectangle(m_Canvas);
//Записать команды в
метафайл
m_pMF->SelectStockObject(NULL_PEN);
m_pMF->Rectangle(m_Canvas.left,m_Canvas.top,
m_Canvas.right+1,m_Canvas.bottom+1);
}
void CPaintORamaDlg::DrawShape(bool
stretch)
{
//Получить объект контекста
устройства
CClientDC dc(this);
//Установить атрибуты
DC
dc.SetAttribDC(dc);
dc.SelectObject(&m_Brush);
m_pMF->SetAttribDC(dc);
dc.IntersectClipRect(m_Canvas);
m_pMF->IntersectClipRect(m_Canvas);
//Получить номер позиции из спика названий фигур
int
drawmode=m_ShapesCombo.GetCurSel();
//Выбрать
перо
dc.SelectObject(&m_Pen);
dc.SelectObject(&m_Brush);
//Записать операторы в
метафайл
m_pMF->SelectObject(&m_Pen);
m_pMF->SelectObject(&m_Brush);
//Метод резиновой нити
if(stretch &&
drawmode!=0)
{
//Установить метод резиновой
нити
dc.SetROP2(R2_NOT);
}
//Конструкция выбора
фигуры
switch(drawmode)
{
//Свободное рисование
case
0:
dc.MoveTo(m_LineStart);
dc.LineTo(m_LineEnd);
//Записать операторы в
метафайл
m_pMF->MoveTo(m_LineStart);
m_pMF->LineTo(m_LineEnd);
m_LineStart=m_LineEnd;
break;
//Рисование линий
case
1:
dc.MoveTo(m_LineStart);
dc.LineTo(m_LineEnd);
/*Записать операторы в метафайл, если не выбран режим
резиновой
нити*/
if(!stretch)
{
m_pMF->MoveTo(m_LineStart);
m_pMF->LineTo(m_LineEnd);
}
break;
//Рисование элипсов
case
2:
dc.Ellipse(CRect(m_LineStart,m_LineEnd));
//Записать операторы в
метафайл
if(!stretch)
{
m_pMF->Ellipse(CRect(m_LineStart,m_LineEnd));
}
break;
//Рисование прямоугольника
case
3:
dc.Rectangle(CRect(m_LineStart,m_LineEnd));
//Записать операторы в
метафайл
if(!stretch)
{
m_pMF->Rectangle(CRect(m_LineStart,m_LineEnd));
}
break;
}
}
void CPaintORamaDlg::OnPaint()
{
CPaintDC dc(this);
//Закрытие метафайла
HMETAFILE
hmf=m_pMF->Close();
//Воспроизведение
метафайла
dc.PlayMetaFile(hmf);
//Присваивание указателя на старый объект переменной
temp
CMetaFileDC* temp=new CMetaFileDC;
//Закрытие
объекта
temp->Create();
//Проигрование
метафайла
temp->PlayMetaFile(hmf);
//Удаление
метаструктуры и метафайла
DeleteMetaFile(hmf);
delete
hmf;
//Присваивание временного указателя
постоянному
m_pMF=temp;
/*Если первый раз была вызвана
функия OnPaint, то вызавать очистку экрана*/
static
firstTime=TRUE;
if(firstTime)
{
OnClearbtn();
firstTime=FALSE;
}
}
void CPaintORamaDlg::OnDestroy()
{
CDialog::OnDestroy();
////-Ваш код начинается
здесь-////
//Закрыть и удалить метафайл
m_pMF->Close();
delete
m_pMF;
////-Ваш код начинается здесь-////
}
Радио для всех © |