Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТРПС- читать.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
142.34 Кб
Скачать

13. Особенности использования памяти на Windows платформах. Проблема ipc (трпс)

Каждое приложение Win32 запускается в своем адресном пространстве, которое недоступно другим приложениям. Соответственно это приложение не может получить/передать данные из/в адресного пространства другого приложения. Проблема IPC -это проблема межпроцессового взаимодействия Решается проблема с помощью специальных механизмов обмена данными между приложениями: DDE и OLE. DDE – это протокол посылки сообщений и совместного использования памяти для обмена данными между приложениями. Win32 API также включает в себя DDEML – это dll библиотека функций для совместного использования данных. OLE – это расширяемая технология. По мимо существующих в неё можно добавлять дополнительные возможности. Существует поддержка OLE-документов, OLE-автоматизация и OLE-элементы управления.

14. Общая схема печати документов приложением на Windows платформах. (трпс)

Общая схема действий при печати документа следующая: Получить или создать контекст устройства принтера. Создать немодальный диалог для отмены печати. Активизировать процесс спулинга печати. Нарисовать каждую страницу документа, отправляя ее на печать по мере готовности. Завершить процесс спулинга печати. Закрыть немодальный диалог и освободить контекст устройства принтера.

Наиболее простой способ получения дескриптора контекста устройства принтера – это использование стандартного Windows диалога. Например:

1 Получение или создание контекста устройства принтера.

Получение:

HDC PrnDC;//Дескриптор контекста принтера PRINTDLG pd;//Структура инициализации диалога Pd.Flags = PD_RETURNDC;

if (PrindDLg(&pd)){ PrnDC = pd.hDC; }

Создание: HDC CreateDC(LPCTSTR szDriver, LPCTSTR szDevice, LPCTSTR szOutput, DEVMODE* pInitData,)

Функция возвращает контекст при задании параметров: имя драйвера принтера, имя принтера, имя порта принтера, указатель на структуру, содержащую дополнительную информацию о настройке принтера.

2 Создание немодального диалога для отмены печати.

На диалоге обязательно должна присутствовать кнопка отмены печати с идентификатором IDCANCEL. Создает немодальный диалог функция CreateDialog().

hDlgBreak = CreateDialog(g_hInst,pTemplate, hWndParent,DlgFunc);

//Функция окна диалога:

BOOL CALLBACK DlgFunc (HWND hDlg,UINT message,WPARAM wp,LPARAM lp)

{ switch (message){ case WM_INITDIALOG: //инициализация диалога

return TRUE;

case WM_COMMAND: if (LOWORD(wp)==IDCANCEL){ g_UserBreak=TRUE; return TRUE;}

} return FALSE; }

Также понадобится еще одна функция – функция прекращения печати.

BOOL CALLBACK AbortProc (HDC, short){

MSG msg; while (PeekMessage(&msg,0,0,0,PM_REMOVE)) {

if(!IsDialogMessage(&msg)){

TranslateMesage(&msg);

DispatchMesage(&msg);}

} return !g_UserBreak; }

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

EnableWindow(hWndParent, FALSE); SetAbortProc(PrnDc, (ABORTPROC)AbortProc);

3 Активизация процесса «спуллинга» печати.

Необходимо заполнить структуру DOCINFO и вызвать функцию начала печати документа.

DOCINFO din; din.cbSize=sizeof(din); din. LpszDocName=”MyDoc”; int error = StartDoc(PrnDC,&din);

Если error >0, ошибок нет.

4 Печать страницы документа.

Для каждой страницы выполняются три шага:

  • сообщение системе о начале печати страницы; Отрисовка каждой страницы(GDI функции); Сообщение системе об окончании печати страницы

do { StartPage(PrnDC); ERROR=EndPage(PrnDC); } while (error>0 &&!g_UserBreak);

5 Завершение процесса «спуллинга» печати.

if (error<=0 || g_UserBreak) AbortDoc(PrnDC); else EndDoc(PrnDC);

6 Закрытие немодального диалога и освобождение контекста принтера

EnableWindow(hWndParent, TRUE); DestroyWindow(hDlgBreak); DeleteDC(PrnDC);

15. Общая схема создания плавающего меню. Особенности реализации для System Tray (ТРПС)

Меню – это основная часть пользовательского интерфейса. Виды меню:

Главное меню или меню верхнего уровня. Это меню представляет собой горизонтальную строку, которая расположена непосредственно под заголовком окна и состоит из нескольких элементов.

Подменю появляется под главным меню при выборе одного из его элементов.

Плавающее меню. Оно не связано с главным меню, и может быть создано в любом месте экрана.

При выборе пунктов меню, строка инвертирует цвет. Пункты всплывающих меню могут находится с соостоянии отмечено, при этом слева от текста меню выставляеся специальная метка. Пункты меню могут находится в состоянии активно, неактивно, и недоступно.

Для создания плавающего меню используется функция: HMENU CreatePopupMenu(VOID); теперь для добавления элементов в плавающее меню используется функция AppendMenu() и InsertMenuItem(). Функция TrackPopupMenu() изображает всплывающее меню в указанном местоположении например: TrackPopupMenu(hmenu,TPM_CENTERALIGN | TPM_TOPALIGN, x, y, NULL, hWnd, NULL); После чего вызывается функция DestroyMenu() для освобождения дескриптора созданного меню.Меню создается в обработчике события, чаще при отпускании правой кнопки мыши (событие WM_RBUTTONUP). Обработка командных событий получившегося плавающего меню выполняется в обработчике событий WM_COMMAND.