Операционная система Windows 95 для программиста



    d8ef8794     

Рисование графического изображения в области Statusbar


Если в сообщении SB_SETTEXT указать константу SBT_OWNERDRAW , родительское окно, создавшее Statusbar, может нарисовать в соответствующей области любое изображение или написать текст любым шрифтом, используя всю мощь графического интерфейса GDI.

Ниже мы привели фрагмент кода, который загружает из ресурсов приложения битовое изображение и передает его идентификатор через параметр lParam сообщения SB_SETTEXT . При этом номер области, в которой будет нарисовано это изображения, комбинируется с константой SBT_OWNERDRAW :

hSbLogoBmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_SBLOGO)); SendMessage(hwndSb, SB_SETTEXT, 2 | SBT_OWNERDRAW, (LPARAM)hSbLogoBmp);

Когда область Statusbar должны быть перерисована, родительское окно получает сообщение WM_DRAWITEM . Параметр wParam этого сообщения содержит идентификатор органа управления, которое послало сообщение, или ноль, если сообщение пришло от меню. В нашем случае через wParam будет передаваться идентификатор органа управления Statusbar.

Параметр lParam содержит указатель на структуру типа DRAWITEMSTRUCT (описание полей приведено для Statusbar):

typedef struct tagDRAWITEMSTRUCT { UINT CtlType; // не используется UINT CtlID; // идентификатор окна Statusbar UINT itemID; // номер области, которая будет перерисована UINT itemAction; // не используется UINT itemState; // не используется HWND hwndItem; // идентификатор окна Statusbar HDC hDC; // идентификатор контекста отобаржения RECT rcItem; // координаты области DWORD itemData; // значение lParam сообщения SB_SETTEXT } DRAWITEMSTRUCT;

Обработчик сообщения WM_DRAWITEM должен проверить содержимое поля CtlID - в этом поле должен находится идентификатор Statusbar. Далее обработчик может выполнить рисование, пользуясь контекстом отображения hDC в области, координаты которой передаются через поле rcItem.

При этом обработчик сообщения WM_DRAWITEM может воспользоваться содержимым поля itemData, которое равно значению параметра lParam сообщения SB_SETTEXT. Через этот параметр можно передать, например, идентификатор изображения, которое должно быть нарисовано в области Statusbar, идентификатор шрифта, которым должен быть написан текст в этой области или любая другая информация.




Содержание  Назад  Вперед