Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том2)" -> 130

Visual С++ 6. Полное руководство: В 2 т.(том2) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 124 125 126 127 128 129 < 130 > 131 132 133 134 135 136 .. 173 >> Следующая

Во-вторых, каждый процесс вызывает функцию Win32 API : :MapViewOfFile, чтобы выделить блок памяти, называемый представлением файла, передавая дескриптор объекта файла памяти и указывая те же имя ("MyFileMappingObject") и размер (1024 байта), которые задавались в вызове функции :: CreateFileMapping. Например:
// код внутри ОБОИХ процессов: char *PtrSharedMemory;
PtrSharedMemory = (char *) : -.MapViewOfFile
(HFileMapping, // дескриптор объекта файла памяти
FILE_MAP_ALL_ACCESS, // разрешает доступ для чтения/записи
О, // 32-битовый высокого порядка со смещением
// совместно используемого блока: 0;
0, // 32-битовый низкого порядка со смещением
// совместно используемого блока: 0;
1024); // 1 К в совместно используемом блоке
При первом вызове функции : :Мару1еюО?Гл.1е (в одном процессе) выделяется блок памяти и возвращается указатель на него. При втором (в другом процессе) — возвращается указатель на тот же блок памяти. Теперь каждый процесс использует указатель для доступа к блоку совместно используемой памяти так же, как он обращается к любой выделенной памяти. Поскольку оба процесса имеют доступ к одним данным, возможно, для синхронизации доступа им могут потребоваться объекты синхронизации Win32.
Наконец, когда процессы завершают совместное использование блока памяти, каждый из них вызывает функцию Win32 АР1 : :иптар\А1емОгП1е, чтобы отменить представление файла, а затем — функцию Win32 АР1 : :С1озеП1е, чтобы закрыть дескриптор объекта файла памяти.
Использование буфера обмена_
В следующих разделах мы рассмотрим использование буфера обмена для передачи данных в программу и обмена данными с другими программами. В первом разделе описываются команды, выполняемые программой, которая использует буфер обмена. Далее объясняется, как он используется для передачи простого текста, графических изображений в растровом формате и данных, соответствующих пользовательскому формату.
Команды буфера обмена
Программа, в работе которой используется буфер обмена, как правило, должна содержать в меню Edit команды Cut, Сору и Paste. Если для генерации программы используется мастер AppWizard, то он добавит команды Cut, Сору и Paste в исходное меню Edit. Во многих примерах, приведенных в этой книге, содержатся инструкции по удалению команд меню, так как некоторыми программами они не используются. В табл. 23.1 перечислены свойства команд, определенных мастером AppWizard и появляющихся в редакторе меню Visual С++. На рис. 23.1 показано начальное меню Edit, сгенерированное мастером AppWizard и отображающее команды Cut, Сору и Paste.
Рис. 23.1. Меню Edit, сгенерированное мастером AppWizard
Таблица 23.1. Свойства команд меню Cut, Сору и Paste, сгенерированных мастером AppWizard
Идентификатор Надпись Интерактивная справка Другие
свойства
id_ _edit_ _cut Cu&t\tCtrl+X Cut the selection and put it on the Clipboard\nCut (Удалить в буфер) Отсутствуют
id_ _edit_ _copy &Copy\tCtrl+C Copy the selection and put it on the Clipboard\nCopy (Копировать в буфер) Отсутствуют
_edit_ paste &Paste\tCtrl+V Insert Clipboard contents\nPaste (Вставить из буфера) Отсутствуют
Мастер AppWizard также задает два акселератора для команд Cut, Сору и Paste. Первый — соответствует ранее принятым соглашениям о комбинациях клавиш, а второй — новому соглашению. Можно использовать и старую, и новую комбинации клавиш для активизации этих команд. Заметим: заголовки меню отображают комбинации клавиш, соответствующие новым соглашениям (табл. 23.2).
Таблица 23.2. Клавиатурные акселераторы для команд Cut, Сору и Paste, сгенерированных мастером AppWizard
Команда Имя команды меню и акселератора Комбинация клавиш по старому соглашению Комбинация клавиш по новому соглашению
Cut ID_EDIT_cut Shift+Del Ctrl+X
Сору id_EDIT_copy Ctrl+Ins Ctrl+C
Paste id_edit_paste Shift+Ins Ctrl+V
Мастер AppWizard не предоставляет дескрипторы для команд Cut, Сору и Paste. Следовательно, они изначально недоступны (рис. 23.1). Как правило, обработчики сообщений для этих команд можно определить, используя мастер ClassWizard. Их обычно добавляют в класс представления, отвечающий за интерфейс команд, позволяющих редактировать документ, отображаемый в окне представления. Кроме того, для каждой из команд Cut, Сору и Paste нужно предоставить обработчики command и update_command_ui. Обработчик update_command_ui получает управление, когда меню Edit открывается впервые, после чего обработчик, основываясь на текущем состоянии буфера обмена или окна представления, делает команду либо доступной, либо недоступной. Обработчик command получает управление, когда выбирается команда, выполняющая операцию с буфером обмена. В табл. 23.3 приведены стандартные имена обработчиков, генерируемых мастером ClassWizard для этих команд.
Таблица 23.3. Обработчики сообщений, определяемые мастером ClassWizard для команд Cut, Сору и Paste меню Edit
Команда Идентификатор Тип сообщения Обработчик
сообщения
Cut ID_ _EDIT_ _CUT COMMAND OnEditCut
Cut ID_ _EDIT_ _CUT UPDATE COMMAND UI OnUpdateEditCut
Предыдущая << 1 .. 124 125 126 127 128 129 < 130 > 131 132 133 134 135 136 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100