DevCon bits: WinCreatePointerIndirect troubles

User avatar
Eugene Gorbunoff
Site Admin
Posts: 685
Joined: Sat Apr 09, 2005 11:18
Location: St.Petersburg, Russia

DevCon bits: WinCreatePointerIndirect troubles

Postby Eugene Gorbunoff » Mon Mar 29, 2010 16:29

From: Glassman
Date: 2010/03/29

WinCreatePointerIndirect, непонятки, значки

Область

WinCreatePointerIndirect.

Проблема

Единственная функция в OS/2, позволяющая создать полноцветный указатель или значок - это WinCreatePointerIndirect. Она принимает в качестве аргумента указатель на структуру POINTERINFO:

Code: Select all

typedef struct _POINTERINFO {
 ULONG       fPointer;        /*  Bit-map size indicator. */
 LONG        xHotSpot;        /*  X-coordinate of action point. */
 LONG        yHotSpot;        /*  Y-coordinate of action point. */
 HBITMAP     hbmPointer;      /*  Bit-map handle of pointer. */
 HBITMAP     hbmColor;        /*  Bit-map handle of color bit map. */
 HBITMAP     hbmMiniPointer;  /*  Bit-map handle of a pointer to a mini bit map. */
 HBITMAP     hbmMiniColor;    /*  Bit-map handle of mini color bit map. */
} POINTERINFO;


Также имеется функция WinQueryPointerInfo, которая заполняет структуру POINTERINFO информацией о существующем указателе или значке. Кажется очевидным, что следующая последовательность команд

Code: Select all

POINTERINFO pi;
WinQueryPointerInfo( hptr, &pi );
hnewptr = WinCreatePointerIndirect( HWND_DESKTOP, &pi );


должна создать полнофункциональную копию значка. На самом деле, это не так. Функция WinCreatePointerIndirect игнорирует поля hbmMiniPointer и hbmMiniColor. Поэтому при отрисовке мини значков - возникнет неприятный сюрприз. Скопировав поля hbmMini* в hbm* можно получить копию мини значка. Но не более того.

Возможное решение

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

Return to “Developers / Разработчики”

Who is online

Users browsing this forum: No registered users and 2 guests

cron