Рисование линий в MFC VS2010 и VC ++ 6.0 не дает того же результата - PullRequest
3 голосов
/ 08 февраля 2012

В настоящее время я изучаю MFC. Я хочу рисовать линии с помощью функций MoveTo () и LineTo () как в VC ++ 6.0, так и в VS2010, но кажется, что это не работает в vs2010. Я добавляю только два окнаобработчик сообщений WM_LBUTTONDOWN и WM_LBUTTONUP в проекте с одним документом.Вот код в VC ++ 6.0:

CPoint m_ptOrign;
void CStyleView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    m_ptOrign=point;
    CView::OnLButtonDown(nFlags, point);
}

void CStyleView::OnLButtonUp(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    CClientDC dc(this);
    dc.MoveTo(m_ptOrign);
    dc.LineTo(point);
    CView::OnLButtonUp(nFlags, point);
}

Вот код в vs2010:

CPoint m_ptOrign;
void CStyleView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    m_ptOrign=point;
    CView::OnLButtonDown(nFlags, point);
}
void CStyleView::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    CClientDC dc(this);

    dc.MoveTo(m_ptOrign);
    dc.LineTo(point);

    CView::OnLButtonUp(nFlags, point);
}

Коды, которые я добавляю в два проекта, совпадают. Когда я выпускаюлевая кнопка, строка появляется сразу в проекте vc ++ 6.0, но не появляется в проекте vf 2010 mfc.Если размер или расположение окна проекта vs 2010 изменяется, строка появляется.Но когда я использую dc.Rectangle(CRect(m_ptOrign,point)) в проекте vs 2010, он работает хорошо.Я не знаю, почему .....

Более того, если я использую

CBrush *pBbrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(pBbrush);
dc.Rectangle(CRect(m_ptOrign,point))

в vs2010, он снова не будет работать, как в случае рисования линий

1 Ответ

2 голосов
/ 08 февраля 2012

LineTo будет использовать ручку, которая в данный момент выбрана в DC. Поскольку вы не выбрали ручку, она будет использовать то, что по умолчанию Я не знаю, почему это будет по-разному между VC6 и VC2010, возможно, это как-то связано с различиями в MFC между двумя версиями.

В общем, плохая идея - захватить DC и начать рисовать на нем. Лучше всего рисовать в методах OnPaint или OnDraw. Вы можете вызвать InvalidateRect, чтобы заставить окно рисования отправлять сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...