Операционные системы. Марапулец Ю.В. - 61 стр.

UptoLike

Составители: 

При появлении нового DDE-приложения на обновление окна текущего
экземпляра затрачивается дополнительное время. Эта операция может быть
отложена до поступления дополнительной информации (например, при
передаче данных).
Кроме того, одно из приложений может прервать диалог. Если это
произойдет, достаточно простой команды обновления окна InvalidateRect.
case XTYP_DISCONNECT:
InvalidateRect( hwnd, NULL, TRUE );
break;
Следующие два типа транзакций, XTYP_ADVREQ
и XTYP_REQUEST,
ожидают ответа в виде информационного сообщения. Во многих DDE-
приложениях эти транзакции подразумевают передачу данных в текстовом
формате (с разделителями), совместимом с форматом CF_TEXT.
case XTYP_ADVREQ:
case XTYP_REQUEST:
return ( DdeCreateDataHandle ( idInst, (PBYTE) &DataOut,
sizeoft DataOut ),
0, hszAppName, hFormat, 0 ) ) ;
Функция DdeCreateDataHandle используется для получения дескриптора
блока данных. Передаваемые данные имеют тип UINT
(32-разрядное целое
беззнаковое число), причем номер экземпляра исходного приложения, iInst,
находится в старшем байте старшего слова, а остальные данные записаны в
младшем слове. Формирование этих данных осуществляется процедурой
WndProc и будет описано немного позже.
Когда приложение выступает в роли клиента, а не сервера, в ответ на
транзакцию XTYP_ADVDATA
происходит обратный процесс. С помощью
функций DdeGetData и DdeSetUserHandle выполняется преобразование
полученных данных в приемлемый формат.
case XTYP_ADVDATA:
if( DdeGetData( hData, (PBYTE) &DataIn, sizeof(DataIn), 0 ) )
DdeSetUserHandle( hConv, QID_SYNC, DataIn );
InvalidateRect( hwnd, NULL, TRUE );
return ( DDE_FACK ) ;
Функция DdeGetData копирует данные в локальный буфер DataIn, после
чего вызывается функция DdeSetUserHandle для связывания локального буфера
с дескриптором диалога hConv. Этот процесс упрощает выполнение
асинхронных транзакций (они будут рассмотрены позже) и запускается в
подпрограмме WndProc при вызове функции DdeQueryConvInfo в ответ на
61
     При появлении нового DDE-приложения на обновление окна текущего
экземпляра затрачивается дополнительное время. Эта операция может быть
отложена до поступления дополнительной информации (например, при
передаче данных).
     Кроме того, одно из приложений может прервать диалог. Если это
произойдет, достаточно простой команды обновления окна InvalidateRect.

     case XTYP_DISCONNECT:
           InvalidateRect( hwnd, NULL, TRUE );
           break;

     Следующие два типа транзакций, XTYP_ADVREQ и XTYP_REQUEST,
ожидают ответа в виде информационного сообщения. Во многих DDE-
приложениях эти транзакции подразумевают передачу данных в текстовом
формате (с разделителями), совместимом с форматом CF_TEXT.

     case XTYP_ADVREQ:
     case XTYP_REQUEST:
           return ( DdeCreateDataHandle ( idInst, (PBYTE) &DataOut,
                                  sizeoft DataOut ),
                                  0, hszAppName, hFormat, 0 ) ) ;

      Функция DdeCreateDataHandle используется для получения дескриптора
блока данных. Передаваемые данные имеют тип UINT (32-разрядное целое
беззнаковое число), причем номер экземпляра исходного приложения, iInst,
находится в старшем байте старшего слова, а остальные данные записаны в
младшем слове. Формирование этих данных осуществляется процедурой
WndProc и будет описано немного позже.
      Когда приложение выступает в роли клиента, а не сервера, в ответ на
транзакцию XTYP_ADVDATA происходит обратный процесс. С помощью
функций DdeGetData и DdeSetUserHandle выполняется преобразование
полученных данных в приемлемый формат.

     case XTYP_ADVDATA:
           if( DdeGetData( hData, (PBYTE) &DataIn, sizeof(DataIn), 0 ) )
                  DdeSetUserHandle( hConv, QID_SYNC, DataIn );
           InvalidateRect( hwnd, NULL, TRUE );
           return ( DDE_FACK ) ;

      Функция DdeGetData копирует данные в локальный буфер DataIn, после
чего вызывается функция DdeSetUserHandle для связывания локального буфера
с дескриптором диалога hConv. Этот процесс упрощает выполнение
асинхронных транзакций (они будут рассмотрены позже) и запускается в
подпрограмме WndProc при вызове функции DdeQueryConvInfo в ответ на

                                      61