}
10)Запрограммировать рисование фигур.
Рисование фигур происходит при отпускании левой кнопки мыши.
Добавить обработчик ОnLButtonUp(). Это делается как и в предыдущем случае.
void Cgraf_painterView::OnLButtonUp(UINT n Flags,CPoint point)
{
Cgraf_painterDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
DrawTo.x=point.x; //Задали конечную
DrawTo.y=point.y; //точку.
CClientDC*pDC=new CClientDC(this); //создается контекст устройства для //вида в произвольный момент. Это можно делать не только в методе. //OnDraw( ). Класс CClientDC является производным от класса CDC. //Достаточно ему передать указатель this на текущий объект, чтобы создать //контекст устройства. В нем мы можем рисовать точно так же, как в
//методе OnDraw( ).
if ( bLineFlag)
{
pDC→Move TO(Anchor.x, Anchor.y); // Курсор в начальной точке.
pDC→LineTo(DrawTo.x, DrawTo.y);
}
if( bRectanglFlag)
{
pDC→MoveTo (Anchor.x, Anchor.y) ;
pDC→Rectangle ( Archor.x, Archor.y, DrawTo.x, DrawTo.y ) ;
}
if ( bEllipseFlag)
{
pDC→MoveTo (Anchor.x, Anchor.y) ;
pDC→Ellipse ( Archor.x, Archor.y, DrawTo.x, DrawTo.y ) ;
}
// Закраска фигур. Используется FloodFill( ) и черная кисть
if ( bFillFlag)
{
pDC→SelectStockObject( BLACK_BRUSH); //чёрная кисть
pDC→FloodFill (Anchor.x, Anchor.y, RGB(0,0,0));
}
delete pDC; //удаляем указатель на текущий вид
CView::OnLButtonUp(nFlags, point);// обработчик //базового класса
}
11) Запрограммировать рисование фигуры произвольной формы.
При нажатии левой кнопки мыши запомнить начальную точку. Когда мышь перемещается в новую точку будет рисоваться линия от начальной точки в текущую. Затем текущая точка делается начальной для следующего перемещения мыши. Таким образом, обработчик перемещения мыши вначале имеет вид
void Cgraf_painterView::OnMouseMove(UINT nFlags,
CPoint point)
{
CClientDC*pDC=new CClientDC(this);
if(nFlags && MK_LBUTTON && bDrawFlag)
{
pDC->MoveTo(Anchor.x,Anchor.y);
pDC->LineTo(point.x,point.y);
Anchor.x=point.x;
Anchor.y=point.y;
}
delete pDC;
// TODO: Add your message handler code here and/or call default
CView::OnMouseMove(nFlags, point);
}
Следует обратить внимание, что рисование возможно при одновременном выполнении условий, указанных в if().
12) Измененить указатель мыши.
Для удобства рисования фигур произвольной формы создадим новый указатель в виде крестика. Для этого изменим содержимое информационной структуры (CREATESTRUCT &cs)окна в методе PreCreateWindow(CREATESTRUCT& cs), присутствующем в классе вида.Зададим в ней новый указатель в виде крестика, IDC_CROSS.
.
BOOL Cgraf_painterView PreCreateWindow(CREATESTRUCT & cs)
{
cs.lpszClass=AfxRegisterWndClass(CS_DBLCLKS,AfxGetApp( )→LoadStandardCursor ( IDC_CROSS),(HBRUSH)(COLOR_WINDOW+1),AfxGetApp( ) →LoadIcon(IDC_MAINFRAME));
return CView::PreCreateWindow(cs);
}
Новый указатель в виде крестика (IDC_CROSS).эта функция уже есть, но “пустая”.
13) Обеспечить растягивание графических фигур.
Код для имитации растягивания фигур включен в OnMouseMove().
Начнем с растягивания линий. Чтобы провести линию от начальной точки до текущей, следует сначала стереть старое изображение линии от начальной точки к предыдущей и нарисовать новую- от начальной до текущей точки. Но прежде, чем стирать, нужно запомнить положение стираемой линии. Для этого добавим в программу объект класса CPoint с именем OldPoint. В нем будет сохраняться положение указателя мыши при вызовах OnMouseMove(). При нажатии кнопки мыши необходимо занести в OldPoint текущие координаты. Теперь обработчик нажатия мыши имеет вид:
void Cgraf_painterView::OnLButtonDown(UINT nFlags, CPoint point)
{
Anchor.x=point.x;
Anchor.y=point.y;
OldPoint.x=Anchor.x;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.