ОБРАТНАЯ СВЯЗЬ

По поводу вопроса смены курсора в MFC-приложении (выпуск No.3) пришло несколько дополнений и замечаний (некоторые несущественные моменты я опустил, вместо них поставил знак "[…]", свои комментарии в теле письма я также привожу в квадратных скобках):

Подобно третьему случаю, но не только в PreCreateWindow.

В тот момент, когда хотим поменять курсор (для всего приложения) проделываем следующие действия:

::SetClassLong(theApp.m_pMainWnd->m_hWnd, GCL_HCURSOR, ::LoadCursor(theApp.m_hInstance, MAKEINTRESOURCE(IDC_MY_CURSOR)));

Немного длинная строчка кода :)) […]

Как обычно встречается такая проблема: theApp, хоть и объявлена глобально (объявляется если проект создается стандартным Wizard-ом), не видна в других файлах проекта. Чтобы обойти это просто в файле объявления класса вашего приложения (производного от CWinApp) сразу после объявления класса добавьте следующую строчку:

extern CMyApp theApp;

где CMyApp – имя класса вашего приложения.

Andrew Gromyko

Замечу, что theApp так объявлять необязательно, так как многие, и я в том числе, пользуются вместо этого стандартными функциями MFC AfxGetApp и AfxGetMainWnd, которые возвращают указатель на объект-приложение и главное окно соответственно. 

Вот еще одно письмо на эту тему:

Проблема смены курсора меня настигла еще на раннем этапе моего программистского становления. Поэтому хочу предложить тот вариант, который является по-моему наиболее адекватно подходящим с точки зрения скорости и идеологии Win32 API. Способ три конечно хорош и его можно расширить на все время существования окна. Вот как происходит вызов в классе окна:

::SetClassLong(m_hWnd,GCL_HCURSOR, (long)AfxGetApp->LoadCursor(IDC_MY_CURSOR));

При этом курсор меняется перманентно, т.е. например при вызове SetCursor вид курсора меняется при начале движения мыши. А так меняется просто класс окна. Работает быстро и надежно. […]

Alex (seaside@i.com.ua)

Спасибо Андрею и Алексу за это дополнение, теперь мы с вами знаем четыре способа изменить курсор;).  Должен признаться, в предыдущем выпуске я допустил оплошность , ляпнув что первый параметр у AfxRegisterWndClass можно заменить на cs.style, причем, как назло, понял свою ошибку как раз в тот момент, когда отправлял рассылку "в эфир". Мне не преминули на эту ошибку указать, и я очень рад этому. Пожалуйста, будьте бдительны!!! Я тоже человек! Подробности читайте ниже…

Перейти на страницу:

Похожие книги