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

 

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

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

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

void CProgView::OnUpdateEditCut(CCmdUI* pCmdUI)
// todo: Здесь добавьте собственный код обработчика pCmdUI->Enable (m_IsSelection) ;
)
void CProgView::OnUpdateEditCopy (CCmdUI* pCmdUI)
{
//todo: Здесь добавьте собственный код обработчика pCmdUI->Enable (m_IsSelection);
i
Предполагается, что переменной mlsSelection типа BOOL класса представления присваивается значение true только при выборе растрового изображения. Если можно перенести в буфер текст, то переменной m_IsSelection присваивается значение true в случаях, когда выбран или текст, или растровое изображение.
Растровое изображение должно быть добавлено в буфер обработчиками сообщений для команд Cut и Сору. Опишем алгоритм этой процедуры.
1. Вызвать функцию cwnd: :OpenClipboard для открытия буфера.
2. Вызвать функцию EmptyClipboard, чтобы удалить текущее содержимое буфера.
3. Вызвать функцию :: SetClipboardData, передавая ей код cf_bitmap как первый параметр и дескриптор растрового изображения, помещаемого в буфер, как второй. Существует несколько способов создания растрового изображения и получения его дескриптора (см. гл. 20). В следующем примере программы создается пустое растровое изображение и в него копируются данные.
4. Вызвать функцию : : CloseClipboard, чтобы закрыть буфер.
5. Обработчик сообщений command команды Cut должен удалить графические данные из документа.
Например, следующий обработчик сообщений command для команды Сору создает растровое изображение с текущим содержимым окна представления. Затем он добавляет его в буфер.
void CProgView::OnEditCopy() {
// TODO: Здесь добавьте собственный код обработчика
CBitmap BitmapClip; CClientDC ClientDC (this); CDC MemDC; RECT Rect;
// создайте пустое растровое изображение GetClientRect (SRect); BitmapClip.CreateCompatibleBitmap (SClientDC,
Rect.right - Rect.left, Rect.bottom - Rect.top);
// создайте объект памяти и перешлите в него // растровое изображение: MemDC.CreateCompatibleDC (&ClientDC); MemDC.SelectObject (SBitmapClip);
// скопируйте содержимое окна представления в // растровое изображение: MemDC.BitBlt
(О,
О,
Rect.right - Rect.left,
Rect.bottom - Rect.top
SClientDC,
0,
0,
SRCCOPY);
// 1. Откройте буфер if (!OpenClipboard ()) return;
// 2. Удалите текущее содержимое буфера ::EmptyClipboard ();
// 3. Передайте дескриптор растрового изображения в буфер ::SetClipboardData (CF_BITMAP, BitmapClip.m_hObject);
// Предотвратите удаление растрового изображения BitmapClip.Detach ();
// 4. Закройте буфер ::Cioseciipboard О;
}
Функция OnEditCopy начинается с вызова функции CreateCompatibleBitmap класса CBitmap, позволяющего создать пустое изображение, размеры которого
равны размерам окна представления. Затем создается объект контекста устройства памяти и выбирается новое растровое изображение. Вызывается функция BitBlt класса cdc для того, чтобы скопировать все содержимое окна представления в растровое изображение.
Примечание
Информацию о создании растровых изображений и вызове функций для выполнения битовых операций, например BitBlt, смотрите в гл. 20.
Функция OnEditCopy вызывает функцию : : SetClipboardData, чтобы добавить растровое изображение в открытый буфер. Она присваивает первому параметру значение cfbitmap, указывающее на формат растрового изображения, а второму параметру — значение BitmapClip.m_hObject, содержащее дескриптор растрового изображения. (Переменная m_hObject наследуется классом CBitmap от класса CGdiObject.)
После вызова функции :: SetClipboardData для перемещения растрового изображения в буфер использовать или удалять его не нужно. В примере функция OnEditCopy вызывает функцию Detach класса CGdiObject для удаления дескриптора растрового изображения из объекта BitmapClip. Если этого не выполнить, то деструктор класса CBitmap автоматически удалит растровое изображение, когда BitmapClip выйдет из области видимости (т. е. при возврате из функции OnEditCopy).
Примечание
Если программа также обеспечивает копирование текста в буфер, то функция OnEditCopy определяет формат выделенных данных и переключается на соответствующую программу.
Получение растрового изображения из буфера обмена
Обработчик сообщения update_command_ui для команды Paste может передать флажок CF_BITMAP в функцию : : IsClipboardFormatAvailable, чтобы определить, содержит ли буфер данные в формате растрового изображения. Эта информация используется для того, чтобы сделать команду Paste доступной или недоступной.
void CProgView::OnUpdateEditPaste(CCmdUI* pCmdUI) {
// TODO: Здесь добавьте собственный код обработчика pCmdUI->Enable (::IsClipboardFormatAvailable (CF_BITMAP));
(
(Если в программе поддерживается вставка текста и растрового изображения, то функция OnUpdateEditPaste проверяет наличие формата cf_text.)
Обработчик сообщения command для команды Paste получает растровое изображение из буфера по следующему алгоритму.
1. Вызывается функция OpenClipboard для открытия буфера.
2. Передается значение cf_bitmap в функцию GetclipboardData для получения дескриптора растрового изображения.
Предыдущая << 1 .. 129 130 131 132 133 134 < 135 > 136 137 138 139 140 141 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100