📄 codedlg.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 + -