Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Определение малой иконки






 

Работая с Windows, Вы, вероятно, заметили, что размер иконки приложения, появляющейся на экране, может изменяться. Например, при перемещении или копировании объекта в пределах «рабочего стола» отображается большая иконка, а при минимизации окна приложения – малая (малая иконка отображается также в качестве кнопки системного меню). Как правило, большие иконки имеют размер 32´ 32, а малые – 16x16 пиксел.

До сих пор Вы определяли только одну иконку (большую), которая ассоцииро­валась с приложением. По умолчанию Windows использует большую иконку и как большую, и как малую (большая иконка просто «сжимается» до размеров малой). В этом разделе описано, как определить малую иконку.

Для определения малой иконки Вы должны зарегистрировать свой класс окна при помощи вызова функции RegisterClassEx():

 

ATOM RegisterClassEx(CONST LPWNDCLASSEX lpWndClsEx);

 

 


Рис. 6.3. Пример использования большой и малой иконок

 

Параметр lpWndClsEx должен быть указателем на структуру типа WNDCLASSEX. Структура WNDCLASSEX – это практически то же, что и WNDCLASS, за исключением двух дополнительных полей. Одно из них представляет собой целое без знака и называется cbSize. Его значение должно равняться размеру структуры WNDCLASSEX. Другое поле называется hIconSm и должно хранить дескриптор малой иконки. Для загрузки малой иконки используется стандартная функция LoadIcon().

Чтобы продемонстрировать, что получится, если определить и большую, и малую иконки, в предыдущую программу внесены изменения для применения WNDCLASSEX и RegisterClassEx(). В данном случае в качестве малой иконки используется стандартная иконка IDI_APPLICATION. Пример окна этой программы показан на рис. 6.3.

//Демонстрация большой и малой пользовательских иконок

#include < Windows.h>

LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM,

LPARAM);

char szWinName[]=" МоеОкно"; // Имя класса окна

 

int WINAPI WinMain(HINSTANCE hThisInst,

HINSTANCE hPrevInst,

LPSTR lpszArgs,

int nWinMode)

{

HWND hwnd;

MSG msg;

WNDCLASSEX wcl; // WNDCLASSEX для малой иконки

wcl.hInstance=hThisInst; // Дескриптор приложения

wcl.lpszClassName=szWinName; // Имя класса окна

wcl.lpfnWndProc=WindowFunc; // Функция окна

wcl.style=0; // Стиль по умолчанию

wcl.cbSize=sizeof(WNDCLASSEX); // Размер WNDCLASSEX

wcl.hIcon=LoadIcon(hThisInst, " MYICON"); // Иконка

wcl.hIconSm=LoadIcon(NULL, IDI_APPLICATION); //Малая

wcl.hCursor=LoadCursor(hThisInst, " MYCURSOR"); //Курс.

wcl.lpszMenuName=NULL; // Без меню

wcl.cbClsExtra=0; // Без дополнительной информации

wcl.cbWndExtra=0;

wcl.hbrBackground=

(HBRUSH)GetStockObject(WHITE_BRUSH); //Белый фон

if(! RegisterClassEx(& wcl)) //Регистрируем класс окна

return 0;

hwnd=CreateWindow(szWinName, // Создать окно

" Каркас программы для Windows",

WS_OVERLAPPEDWINDOW, // Стиль окна

CW_USEDEFAULT, // x-координата

CW_USEDEFAULT, // y-координата

CW_USEDEFAULT, // Ширина

CW_USEDEFAULT, // Высота

HWND_DESKTOP, // Нет родител. окна

NULL, // Нет меню

hThisInst, // Дескриптор приложения

NULL); // Нет дополнит. аргументов

ShowWindow (hwnd, nWinMode); // Показать окно

UpdateWindow (hwnd); // и перерисовать

 

while(GetMessage(& msg, NULL, 0, 0)) // Запустить цикл

{ // обработки сообщений

TranslateMessage(& msg); // Разреш. исп. клавиатуры

DispatchMessage (& msg); // Вернуть управл. Windows

}

return msg.wParam;

}

 

// Следующая функция вызывается операционной

// системой Windows и получает в качестве

// параметров сообщения из очереди сообщений

// данного приложения

LRESULT CALLBACK WindowFunc(HWND hwnd,

UINT message,

WPARAM wParam,

LPARAM lParam)

{

switch(message)

{

case WM_DESTROY: // Завершение программы

PostQuitMessage (0);

break;

default:

// Все сообщения, не обрабатываемые в

// данной функции, направляются на обработку

// по умолчанию

return DefWindowProc(hwnd, message,

wParam, lParam);

}

return 0;

}

 

Поскольку в программах, приведенных в книге, не требуется отдельного определения больших и малых иконок, в большинстве последующих примеров это не предусмотрено. Помните: если малая иконка не определена, Windows автоматически использует иконку, связанную с дескриптором hIcon, и как большую иконку, и как малую. Однако в своих программах Вы можете использовать большую и малую иконки (чтобы Win-прило­жение смотрелось эффектнее, целесообразно определить обе иконки).

 







© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.