Мы можем применить прошлый код немного его модернизировав. Во-первых, заведем переменную, которая будет отвечать за идентификатор курсора.
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; }
Отлично. Все получается совсем просто. Заводим второй курсор.
Теперь нам нужно просто поменять идентификатор и послать самому себе сообщение WM_SETCURSOR. Все это делаем по нажатию на кнопку.
void CTestDDVDlg::OnButton1() { ID_C=IDC_CURSOR1; SendMessage(WM_SETCURSOR); }
Запускаем приложение – курсор один.
Нажимаем на кнопку, курсор другой.