📄 testdlg.cpp
字号:
// TestDlg.cpp : implementation file
//
#include "stdafx.h"
#pragma warning(disable: 4786 )
#include <stdio.h>
#include "Test.h"
#include "TestDlg.h"
#include "WSocket.h"
#include <iostream>
#include <map>
#include <string>
#define INIFILE ".\\cell.ini"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "PhoneBookDlg.h"
#include "CommUseDlg.h"
#include <afxtempl.h>
CArray <CString , CString&> g_arrstrPhone;
//求中英文混合串的Unicode长度
int CountMixStrLen(char *szSourceStr)
{
int nCountlen = 0;
for(unsigned int i=0 ; i<strlen(szSourceStr) ; )
{
if(szSourceStr[i]<0x00)
i = i + 2;
else
i++;
nCountlen++;
}
return nCountlen;
}
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_SEPARATOR,
ID_SEPARATOR,
ID_SEPARATOR
};
typedef std::multimap<std::string, tSSBINFO> SSBINFO_MAP;
SSBINFO_MAP SSBINFOContainer;
SSBINFO_MAP::iterator INFOPointer;
typedef std::map<std::string, SSB_SOCKET> SOCKET_MAP;
SOCKET_MAP SOCKETContainer;
SOCKET_MAP::iterator SOCKETPointer;
//######################################################################
//宏定义
#define MAX_MSGINTOFILE_LEN 1024 //日志记录缓冲区
//######################################################################
//######################################################################
//全局变量
CRITICAL_SECTION g_CriticalWriteLog; //日志记录同步内核对象
//######################################################################
//######################################################################
//日志记录函数
// io:日志类型(1-发送;2-接收)
//######################################################################
void g_WriteLog(char* szLogInfo , int io)
{
CFile file;
CString strFileName("PhotoLog.txt");
char szTmp[MAX_MSGINTOFILE_LEN+1];
CTime time = CTime::GetCurrentTime();
//------------------------------------------------------------------
//打开日志文件
if(!file.Open(strFileName ,
CFile::typeBinary |
CFile::shareDenyNone |
CFile::modeWrite |
CFile::modeNoTruncate |
CFile::modeCreate ,
NULL))
{
return;
}
//------------------------------------------------------------------
//------------------------------------------------------------------
//写入日志文件
memset(szTmp , 0 , sizeof(szTmp));
if(io == 1)
{
sprintf(szTmp ,
"%04d:%02d:%02d-%02d:%02d:%02d %s %s\r\n" ,
time.GetYear() ,
time.GetMonth() ,
time.GetDay() ,
time.GetHour() ,
time.GetMinute() ,
time.GetSecond() ,
"[发送]" ,
szLogInfo);
}
else
{
sprintf(szTmp ,
"%04d:%02d:%02d-%02d:%02d:%02d %s %s\r\n" ,
time.GetYear() ,
time.GetMonth() ,
time.GetDay() ,
time.GetHour() ,
time.GetMinute() ,
time.GetSecond() ,
"[接收]" ,
szLogInfo);
}
file.SeekToEnd();
file.Write(szTmp , strlen(szTmp));
//------------------------------------------------------------------
//------------------------------------------------------------------
//关闭日志文件
file.Close();
//------------------------------------------------------------------
}
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTestDlg dialog
//UNICODE ==> string
void UnicodeToANSY(char* szMsg,WORD& wMsgLen)
{
unsigned short *p = (unsigned short *)szMsg;
int Msg_Length=wMsgLen;
for(int i=0; i < wMsgLen/2; i++,p++)
*p = ntohs(*p);
int length = WideCharToMultiByte(CP_ACP, 0, (WCHAR *)szMsg, wMsgLen/2, NULL, 0,NULL,NULL);
char szMsgContent[512];
ZeroMemory(szMsgContent,sizeof(szMsgContent));
WideCharToMultiByte(CP_ACP, 0, (WCHAR *)szMsg, wMsgLen/2, szMsgContent, length,NULL,NULL);
wMsgLen=length;
strcpy(szMsg,szMsgContent);
}
CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestDlg)
m_nAmount = 1;
m_SimNo = _T("");
m_Msg = _T("");
m_csDesNum = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_dwSequenceID = 0;
m_nAlarmInterval =20;
m_nAlarmTimes =10;
pWSocket =NULL;
command_count_send=0;
command_count_rec=0;
lt_count_send=0;
lt_count_rec=0;
//初始化同步内核对象
InitializeCriticalSection(&g_CriticalWriteLog);
}
CTestDlg::~CTestDlg()
{
//删除同步内核对象
DeleteCriticalSection(&g_CriticalWriteLog);
}
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestDlg)
DDX_Control(pDX, IDC_LIST4, m_list_new);
DDX_Control(pDX, IDC_EDIT3, m_ctrlDesNum);
DDX_Control(pDX, IDC_BUTALARM, m_btnAlarm);
DDX_Control(pDX, IDC_BUTLOGIN, m_btnLogin);
DDX_Control(pDX, IDC_LIST1, m_list_ctl);
DDX_Text(pDX, IDC_EDIT2, m_nAmount);
DDX_Text(pDX, IDC_EDIT1, m_SimNo);
DDV_MaxChars(pDX, m_SimNo, 21);
DDX_Text(pDX, IDC_SHORTMESSAGE, m_Msg);
DDX_Text(pDX, IDC_EDIT3, m_csDesNum);
DDV_MaxChars(pDX, m_csDesNum, 21);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
//{{AFX_MSG_MAP(CTestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTLOGIN, OnLogin)
ON_BN_CLICKED(IDC_BUTALARM, OnAlarm)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_SEND, OnSend)
ON_BN_CLICKED(IDC_CLEARLIST, OnClearlist)
ON_LBN_DBLCLK(IDC_LIST1, OnDblclkList1)
ON_BN_CLICKED(IDC_PHONEBOOK, OnPhonebook)
ON_BN_CLICKED(IDC_WHPHONEBOOK, OnWhPhoneBook)
ON_BN_CLICKED(IDC_COMMUSE, OnCommUse)
ON_BN_CLICKED(IDC_LOOKLOGIN, OnLookLogin)
ON_WM_KEYDOWN()
ON_NOTIFY(NM_DBLCLK, IDC_LIST4, OnDblclkList4)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTestDlg message handlers
BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
if (!m_wndStatusBar.Create(this,WS_CHILD|WS_VISIBLE|WS_BORDER) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
m_wndStatusBar.SetPaneText(0,"指令发送数:"+m_state,TRUE);
m_wndStatusBar.SetPaneText(0,"指令发送数: 0",TRUE);
m_wndStatusBar.SetPaneText(1,"指令接收数: 0",TRUE);
m_wndStatusBar.SetPaneText(2,"聊天发送数: 0",TRUE);
m_wndStatusBar.SetPaneText(3,"聊天接收数: 0",TRUE);
// give first status bar pane a border
UINT nID,nStyle;
int nWidth;
m_wndStatusBar.GetPaneInfo(0, nID, nStyle, nWidth) ;
m_wndStatusBar.SetPaneInfo(0, nID, SBPS_STRETCH, nWidth) ;
CRect rect;
GetDlgItem(IDC_STATUSBAR_STATIC)->GetWindowRect(&rect);
ScreenToClient(&rect);
m_wndStatusBar.MoveWindow(&rect);
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
SetTimer(1, 1000, NULL);
ReadRegister();
ReadData();
INFOPointer=SSBINFOContainer.begin();
//注册热键
RegisterHotKey(m_hWnd , 1001 , MOD_CONTROL , 'Q');
RegisterHotKey(m_hWnd , 1002 , MOD_CONTROL , 'S');
//----------------------------------------------------------
//读取目的代码列表
CStdioFile file;
if(!file.Open("DestCode.dcl" , CFile::modeCreate|CFile::modeNoTruncate|CFile::shareDenyNone|CFile::modeRead|CFile::typeText))
return FALSE;
char szBuf[100];
char szDesNum[50];
while(file.ReadString((LPTSTR)szBuf , sizeof(szBuf)-1))
{
sscanf(szBuf , "%s\r\n" , szDesNum);
m_ctrlDesNum.AddString((LPCSTR)szDesNum);
}
file.Close();
//----------------------------------------------------------
CImageList* m_pImageList;
m_pImageList = new CImageList;
m_hImageList = m_pImageList->GetSafeHandle();
m_pImageList->Attach(m_hImageList);
m_pImageList->Create(IDB_BITMAP1 , 16 , 1 , RGB(255,255,255));
m_list_new.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_list_new.SetImageList(m_pImageList , LVSIL_SMALL);
m_list_new.InsertColumn(0,"标志",LVCFMT_CENTER,100,-1);
m_list_new.InsertColumn(1,"时间",LVCFMT_CENTER,100,-1);
m_list_new.InsertColumn(2,"发送方",LVCFMT_CENTER,100,-1);
m_list_new.InsertColumn(3,"接收方",LVCFMT_CENTER,100,-1);
m_list_new.InsertColumn(4,"信息内容",LVCFMT_LEFT,1500,-1);
return TRUE; // return TRUE unless you set the focus to a control
}
void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -