Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > SetClassLong


Автор: ZufuS 17.8.2007, 05:48
Код

HWND hW = FindWindow(L"CabinetWClass", NULL);
SetClassLong(hW, GCL_HCURSOR, (LONG)LoadCursor(NULL, IDC_CROSS));

Думал, что после такого кода курсор окон класса "CabinetWCLass" станет IDC_CROSS. Но этого не произошло. Как написать правильно?

Автор: Earnest 17.8.2007, 08:01
SetClassLong меняет параметры только конкретного окна, hw, а также, вроде, окон, которые будут с этим классом созданы впоследствии. И никак не влияет на окна, уже сущестсвующие (кроме hW).

Автор: ZufuS 17.8.2007, 08:29
курсор не меняется ни для hW, ни для созданных впоследствии.

Автор: Earnest 17.8.2007, 09:36
Ну тогда зарегистрируй класс сразу с нужным курсором

Автор: ZufuS 17.8.2007, 13:34
Он уже зарегестрирован. Это класс окон проводника.

Автор: zkv 17.8.2007, 13:41
ZufuS, в качестве предположения, проводник и сам внутри может пользоваться этой функцией, естественно тогда твои старания напрасны.
Плюс на проводнике еще, наверное, немало окон понатыкано, и все они устанавливают курсор какой хотят, когда мышь над ними пробегает.

Автор: ЫукпШ 26.8.2007, 15:56
Цитата(ZufuS @ 17.8.2007,  05:48)
 Как написать правильно?


 Полагаю, все написано правильно. У меня это сработало.
1. Посмотри, какой GetLastError
2. Это не сработает, если окошко меняет курсор посредством:
Код

    case WM_SETCURSOR : 
                              ::SetCursor (hSomeCur);
//....
//...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)