判斷網路是否可用:
具體可以參照: Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Samples/CPP/Mfc/CMHELPER
HRESULT IsAvailableNetWork( LPCSTR strPathUrl , BOOL bProxy)
{
GUID guidNetWork;
HANDLE hConn;
//通過目標網路求出GUID
ConnMgrMapURL(strPathUrl , &guidNetWork, 0);
CONNMGR_CONNECTIONINFO ci = { 0 };
ci.cbSize = sizeof(ci);
ci.dwParams = CONNMGR_PARAM_GUIDDESTNET
| CONNMGR_PARAM_MAXCONNLATENCY;
ci.dwFlags = bProxy?CONNMGR_FLAG_PROXY_HTTP:0;
ci.ulMaxConnLatency = 4000; // 4 second
ci.bDisabled = TRUE;
ci.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
ci.guidDestNet = guidNetWork;
//建立一個串連請求
if( SUCCEEDED( hr = ConnMgrEstablishConnection(&ci, &hConn ) )
{
DWORD dwResult = WaitForSingleObject(hConn, 400);
switch (dwResult)
{
case WAIT_OBJECT_0:
{
DWORD dwStatus;
//當前串連狀態
if( SUCCEEDED(ConnMgrConnectionStatus(hConn, &dwStatus)) &&
( (dwStatus ==CONNMGR_STATUS_CONNECTED) ||
(dwStatus == CONNMGR_STATUS_CONNECTIONDISABLED) ))
{
hr=S_OK;
PROXY_CONFIG ProxyInfo;
ZeroMemory(&ProxyInfo, sizeof(ProxyInfo));
ProxyInfo.dwType = CONNMGR_FLAG_PROXY_HTTP;
//功能交換資訊與串連規劃或串連服務提供者。
if (SUCCEEDED(ConnMgrProviderMessage( hConn, &IID_ConnPrv_IProxyExtension,
NULL, 0, 0, (PBYTE)&ProxyInfo, sizeof(ProxyInfo))))
{
if (ProxyInfo.dwType == CONNMGR_FLAG_PROXY_HTTP)
{
// SECURITY: Zero out the username/password from memory.
}
}
}
else
{
hr=S_FALSE;
}
break;
}
case WAIT_TIMEOUT:
hr=E_FAIL;
break;
}
//刪除串連請求
ConnMgrReleaseConnection(hConn, FALSE);
}
}
從網路載入PNG圖片
CString url = _T("http://upload.wikimedia.org/wikipedia/commons/e/e8/Klixbuell-Wap.png");
HINTERNET hNet = ::InternetOpen(L"Microsoft Internet Explorer",
INTERNET_OPEN_TYPE_DIRECT,
NULL,
NULL,
0);
HINTERNET hUrlFile = ::InternetOpenUrl(hNet,
url,
NULL,
0,
INTERNET_FLAG_RELOAD,
0);
if (!HttpSendRequest( hUrlFile , NULL , 0 , NULL , 0))
{
err = GetLastError();
}
DWORD dwSize = 0;
DWORD result = 0;
DWORD dwDownloaded = 0;
char *lpszData = NULL;
// CoInitialize before calling CoCreateInstance.
CoInitializeEx(NULL, COINIT_MULTITHREADED);
//
do
{
if(!InternetQueryDataAvailable(hUrlFile , &dwSize , 0 , 0))
{
result = GetLastError();
}
lpszData = new char[dwSize+1];
//read file
if(!(::InternetReadFile(hUrlFile,lpszData,dwSize,&dwDownloaded))) //LPVOID //InternetReadFileEx
{
delete[] lpszData;
lpszData = NULL;
}
IImagingFactory *pImgFactory = NULL;
IImage *pImage = NULL;
// Create the imaging factory.
if(SUCCEEDED(CoCreateInstance (CLSID_ImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IImagingFactory,
(void **)&pImgFactory)))
{
if(SUCCEEDED(pImgFactory->CreateImageFromBuffer(lpszData,dwDownloaded,BufferDisposalFlagNone,&pImage)))
{
// Draw the image.
ImageInfo info;
pImage->GetImageInfo(&info);
CRect rc(0, 0, info.Width, info.Height);
pImage->Draw(hdc, &rc, NULL);
pImage->Release();
}
pImgFactory->Release();
}
}while(dwSize != 0);
CoUninitialize();
//
if(lpszData != NULL)
{
delete[] lpszData;
lpszData = NULL;
}
::InternetCloseHandle(hUrlFile);
::InternetCloseHandle(hNet);