⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 codedlg.cpp

📁 《Visual C++.NET 精彩编程百例》源代码第06篇EXAMPLE
💻 CPP
字号:
// CodeDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "HttpExp.h"
#include "CodeDlg.h"
#include"wininet.h"

// CCodeDlg 对话框

IMPLEMENT_DYNAMIC(CCodeDlg, CDialog)
CCodeDlg::CCodeDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCodeDlg::IDD, pParent)
	
{	
	m_strUrl="";
     m_strServer="";
	 m_strPath="";
}

CCodeDlg::~CCodeDlg()
{
}

void CCodeDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);

	DDX_Control(pDX, IDC_EDIT_HTML, m_editHtml);
}


BEGIN_MESSAGE_MAP(CCodeDlg, CDialog)
	ON_BN_CLICKED(IDC_EXIT, OnBnClickedExit)
END_MESSAGE_MAP()


// CCodeDlg 消息处理程序

void CCodeDlg::OnBnClickedExit()
{
	// TODO: 在此添加控件通知处理程序代码
	OnOK();
}

BOOL CCodeDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  在此添加额外的初始化
	ShowCode(m_strUrl);

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常:OCX 属性页应返回 FALSE
}


void CCodeDlg::ParseURL(CString strUrl)
{
	if(strUrl.IsEmpty())
	{
		return;
	}
	//去掉"http://"
	CString strTemp=strUrl.Mid(7);
		//检查主机的路径
	int nSlash=strTemp.Find("/");
	if (nSlash!=-1)  //如等于-1,就是没找到
	{
		m_strServer=strTemp.Left(nSlash);//取‘/’左边的服务器地址
        m_strPath=strTemp.Mid(nSlash);
	}
	else
		m_strServer=strTemp;
}


void  CCodeDlg::ShowCode(CString strUrl)
{
	
	
	//判断地址是否有效,如为空或开头7个字符不是“http://"
	if(strUrl.IsEmpty()||strUrl.Left(7)!="http://")
	{
		AfxMessageBox("请输入正确的URL地址!");
		return;
	}
	//解析地址,得到服务器名字和文件路径名
	ParseURL(strUrl);
	//第一步:初始化internet DLL,这是第一个被调用的函数
	HINTERNET hSession=::InternetOpen("Raw HTML Reader",PRE_CONFIG_INTERNET_ACCESS,
		                              "",INTERNET_INVALID_PORT_NUMBER,0);
	//判断会话句柄是否有效
	if(hSession==NULL)
	{
		AfxMessageBox("无法连接Internet!");
		return;
	}
	//第二步:初始化HTTP session
	HINTERNET	hConnect=::InternetConnect(hSession,
		                                   m_strServer,
										   INTERNET_INVALID_PORT_NUMBER,
										   NULL,
										   "",
										   INTERNET_SERVICE_HTTP,
										   0,
										   0);
	//判断连接句柄是否有效
	if(hConnect==NULL)
	{
		AfxMessageBox("无法连接Internet!");
		//关闭会话句柄
		VERIFY(::InternetCloseHandle(hSession));
		return;
	}
    	//第三步:打开一个HTTP请求句柄
	HINTERNET hHttpFile=::HttpOpenRequest(hConnect,
										  "GET",
										  m_strPath,
										  HTTP_VERSION,
										  NULL,
										  0,
										  INTERNET_FLAG_DONT_CACHE,
										  0);
	//判断连接句柄是否有效
	//判断会话句柄是否有效
	if(hHttpFile==NULL)
	{
		AfxMessageBox("Http request failed!");
		VERIFY(::InternetCloseHandle(hConnect));
		VERIFY(::InternetCloseHandle(hSession));
		return;
	}
	
	//显示等待光标
	CWaitCursor wait;
	//第四步:发出请求
	BOOL bSendRequest=::HttpSendRequest(hHttpFile,
									   NULL,
									   0,
									   0,
									   0);
	if(bSendRequest)
	{
	//得到文件的大小
		char achQueryBuf[16];
		DWORD dwFileSize;
		DWORD dwQueryBufLen=sizeof(achQueryBuf);
		BOOL bQuery=::HttpQueryInfo(hHttpFile,
			                        HTTP_QUERY_CONTENT_LENGTH,
									achQueryBuf,
									&dwQueryBufLen,
									NULL);
		if(bQuery)
		{
	//查找成功,指出需要存放文件的内存大小
            dwFileSize=(DWORD)atol(achQueryBuf);
		}
		else
		{
	//失败,猜出一个最大文件数
			dwFileSize=10*1024;
		}
	//分配一个缓冲区给文件数据
		char *lpszBuf=new char[dwFileSize+1];
	//读文件
		DWORD dwBytesRead;
		BOOL bRead=::InternetReadFile(hHttpFile,
			                          lpszBuf,
									  dwFileSize+1,
									  &dwBytesRead);
	//显示HTML的源码
	//DisplayRawHtml(lpszBuf);
		m_editHtml.SetWindowText((LPCTSTR)lpszBuf);
	//清除缓冲区
		delete lpszBuf;
	// 关闭INTERNET句柄
		VERIFY(::InternetCloseHandle(hHttpFile));
		VERIFY(::InternetCloseHandle(hConnect));
		VERIFY(::InternetCloseHandle(hSession));
	}
	





}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -