Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Назначение и использование (конспект)




Использование списка диалога для разработки коммандера

SendMessage(hwndlist, LB_DIR, 0x37, “.”)

Выполняется отбор всех элементов оглавления по заданному пути с заданными атрибутами. Имена файлов и каталогов в виде строк заполняет список, появляются строки с именами.

DDL_READWRITE 0x0000-без астриббута
DDL_READONLY 0х0001для чтения
DDL_DIRECTORY 0х0010 дирректория
DDL_DRIVE 0х4000 чтение дисков
DDL_EXCLUSIVE 0х8000 по умолчанию

В widows перешло правило из DOS, если задать атрибут только DDL_READ_WRITE, то будут отбираться файлы только для чтения и архивные. Если задать атрибут директории, то будут отбираться обычные, только для чтения, и архивные. Атрибут EXLUSIVE- это правило отменяет.

 

 

55. Сообщения окна списка(listbox) и сообщения, посылаемые окну списка.

Список — это набор текстовых строк, который выводится на экран в виде прокручиваемого в прямоугольнике столбца текста. Программа может добавлять или удалять строки в списке путем посылки сообщений оконной процедуре списка. Окно списка посылает сообщения WM_COMMAND своему родительскому окну, когда в списке выбирается какой-либо пункт. Родительское окно может определить, какой пункт списка был выбран. Окно списка почти всегда включает идентификатор стиля окна LBS_NOTIFY, что позволяет родительскому окну получать от окна списка сообщения WM_COMMAND. Используем функцию SendMessage для отправки сообщения окну списка. Когда пользователь щелкает мышью над окном списка, окно списка получает фокус ввода. Родительское окно может предоставить управляющему (listbox control) окну списка фокус ввода с помощью вызова функции:

SetFocus(hwndList);

Если окно списка имеет фокус ввода, то для выбора пунктов списка также могут использоваться клавиши управления курсором, буквенные клавиши и клавиша <Spacebar>. Управляющее окно списка посылает сообщения WM_COMMAND своему родительскому окну. Значение параметров сообщения lParam и wParam то же, что и для кнопок управления и управляющих окон редактирования:

LOWORD (wParam) Идентификатор дочернего окна

HIWORD (wParam) Код уведомления

lParam Описатель дочернего окна

55а. Сообщения LB_DIR,атрибуты для выбора файлов, каталогов и логических дисков.

Самым мощным сообщением окон списка является сообщение LB_DIR. Следующий оператор заполняет список перечнем файлов каталога, иногда с подкаталогами и именами доступных дисков:

SendMessage(hwndList, LB_DIR, iAttr,(LPARAM) szFileSpec);

Использование атрибутов файлов

Параметр iAttr — это код атрибута файла. Младший значащий байт — обычный атрибут файла, используемый при вызовах функций MS-DOS:

Параметр iAttr Значение Атрибут

DDL_READWRITE 0x0000 Обычный файл

DDL_READONLY 0x0001 Файл только для чтения

DDL_HIDDEN 0x0002 Скрытый файл

DDL_SYSTEM 0x0004 Системный файл

DDL_DIRECTORY 0x0010 Подкаталог

DDL_ARCHIVE 0x0020 Файл с установленным архивным битом

Старший байт обеспечивает некоторый дополнительный контроль:

Параметр iAttr Значение Опция

DDL_DRIVES 0x4000 включение имен дисков

DDL_EXCLUSIVE 0x8000 включать только файлы с указанными атрибутами

Когда значение iAttr сообщения LB_DIR равно DDL_READWRITE, то в списке перечисляются обычные файлы, файлы только для чтения и файлы с установленным архивным битом. Если значение iAttr сообщения LB_DIR равно DDL_DIRECTORY, то в список, дополнительно к файлам, включаются имена подкаталогов в квадратных скобках. Если значение iAttr сообщения LB_DIR равно DDL_DRIVES | DDL_DIRECTORY, то в список добавляются буквенные идентификаторы всех доступных дисков, при этом они расположены между черточками. При установке в iAttr старшего бита перечисляются только файлы с установленными флагами. файлы, которые были изменены после последнего резервирования. В таких файлах установлен архивный бит, поэтому можно использовать DDL_EXCLUSIVE | DDL_ARCHIVE.

56. Файл ресурсов. Описание и назначение. Компилятор ресурсов. Использование файла ресурсов в проекте приложения.

Значки, курсоры, окна меню и диалога связаны между собой. Все это виды ресурсов (resources) Windows. Ресурсы являются данными, и они хранятся в.EXE файле программы, но расположены они не в области данных, где обычно хранятся данные исполняемых программ. Таким образом, к ресурсам нет непосредственного доступа через переменные, определенные в исходном тексте программы. Они должны быть явно загружены из файла с расширением.EXE в память.

Есть следующие ресурсы:

Значки (icons)

Курсоры (cursors)

Битовые образы (bitmaps)

Символьные строки (character strings)

Ресурсы, определяемые пользователем (user defined resources)

Меню (menus)

Быстрые комбинации клавиш (keyboard accelerators)

Окна диалога (dialog boxes)

При создании программы ресурсы определяются в файле описания ресурсов (resource script), который представляет собой ASCII-файл с расширением.RC. В командной строке можно компилировать файл описания ресурсов с расширением.RC, превращая его, таким образом, в бинарный файл с расширением.RES, путем выполнения команды:

RC — r — DWIN32 filename.RC

Компилятор ресурсов RC.EXE использует препроцессор, который может учитывать добавленные и удаленные константы, определять символы ограничителей комментариев /* и */, и директивы препроцессора С #define, #undef, #ifdef, #ifndef, #include, #if, #elif, #else и # endif.

57. Описание в файле ресурсов иконок, курсоров и битовых образов. Имена ресурсов и стандартные типы ресурсов. Функции доступа к ресурсам.

RESOURC1.RC

/*-----------------------------

RESOURC1.RC resource script

-----------------------------*/

resourc1 ICON resourc1.ico

resourc1 CURSOR resourc1.cur

resourc1 BITMAP resourc2.bmp

Для получения описателя значка используется функция LoadIcon. В функции LoadIcon имеется два параметра:

1) hInstance 2) имя значка из описания ресурсов (например iconfile.ico)

Пример: hIcon = LoadIcon (hInstance, " myicon ");

Инструкции для задания курсора в файле описания ресурсов и для получения описателя курсора очень похожи на инструкции для иконок:

hCursor = LoadCursor (hInstance, " mycursor ");

Используемая в WinMain функция LoadBitmap аналогична функциям LoadIcon и LoadCursor. Ее возвращаемым значением является описатель битового образа:

hBitmap = LoadBitmap(hInstance, szAppName);

Этот описатель затем используется для создания шаблонной кисти (pattern brush). Основой кисти является битовый образ:

hBrush = CreatePatternBrush(hBitmap);

58. Ресурсы-символьные строки, их назначения и описание в файле ресурсов. Функции доступа к ресурсам-строкам.

Ресурсы-символьные строки предназначены главным образом для облегчения перевода вашей программы на другие языки. Ресурсы-символьные строки определяются в описании ресурсов с помощью ключевого слова STRINGTABLE:

STRINGTABLE

{

id1, "character string 1"

id2, "character string 2"

[определения остальных строк]

}

В описании ресурсов может содержаться только одна таблица строк. Максимальный размер каждой строки — 255 символов. LoadString для копирования строки из ресурса в буфер в сегменте данных:

LoadString(hInstance, id, szBuffer, iMaxLength);

Параметр id соответствует идентификатору, который предшествует каждой строке в файле описания ресурсов; szBuffer — это указатель на символьный массив, в который заносится символьная строка; iMaxLength — это максимальное число передаваемых в szBuffer символов.

 

59. Имена ресурсов, использование макроса MAKEINTRESOURCE().

MAKEINTRESOURCE (make an integer into a resourсe string — преобразовать целое в строку ресурса) является макросом, определенным в заголовочных файлах Windows, который преобразует число в указатель, но со старшими 16 разрядами, установленными в нуль. Рассмотрим данный макрос на примере иконок.

hIcon = LoadIcon (hInstance, MAKEINTRESOURCE (125));

//это значит, что второй параметр является числом, а не указателем на символьную строку.

LoadIcon(NULL, IDI_APPLICATION);

Поскольку параметр hInstance установлен в NULL, Windows узнает, что этот значок является предопределенным.

IDI_APPLICATION также определяется в заголовочных файлах Windows с использованием макроса MAKEINTRESOURCE:

#define IDI_APPLICATION MAKEINTRESOURCE(32512)

 

60. Структура главного меню. Описание меню в файле ресурсов.

Меню можно создать тремя разными способами. Наиболее обычным (и самым простым) является определение меню в файле описания ресурсов в форме шаблона меню, например:

MyMenu MENU

{

[список элементов меню]

}

MyMenu — это имя меню. Вы ссылаетесь на это имя в структуре класса окна. Обычно имя меню такое же, как имя приложения.

Внутри квадратных скобок можно использовать либо инструкцию MENUITEM, либо POPUP. Инструкция MENUITEM имеет следующий формат:

MENUITEM "&Text", id [, признаки]

Формат инструкции POPUP:

POPUP "&Text" [, признаки]

{

[список элементов меню]

}

Вместо фигурных скобок можно использовать ключевые слова BEGIN и END. Текст, выводимый для каждого пункта меню должен быть заключен в парные кавычки. Амперсант (&) вызывает подчеркивание следующего за ним символа при выводе на экран. Windows ищет этот же символ, когда пользователь выбирает элемент меню с использованием клавиши <Alt>. Если не включить амперсант в текст, то в тексте меню не будет подчеркнутых символов, и Windows будет использовать первую букву текста при поиске.

При определении всплывающего меню допускаются следующие инструкции:

MENUITEM "text", id [, признаки ]

а также:

MENUITEM SEPARATOR

а также:

POPUP "text" [, признаки ]

MENUITEM SEPARATOR рисует во всплывающем меню горизонтальную черту. Эта черта часто используется для разделения групп, связанных по смыслу и назначению опций.

61. Сообщение от меню. Идентификаторы действия меню. Индексы элементов Popup menu

// Ответ не был найден лишь частично, остальное писалось от себя

При взаимодействии с меню, Windows посылает главному окну сообщение WM_COMMAND с идентификатором действия, такие сообщения посылаются только для

разрешенных пунктов меню.

-----------------------------------------------------------------------------------------------------------

Все идентификаторы пунктов меню определяются в заголовочном файле. Этот файл должен быть включен (с помощью инструкции #include) в файл описания ресурсов и в файл с исходным текстом программы. Идентификаторы начинаются с букв IDM. Значения идентификаторов не обязательно должны быть последовательными.

В файле ресурсов идентификаторы записываются после имени действия, например:

MENUITEM "&New", IDM_NEW

IDM_NEW – и есть тот самый идентификатор пункта меню по именем «New»

-----------------------------------------------------------------------------------------------------------

Индексы каждого нового элемента POPUP начинаются с нуля. Допустим, есть такое меню:

«Файл» | «Вид» | «Помощь»

В пункте «Файл» есть такие подпункты: «открыть», «сохранить», «выход»

Так вот, пункт «Файл» будет иметь индекс «0», «Вид» – «1», и так далее.

Подпункты в меню «Файл» так же будут иметь индексы, начинающиеся с нуля:

«открыть» – индекс «0», «сохранить» – индекс «1», «выход» – индекс «2» и т.д.

 

61,а. Использование символа ‘&’ в описаниях пунктов меню

Амперсант (&) вызывает подчеркивание следующего за ним символа при выводе элементов меню на экран. Windows ищет этот же символ, когда пользователь выбирает элемент меню с использованием клавиши <Alt>. Если не включить амперсант в текст, то в тексте меню не будет подчеркнутых символов, и Windows будет использовать первую букву текста при поиске.

 

61,б. Действия, которые приводят к получению и потере фокуса для меню

//Ответ так же не был найден. Написано от себя

Меню может получить/потерять фокус при взаимодействии с ним по средствам мыши или клавиатуры. Инициация получения фокуса происходит при нажатии левой кнопкой мыши на главное меню или же при нажатии клавиши <Alt>. Пункты меню получают фокус, когда курсор находится непосредственно над пунктом меню или же при выделении пункта меню про средствам «стрелочек» на клавиатуре. Элемент меню, имеющий фокус, по особому выделяется (подсвечивается).

61,в. Основные признаки пунктов меню, порядок изменения состояния пунктов меню

Признаками в инструкциях MENUITEM, относящихся к всплывающим меню, являются следующие:

· CHECKED — Слева от текста появляется метка ("галочка").

· GRAYED — Данный пункт меню недоступен и не генерирует сообщений WM_COMMAND. Текст изображается недоступным(серым цветом).

· INACTIVE — Данный пункт меню неактивен и не генерирует сообщений WM_COMMAND. Текст изображается обычным образом.

· MENUBREAK — Данный пункт меню, а также все последующие появляются на экране в новом столбце.

· MENUBARBREAK — Данный пункт меню, а также все последующие появляются на экране в новом столбце. Столбцы разделяются между собой вертикальной чертой.

Опции GRAYED и INACTIVE нельзя использовать вместе. Опции MENUBREAK и MENUBARBREAK нельзя использовать вместе.

Для изменения состояния пункта меню необходимо сначала получить описатель (хэндл) на меню: hMenu = GetMenu(hwnd); После чего состояние пункта меню можно изменить с помощью функций CheckMenuItem или EnableMenuItem, так же может понадобиться функция GetSubMenu, для доступа к подпунктам меню.

61,г. Способы подключения меню в программу

1) В определении меню класса

wndclass.lpszMenuName = "MyMenu"; или

wndclass.lpszMenuName = MAKEINTRESOURCE(45); или

wndclass.lpszMenuName = "#45";

2) Девятый параметр функции CreateWindow

hMenu = LoadMenu(hInstance, "MyMenu");

и затем указать хэндл hMenu в 9 ом параметре функции CreateWindow.

3) Присоединение меню к окну с помощью функции SetMenu

hMenu = LoadMenu(hInstance, "MyMenu");

SetMenu(hwnd, hMenu);

61,д. Основные сообщения меню, их структура и назначение.

Когда пользователь выбирает пункт меню, Windows посылает оконной процедуре несколько различных сообщений. Одним из таких сообщений является сообщение WM_INITMENU, которое имеет следующие параметры:

wParam lParam
Описатель главного меню  

 

Это сообщение существует для того, чтобы дать вам возможность изменить меню перед тем, как будет выбран пункт меню.

-----------------------------------------------------------------------------------------------------------

Если пользователь перемещает курсор мыши по пунктам меню, программа может получить множество сообщений WM_MENUSELECT. Данное сообщение имеет следующие параметры:

LOWORD(wParam) HIWORD(wParam) lParam
Выбранный пункт: идентификатор меню или описатель сплывающего меню Флаги выбора Описатель меню, содержащего выбранный пункт  

 

Сообщение WM_MENUSELECT — это сообщение для отслеживания перемещения по меню. Младшее слово параметра wParam говорит о том, какой пункт меню выбран (подсвечен) в данный момент. В старшем слове параметра wParam могут быть комбинации из следующих флагов выбора: MF_GRAYED, MF_DISABLED, MF_CHECKED, MF_BITMAP, MF_POPUP, MF_HELP, MF_SYSMENU иMF_MOUSESELECT. Сообщение WM_MENUSELECT может понадобиться для того, чтобы изменить что-нибудь в рабочей области окна на основе информации о перемещении подсветки по пунктам меню.

-----------------------------------------------------------------------------------------------------------

Когда Windows готова вывести на экран всплывающее меню, она посылает оконной процедуре сообщение WM_INITMENUPOPUP со следующими параметрами:

 

wParam LOWORD(lParam) HIWORD(lParam)
Описатель всплывающего меню Индекс всплывающего меню Для системного меню «1», в ином случае «0»

 

Это сообщение важно, если необходимо разрешать или запрещать пункты меню перед их выводом на экран.

-----------------------------------------------------------------------------------------------------------

Самым важным сообщением меню является WM_COMMAND. Это сообщение показывает, что пользователь выбрал разрешенный пункт меню окна. Параметры сообщения таковы:

LOWORD(wParam) HIWORD(wParam) lParam
Идентификатор меню    

 

61,е. Отличия сообщения WM_COMMAND для меню и кнопок.

Сравнительная таблица передаваемых параметров для меню и кнопки:

  LOWORD(wParam) HIWORD(wParam) lParam
Меню Идентификатор меню    
Кнопка Идентификатор кнопки Код уведомления Описатель дочернего окна

 

61,ж. Отличия сообщения WM_COMMAND от сообщения WM_SYSCOMMAND

Сообщение WM_SYSCOMMAND похоже на сообщение WM_COMMAND за исключением того, что сообщение WM_SYSCOMMAND сигнализирует, что пользователь выбрал разрешенный пункт системного меню:

LOWORD(wParam) HIWORD(wParam) lParam
Идентификатор меню   0 (Если сообщение WM_SYSCOMMAND является результатом щелчка мыши, тогда старшее и младшее словоlParam являются, соответственно, экранными координатамиX и Y курсора мыши.)

 

Идентификатор меню показывает, какой пункт системного меню выбран. Для предопределенных пунктов системного меню, четыре младших разряда должны быть замаскированы. Результирующая величина будет одной из следующих: SC_SIZE, SC_MOVE, SC_MINIMIZE, SC_MAXIMIZE, SC_NEXTWINDOW, SC_PREVWINDOW,

SC_CLOSE, SC_VSCROLL, SC_HSCROLL, SC_ARRANGE, SC_RESTORE иSC_TASKLIST.

Кроме того, младшее слово параметра wParam может быть SC_MOUSEMENU или SC_KEYMENU.

Если вы добавите к системному меню новые пункты, то младшее слово параметра wParam станет идентификатором, который вы определите (должен быть больше 0xF000). Обычные сообщения WM_SYSCOMMAND должны передаваться в DefWindowProc, иначе обычные команды системного меню будут отключены.

 

62. Всплывающее меню. Отличия в описании всплывающего меню от описания главного меню в файле ресурсов

Всплывающее меню появляется при нажатии правой кнопки мыши в любой части экрана. Основное отличие в описании файла ресурсов это то, что всплывающее меню содержит лишь один пункт.

Пример контекстного меню:

PopMenu MENU

{

POPUP ""

{

POPUP "&File"

{

MENUITEM "&New", IDM_NEW

MENUITEM "&Open...", IDM_OPEN

MENUITEM "&Save", IDM_SAVE

MENUITEM "Save &As...", IDM_SAVEAS

MENUITEM SEPARATOR

MENUITEM "E&xit", IDM_EXIT

}

}

}

 

 

62,а Порядок обращению к всплывающему меню

Для доступа к элементам всплывающего меню, необходимо получить доступ к первому (0-ой индекс) пустому пункту:

hMenu = GetSubMenu(hMenu, 0);

После чего можно работать с всплывающим меню при помощи функции TrackPopupMenu(hMenu,0, позиция Х, позиция У, 0, NULL)

 

63. Системное меню. Особенности, описание и использование системного меню

В родительских окнах, стиль которых содержит идентификатор WS_SYSMENU, имеется зона системного меню в левой части строки заголовка. Данное меню генерирует сообщение WM_SYSCOMMAND при взаимодействии с ним. В данное меню можно добавить свои пункты, по мимо системных, только в таком случае идентификаторы должны иметь значения большие 0x000F, а так же сообщения, посылаемые с WM_SYSCOMMAND, должны отправляться в DefWindowProc, чтобы их действия не были запрещены, а оставались активными. Стандартное системное меню позволяет производить различные действия с окном: перемещать, закрывать, разворачивать и т.д.

 

63,б. Использование системного меню для построения меню пользователя

Для добавления в системное меню пользовательских команд необходимо, сперва получить описатель (хэндл) системного меню. Делается это так:

hMenu = GetSystemMenu(hwnd, FALSE);

После чего нужный пункт меню добавляется в системное меню таким образом:

AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);

AppendMenu(hMenu, MF_STRING, IDM_ABOUT, "About...");

В данном случае к системному меню добавится разделитель и пункт «About…».

Для удаления добавленных пунктов меню нужно сделать так:

GetSystemMenu(hwnd, TRUE);

64. Клавиши акселератора. Назначение и описание в файле ресурсов. Обработка сообщений от клавиш акселератора в цикле обработки сообщений.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...