www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
  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
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz