Асинхронни псевдонимни (moniker) файлове като възможност за избягване на многонишковото програмиране
| Информационни технологии | 2009-12-04 | 36 сваляния |
51 Асинхронни псевдонимни (moniker) файлове като възможност за избягване на многонишковото програмиране. Помощен контрол за IP адреси. Създаване на WEB приложение.
Асинхронни псевдонимни (moniker) файлове
За целта използвате Windows DLL URLMON, който работи с WinInet . Там е силния клас CAsyncMonikerFile.
Всъщност moniker е COM обект, работещ с името (URL) на истинския обект. В него е реализиран интерфейс IMoniker, чиито ф-ии асоциират четенето с памет за съхраняване на данните и интерфейс IBindStatusCallback, чиито ф-ии пък се активират по време на самото четене на данни от URL.
За щастие тези сложнотии са капсулирани в CAsyncMonikerFile : CFile, което позволява да работите като с обикновен файл.
Вместо обаче да се отвори дисков файл, ф-ята Open() изработва IMoniker и привързва четенето с място за съхранение (IStorage). Това което остава да направите е да предефинирате поведението на call back ф-ии (OnProgress, OnDataAvailable), които се викат асинхронно от Windows при случване на съответните събития.
Контроли за IP адреси
Класът е CIPAddressCtrl
CIPAddressCtrl:: SetAddress();
CIPAddressCtr::GetAddress();
::ClearAddress();
::IsBlank();
::SetFieldocus(); // фокусира в избрано поле на контрола.
::SetFieldRange(); // ограничава диапазона на въвеждани ч-ла в поле.
ето пример на инициализиране на контрола с IP адрес, пазен в 4 променливи по части:
CIPAddressCtrl m_wndIPAddress;
BYTE m_field1, m_field2, m_field3, m_field4;
BOOL CMyDiaog::OnInitDalog()
{ CDialog::OnInitDialog();
m_wndIPAddress.SetAddress( m_field1, m_field2, m_field3, m_field4);
return TRUE; }
контролът подава нотификационни съобщения на родителя си:
EN_SETFOKUS; EN_KILLFOKUS; EN_CHANGE; към WM_COMMAND
IPN_FIELDCHANGED при промяна стойност на поле към WM_NOTIFY.
Създаване примерно Web приложение
-
създавате нов AppWizard проект (MFC базиран). SDI.
-
създавате ресурс на диалог за въвеждане на URL (задавате ID на диалога и на edit контрола в него.
-
създавате диалогов клас, свързан с токущо създадения диалог
-
задавате име на променлива, свързана с edit контрола (CString).
-
модифицирате менюто с цел добавяне опция Make_Connection със собствен ID.
-
чрез ClassWizard асоциирате меню-опцията с ваша функция (напр. OnConnect()).
-
добавете следния код за тази функция:
CURLDlg dialog(this);
dialog.m_url = http://www.vmei.acad.bg;
int result = dialog.DoModal();
if (result == IDOK)
{ CString url = dialog.m_url; CInternetSession internetSession;
try
{ CHttpFile* httpfile = (CHttpFile*) internetsession.OpenURL(url);
httpFileSetReadBufferSize(4096);
for( int x = 0; x<30; ++x)
httpFileReadString(m_webPageLines[x]);
httpFileClose();}
catch (CInternetException* pException) {}
internetsession.Close();
Invalidate();}
-
към класа изглед добавете инициализации:
for( int x = 0; x<30; ++x)
m_webPageLines[x] = ;
-
към метода OnDraw() на изгледа добавете:
for ( int x = 0; x<30; ++x)
pDCTextOut(, m_webPageLines[x]);
-
към заглавния (.h) файл на изгледадобавете декларация:
protected: CString m_webPageLines[30];
Тагове от реферата: многонишковот, moniker, псевдонимни, ягване, асинхронни, програмиране, възможност











