⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testdlg.cpp

📁 模拟手机源程序,做短信系统(源码)
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// 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 + -