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

📄 smssenddlg.cpp

📁 利用C++程序实现掌上电脑发送信息的功能(已经测试成功)希望得到一个C#.net的信息发送程序
💻 CPP
字号:
// smssendDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "smssend.h"
#include "smssendDlg.h"
#include "configDlg.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#endif


CCriticalSection g_cs;

// CSmsSendDlg 对话框

CSmsSendDlg::CSmsSendDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSmsSendDlg::IDD, pParent)
	, m_smsContent(_T(""))
	, m_detiPhoneCode(_T("13522331696"))
	, m_smsCenter(_T(""))
	, m_StatusReport(true)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSmsSendDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);

	DDX_Text(pDX, IDC_EDIT2, m_smsContent);
	DDX_Text(pDX, IDC_NUMBER, m_detiPhoneCode);
	DDX_Check(pDX, IDC_CHECK1, m_StatusReport);
}

BEGIN_MESSAGE_MAP(CSmsSendDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
	ON_WM_SIZE()
#endif
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_BUTTON1, &CSmsSendDlg::OnBnClickedSend)
	ON_COMMAND(ID_CONFIG, &CSmsSendDlg::OnConfig)
	ON_EN_CHANGE(IDC_EDIT2, &CSmsSendDlg::OnEnChangeEdit2)
	ON_MESSAGE(WM_UPDATACHARNUMBER, &CSmsSendDlg::OnUpdateCharNumber)
END_MESSAGE_MAP()


// CSmsSendDlg 消息处理程序

BOOL CSmsSendDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	SHMENUBARINFO   mbi;  
	memset(&mbi,   0,   sizeof(SHMENUBARINFO));  
	mbi.cbSize =   sizeof(SHMENUBARINFO);  
	mbi.hwndParent =   this->m_hWnd;  
	mbi.dwFlags =   SHCMBF_HMENU;  
	mbi.nToolBarId =   IDR_MAINMENU;  
	mbi.hInstRes =   AfxGetInstanceHandle();  
	mbi.nBmpId =   0;        
	mbi.cBmpImages =   0;    
	SHCreateMenuBar(&mbi);   

	AfxBeginThread(CheckASCIIFunc, (LPVOID)this);

	if ( sms.Init() != 1)
	{
		AfxMessageBox(_T("初始化短信环境出错,请检查"));
	}

	if ( sms.GetCenterCode(m_smsCenter) != 1)
	{
		AfxMessageBox(_T("短信中心号码未设置或设置有误,请重新设置"));
	}

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CSmsSendDlg::OnBnClickedSend()
{
	// TODO: 在此添加控件通知处理程序代码

	g_cs.Lock();
	UpdateData(false);
	g_cs.Unlock();

	bool onlyASCII = true;
	LPTSTR lp = m_smsContent.GetBuffer(0);
	for (int i=0;i<m_smsContent.GetLength();i++)
	{
		if( !IsASCII(lp+i) )
		{
			onlyASCII = false;
			break;
		}
	}

	sms.Send(m_detiPhoneCode, m_smsContent, onlyASCII, m_StatusReport);
}

void CSmsSendDlg::OnConfig()
{
	// TODO: 在此添加命令处理程序代码
	configDlg config;
	if (m_smsCenter.IsEmpty())
	{
		config.m_centerCode = _T("13800210500");
	}
	else
	{

		config.m_centerCode = m_smsCenter;
	}


	INT_PTR nResponse = config.DoModal();
	if (nResponse == IDOK)
	{
		m_smsCenter = config.m_centerCode;
		// TODO: 在此处放置处理何时用“确定”来关闭
		//  对话框的代码
	}
	else
	{

	}
}

void CSmsSendDlg::OnEnChangeEdit2()
{
	// TODO:  如果该控件是 RICHEDIT 控件,则它将不会
	// 发送该通知,除非重写 CDialog::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask(),
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

	// TODO:  在此添加控件通知处理程序代码

	g_cs.Lock();
	GetDlgItemText(IDC_SMSCONTENT, m_smsContent);
	g_cs.Unlock();
}

bool CSmsSendDlg::IsASCII(const PTSTR lp)
{
	BYTE * character = (BYTE *)lp;
	if ( *character >0 && *character<128 && *(character+1) ==0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

UINT CSmsSendDlg::CheckASCIIFunc(LPVOID pParam)
{
	CSmsSendDlg * pDlg = (CSmsSendDlg *)pParam;

	static int lastNumber = -1;
	PTSTR lp;
	int charNumber = -1;

	while (true)
	{
		g_cs.Lock();
		charNumber = pDlg->m_smsContent.GetLength();

		if (charNumber == lastNumber)
		{
			g_cs.Unlock();
		}
		else
		{
			lp = new TCHAR[charNumber];
			CopyMemory(lp, pDlg->m_smsContent.GetBuffer(charNumber), charNumber * sizeof(TCHAR));
			g_cs.Unlock();

			bool onlyASCII = true;
			for (int i=0;i<charNumber;i++)
			{
				if( !IsASCII(lp+i) )
				{
					onlyASCII = false;
					break;
				}
			}
			delete lp;

			::PostMessage(pDlg->GetSafeHwnd(), WM_UPDATACHARNUMBER, (WPARAM)onlyASCII, (LPARAM)charNumber);

			lastNumber = charNumber;
		}

		Sleep(300);
	}
	return 0;
}


LRESULT CSmsSendDlg::OnUpdateCharNumber(WPARAM wParam, LPARAM lParam)
{
	bool onlyASCII = (bool) wParam;
	int charNumber = (int) lParam;

	CString currentChar;
	currentChar.Format(_T("%d/%d %s文 %d条"), charNumber, onlyASCII?160:70, onlyASCII?_T("英"):_T("中"), onlyASCII?charNumber/160 +1 :charNumber/70 + 1);

	GetDlgItem(IDC_CHARNUMBER)->SetWindowText((LPCTSTR)currentChar);

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -