![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Определение малой иконки
Работая с Windows, Вы, вероятно, заметили, что размер иконки приложения, появляющейся на экране, может изменяться. Например, при перемещении или копировании объекта в пределах «рабочего стола» отображается большая иконка, а при минимизации окна приложения – малая (малая иконка отображается также в качестве кнопки системного меню). Как правило, большие иконки имеют размер 32´ 32, а малые – 16x16 пиксел. До сих пор Вы определяли только одну иконку (большую), которая ассоциировалась с приложением. По умолчанию Windows использует большую иконку и как большую, и как малую (большая иконка просто «сжимается» до размеров малой). В этом разделе описано, как определить малую иконку. Для определения малой иконки Вы должны зарегистрировать свой класс окна при помощи вызова функции RegisterClassEx():
ATOM RegisterClassEx(CONST LPWNDCLASSEX lpWndClsEx);
Параметр 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-приложение смотрелось эффектнее, целесообразно определить обе иконки).
|