Шаг 62 - Смена курсора по нажатию кнопки

Мы можем применить прошлый код немного его модернизировав. Во-первых, заведем переменную, которая будет отвечать за идентификатор курсора.

class CTestDDVDlg : public CDialog
{
// Construction
public:
	CTestDDVDlg(CWnd* pParent = NULL);	// standard constructor
	int ID_C;
....
};

И инициализируем ее идентификатором курсора из ресурсов.

CTestDDVDlg::CTestDDVDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTestDDVDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTestDDVDlg)
	m_Ed1 = 20.0f;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a
	// subsequent DestroyIcon in Win32
	ID_C=IDC_POINTER;
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

В самой функции изменим код, чтобы идентификатор получался из переменной.

BOOL CTestDDVDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
	// TODO: Add your message handler code here and/or call default
	SetCursor(AfxGetApp()->LoadCursor(ID_C));
	return TRUE;
}

Отлично. Все получается совсем просто. Заводим второй курсор.

62_1.gif (2590 b)

Теперь нам нужно просто поменять идентификатор и послать самому себе сообщение WM_SETCURSOR. Все это делаем по нажатию на кнопку.

void CTestDDVDlg::OnButton1() 
{
	ID_C=IDC_CURSOR1;
	SendMessage(WM_SETCURSOR);
}

Запускаем приложение – курсор один.

62_2.gif (2756 b)

Нажимаем на кнопку, курсор другой.

62_3.gif (2795 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 03.07.2002