Изменение курсора.
  • CasperCasper August 2010
    Всем доброго времени суток. Хочу изменить вид курсора с помощью windows.h. Вообщем когда курсор над зданием - он в виде HAND, но стоит немного изменить координаты в пределах спрайта - курсор начинает моргать, а если убрать курсор со спрайта (где он получал значения HAND), то курсор тутже меняется на деволтную стрелку.
    Такое чувство, что HGE сам постоянно обновляет курсор.
    Подскажите пожалуйста как грамотно можно изменить вид курсора.
  • zombiezombie August 2010
    Ну как бы отрисовкой курсора занимается сама ОСь.
    Я бы нарисовал (ну или взял где-нить :)) нужные картинки курсоров, скрыл стандартный курсор, а потом просто получал координаты курсора и рисовал там нужную картинку. Так будет лучше, чем использовать стандартные курсоры (курсор руки ужасен :))
  • kvakvskvakvs August 2010
    Суть такова:

    Текущий видимый курсор устанавливается командой SetCursor (HCURSOR)
    При движении мыши винда посылает программе сообщение WM_CURSOR кажется такое, и там спрашивает чо какой новый курсор. Можно на это сообщение не отвечать, винда тогда сама выставляет курсор, заданный в классе окна (GetClassLong, SetClassLong).
    Поскольку у тебя там всё ещё стрелка, при движении мыши, курсор моментально меняется обратно на стрелку.

    Таким образом, пара команд SetCursor и SetClassLong должны вместе дать нужный надёжный результат.
  • CasperCasper August 2010
    Не скинешь примёр использования этих двух функций, а то гугл всё без примеров показывает ?
  • CasperCasper August 2010
    В частности не понятен первый аргумент в функции:
    SetClassLong(this->m_hWnd,GCL_HCURSOR,(long)cr);

    В одной статье нашёл:
    "m_hWnd - [in] Дескриптор окна и, косвенно, класс которому окно принадлежит."

    Только непонятно что это значит.... (
  • zombiezombie August 2010
    1
    HWND hwnd=hge->System_GetState(HGE_HWND);


    Вернет хэндл окна, вызывать нужно между System_Initiate и System_Shutdown.

    В винде у каждого окна есть свой хэндл по которому можно к этому окну обратиться.
  • ProPro September 2010
    Он и будет моргать, т.к. в сообщении WM_SETCURSOR движок его восстанавливает. Я просто изменил исходники hge. И легко из проги меняю курсор передавая в добавленное свойство хэндл нужного курсора.

    case WM_SETCURSOR:
    if(pHGE->bHideMouse){//для старых приложенйи отсавляем старый код.
    if(pHGE->bActive && LOWORD(lparam)==HTCLIENT && pHGE->bHideMouse) SetCursor(NULL);
    else SetCursor(LoadCursor(NULL, IDC_ARROW));
    return FALSE;
    }else{
    if(pHGE->bActive && (LOWORD(lparam)==HTCLIENT)){
    //курсор на клиентской области и окно активно.
    SetCursor(pHGE->hcMySysCursorHandle);
    return TRUE; //было FALSE, но в попкап двиге труе стоит. Доверимся что именно так.
    }else{
    break;//курсор вне клиентского окна, или окно неактивно, то пусть винда сама решает чо рисовать.
    }
    }

    Если тоже так сделаете, то не забудьте еще в hge исходниках добавить свойство, и инициализирвоать его в HGE_Impl::HGE_Impl() стандартным курсором.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Sign In Apply for Membership

In this Discussion

Who's Online (0)