📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "Demo03.h"
#include "MainFrm.h"
//增加Demo03View的引用声明
#include "Demo03View.h"
//增加cUrlDlg的引用声明
#include "UrlDlg.h"
//增加CDomainDaoSet的引用声明
#include "DomainDaoSet.h"
//增加CLogDaoSet的引用声明
#include "LogDaoSet.h"
//增加LogDlg的引用声明
#include "LogDlg.h"
//增加图片处理类的引用声明
#include "SaveScrJpg.h"
//增加LogSetDlg的引用声明
#include "UrlSetDlg.h"
//增加CheckSetDlg的引用声明
#include "CheckSetDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(ID_MENU_BROWSER, OnMenuBrowser)
ON_COMMAND(ID_MENU_LOG, OnMenuLog)
ON_COMMAND(ID_MENU_URL_SET, OnMenuUrlSet)
//手动添加的两条消息映射
ON_MESSAGE(WM_SET_CHECK_URL,OnSetCheckPic)
ON_MESSAGE(WM_SET_CHECK_PIC,OnSetCheckUrl)
ON_COMMAND(ID_MENU_CHECK_SET, OnMenuCheckSet)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
m_bIsCheckUrl = TRUE;
m_bIsCheckUrl = TRUE;
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
/*
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
*/
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
//定义相关变量
HKEY hDir = 0 ;
BYTE strStatus[10];
DWORD dwType = REG_SZ;
DWORD dwSize = sizeof(strStatus);
//初始化strStatus
memset(strStatus,0,dwSize);
//打开注册表
if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Demo03",
NULL,
KEY_ALL_ACCESS,
&hDir) == ERROR_SUCCESS)
{
//如果打开注册表项成功,获取键值,赋初值
if( RegQueryValueEx( hDir,
"bIsCheckUrl",
NULL,
&dwType,
strStatus,
&dwSize ) == ERROR_SUCCESS )
{
//memcpy(strNum2,strNum,sizeof(strNum2));
m_bIsCheckUrl = (BOOL)atoi((char *)strStatus);
}
else
{
m_bIsCheckUrl = TRUE; //默认为启动检测
}
if( RegQueryValueEx( hDir,
"bIsCheckPic",
NULL,
&dwType,
strStatus,
&dwSize ) == ERROR_SUCCESS )
{
//memcpy(strNum2,strNum,sizeof(strNum2));
m_bIsCheckPic = (BOOL)atoi((char *)strStatus);
}
else
{
m_bIsCheckPic = TRUE; //默认为启动检测
}
RegCloseKey(hDir);
}
else
{
//如果打开注册表项失败,给默认值.
m_bIsCheckUrl = TRUE;
m_bIsCheckPic = TRUE;
}
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnMenuBrowser()
{
// TODO: Add your command handler code here
CUrlDlg m_UrlDlg;
//弹出网址对话框,取消则退出
if(m_UrlDlg.DoModal() != IDOK)
return;
//---------确定则显示该页面
//如果当前不进行网址检测,则显示用户申请的网页,后面的查询不再进行
if(!m_bIsCheckUrl)
{
m_pHtmlView->GoUrl(m_UrlDlg.m_strUrl);
return;
}
//确定则进行网址解析
char szURL[255];
//将用户输入的网址复制到szURL中
memcpy(szURL,m_UrlDlg.m_strUrl.operator LPCTSTR(),sizeof(char[255]));
//末尾置零避免出事
szURL[254] = '\0';
//解析网址为域名
GetValidIPAddr(szURL);
//判断网址是否在数据库中存在
CDomainDaoSet m_DomainDaoSet;
CString m_strSql;
BOOL m_Flag = FALSE;
try
{
if(m_DomainDaoSet.IsOpen())
m_DomainDaoSet.Close();
//标准的SQL语句
m_strSql.Format("select * from pDomain where DomainName = '%s'",szURL);
m_DomainDaoSet.Open(AFX_DAO_USE_DEFAULT_TYPE,m_strSql,0);
//输出匹配上查询条件用户记录,直到记录为空
if(!m_DomainDaoSet.IsEOF())
m_Flag = TRUE;
//关闭记录集
if(m_DomainDaoSet.IsOpen())
m_DomainDaoSet.Close();
}
//意外捕获
catch(CDaoException*e)
{
e->ReportError ();
//e->Delete ();
return;
}
if(m_Flag)
{
//保存屏幕
//SaveScrJpg m_PicSave;
//m_PicSave.SaveScreen(0);
//如果当前保存屏幕,则进行相应操作屏幕
if(m_bIsCheckUrl)
{
SaveScrJpg m_PicSave;
m_PicSave.SaveScreen(0);
}
CLogDaoSet m_LogDaoSet;
if(m_DomainDaoSet.IsOpen())
m_DomainDaoSet.Close();
//此处我们预留LogType 0,1为程序启动退出,2为非法网址访问记录
try
{
//m_strSql.Format("Insert Into pLog(LogType,LogInfo,LogPicFlag) values(2,'%s',0)",szURL);
m_LogDaoSet.Open(AFX_DAO_USE_DEFAULT_TYPE,NULL,0);
m_LogDaoSet.AddNew();
//然后编辑该条记录的内容
m_LogDaoSet.m_LogType = 2;
m_LogDaoSet.m_LogInfo = szURL;
//m_LogDaoSet.m_LogPicFlag = 0;
//m_LogDaoSet.m_LogPicFlag = 1;
m_LogDaoSet.m_LogPicFlag = 0;
//如果当前保存屏幕,则进行相应操作屏幕
if(m_bIsCheckUrl)
{
//设定记录为:保存了图片;
m_LogDaoSet.m_LogPicFlag = 1;
//创建一个CFile来读取截屏文件内容
CFile m_PicFile;
//如果打开屏幕文件成功,
if(m_PicFile.Open("C:\\0.jpg",CFile::modeRead,NULL))
{
// m_LogDaoSet.m_LogPic.m_dwDataLength = m_PicFile.GetLength();
// m_PicFile.ReadHuge(m_LogDaoSet.m_LogPic.m_hData,m_PicFile.GetLength());
}
m_PicFile.Close();
}
//更新时,要判断当前是否能够进行更新操作
if(m_LogDaoSet.CanUpdate())
{
m_LogDaoSet.Update();
}
//关闭记录集
if(m_LogDaoSet.IsOpen())
m_LogDaoSet.Close();
}
catch(CDaoException*e)
{
e->ReportError ();
//e->Delete ();
return;
}
AfxMessageBox("您访问的网址不被允许!");
}
else
m_pHtmlView->GoUrl(m_UrlDlg.m_strUrl);
}
void CMainFrame::GetValidIPAddr(char *szIPAddress)
{
//以下解析,纯属算法问题,与数据库操作无关
//基本思想:将URL访问的http://头和www.去掉,剩下部分作为域名
//算法是否有效这里不需要深究
int i,nLength=strlen(szIPAddress);
int nPos=0;
for(i=0;i<nLength;i++)
szIPAddress[i]=tolower(szIPAddress[i]);
if(nLength>=7 && (strncmp("http://",szIPAddress,7)==0)){
nPos+=7;
nLength-=7;
}
if(nLength>=4 && (strncmp("www.",szIPAddress+nPos,4)==0)){
nPos+=4;
nLength-=4;
}
if(nPos!=0){
for(i=0;i<nLength;i++)
szIPAddress[i]=szIPAddress[i+nPos];
szIPAddress[nLength]=0;
}
char *c=strchr(szIPAddress,':');
if(c!=NULL)
*c=0;
c=strchr(szIPAddress,'/');
if(c!=NULL)
*c=0;
return;
}
void CMainFrame::OnMenuLog()
{
// TODO: Add your command handler code here
CLogDlg m_LogDlg;
m_LogDlg.DoModal();
}
void CMainFrame::OnMenuUrlSet()
{
// TODO: Add your command handler code here
CUrlSetDlg m_UrlSetDlg;
m_UrlSetDlg.DoModal();
}
void CMainFrame::OnSetCheckUrl(WPARAM wParam, LPARAM lParam)
{
m_bIsCheckUrl = (BOOL)wParam;
}
void CMainFrame::OnSetCheckPic(WPARAM wParam, LPARAM lParam)
{
m_bIsCheckUrl = (BOOL)wParam;
}
void CMainFrame::OnMenuCheckSet()
{
// TODO: Add your command handler code here
CCheckSetDlg m_CheckSetDlg;
m_CheckSetDlg.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -