http://tikitak.narod.ru ---- Главная страница сайта
Шаг 25 - Меняем курсор в виде
Создание проекта
Используем предыдущие проект.
Создаем код
Изменения в CMyView
class CMyView : public CView
{
protected:
............
afx_msg BOOL OnSetCursor( CWnd* pWnd,
UINT nHitTest, UINT message );
public:
............
private:
DECLARE_MESSAGE_MAP()
};
Реализация
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_WM_SETCURSOR()
END_MESSAGE_MAP()
BOOL CMyView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));
return TRUE;
}
Описание
Для того, чтобы мы имели возможность изменять курсор внутри вида, необходимо перегрузить функцию OnSetCursor, она отвечает за вид курсора. А для того, чтобы она вызавалась нам надо описать реакцию на событие ON_WM_SETCURSOR() в таблице откликов.
При перегрузке функции вызывается функция Win32 API - SetCursor. Две точки впереди говорят о том, что функцию нужно взять из Windows, а не из MFC. В эту функцию мы передаем идентификатор курсора, который получаем с помощью функции LoadStandardCursor (прочитать стандартный курсор). В параметрах ставим, что курсор крест.
AfxGetApp() использована для получения доступа к классу, в котором есть функция чтения стандартного курсора - CWinApp. Используя её можно получить доступ к этому классу из любого места программы.
Запускайте программу, в правом окне курсор будет крест.
Если Вы хотите, чтобы курсор изменлся по условию, то Вы можете написать примерно так:
BOOL CMyView::OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message )
{
if (blTestMove)
{
::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));
return TRUE;
}
return CView::OnSetCursor(pWnd,nHitTest,message);
}
Шпаргалка
Перегрузите функцию отвечающею за прорисовку курсора.
class CMyView : public CView
{
............
afx_msg BOOL OnSetCursor( CWnd* pWnd,
UINT nHitTest, UINT message );
...........
};
Оклик в таблице сообщений.
BEGIN_MESSAGE_MAP(CMyView, CView)
.......
ON_WM_SETCURSOR()
.........
END_MESSAGE_MAP()
Реализация
BOOL CMyView::OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message )
{
::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));
return TRUE;
}
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|