www.pudn.com > 手机短信二次开发接口.zip > DemoNkiDllDlg.cpp


// DemoNkiDllDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "DemoNkiDll.h" 
#include "DemoNkiDllDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
 
#include "NkiDll/NkiDll.h" 
 
///////////////////////////////////////////////////////////////////////////// 
// 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() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDemoNkiDllDlg dialog 
 
CDemoNkiDllDlg::CDemoNkiDllDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CDemoNkiDllDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CDemoNkiDllDlg) 
	//}}AFX_DATA_INIT 
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
 
	m_bConnect = false;   //尚未连接 
} 
 
void CDemoNkiDllDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CDemoNkiDllDlg) 
	DDX_Control(pDX, IDC_ASYN, m_B_Asyn); 
	DDX_Control(pDX, IDC_HANDFREE, m_B_HandFree); 
	DDX_Control(pDX, IDC_REPORT, m_B_Report); 
	DDX_Control(pDX, IDC_FILENAME, m_E_FileName); 
	DDX_Control(pDX, IDC_PORT, m_L_Port); 
	DDX_Control(pDX, IDC_MOBILE, m_L_Mobile); 
	DDX_Control(pDX, IDC_CONNECTTYPE, m_L_ConnectType); 
	DDX_Control(pDX, IDC_CONNECT, m_B_Connect); 
	DDX_Control(pDX, IDC_SMCA, m_E_Smca); 
	DDX_Control(pDX, IDC_NUM, m_E_No); 
	DDX_Control(pDX, IDC_MSG, m_E_Msg); 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CDemoNkiDllDlg, CDialog) 
	//{{AFX_MSG_MAP(CDemoNkiDllDlg) 
	ON_WM_SYSCOMMAND() 
	ON_WM_PAINT() 
	ON_WM_QUERYDRAGICON() 
	ON_BN_CLICKED(IDC_CONNECT, OnConnect) 
	ON_BN_CLICKED(IDC_SEND, OnSend) 
	ON_BN_CLICKED(IDC_DELETE, OnDelete) 
	ON_BN_CLICKED(IDC_GET, OnGet) 
	ON_BN_CLICKED(IDC_SMSNUM, OnSmsnum) 
	ON_BN_CLICKED(IDC_RECVNUM, OnRecvnum) 
	ON_BN_CLICKED(IDC_READSIM, OnReadsim) 
	ON_BN_CLICKED(IDC_CLEARSIM, OnClearsim) 
	ON_BN_CLICKED(IDC_GETIMEI, OnGetimei) 
	//}}AFX_MSG_MAP 
	ON_MESSAGE( SMS_SUB  , On_Sms_Sub ) 
	ON_MESSAGE( SMS_RECV , On_Sms_Recv ) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDemoNkiDllDlg message handlers 
 
BOOL CDemoNkiDllDlg::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); 
		} 
	} 
 
	// 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 
 
	CButton *  pButton = (CButton *)GetDlgItem( IDC_MSG_TXT ); 
	pButton->SetCheck(true); 
 
 
	m_E_Smca.SetWindowText( "+8613800200500" ); 
	m_E_No.SetWindowText( "139" ); 
	m_E_Msg.SetWindowText("欢迎访问http://www.mobset.com"); 
 
	m_L_Mobile.SetCurSel(0); 
	m_L_ConnectType.SetCurSel(0); 
	m_L_Port.SetCurSel(0); 
	 
	return TRUE;  // return TRUE  unless you set the focus to a control 
} 
 
void CDemoNkiDllDlg::OnSysCommand(UINT nID, LPARAM lParam) 
{ 
	if ((nID & 0xFFF0) == IDM_ABOUTBOX) 
	{ 
		CAboutDlg dlgAbout; 
		dlgAbout.DoModal(); 
	} 
	else 
	{ 
		CDialog::OnSysCommand(nID, lParam); 
	} 
} 
 
// If you add a minimize button to your dialog, you will need the code below 
//  to draw the icon.  For MFC applications using the document/view model, 
//  this is automatically done for you by the framework. 
 
void CDemoNkiDllDlg::OnPaint()  
{ 
	if (IsIconic()) 
	{ 
		CPaintDC dc(this); // device context for painting 
 
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); 
 
		// Center icon in client rectangle 
		int cxIcon = GetSystemMetrics(SM_CXICON); 
		int cyIcon = GetSystemMetrics(SM_CYICON); 
		CRect rect; 
		GetClientRect(&rect); 
		int x = (rect.Width() - cxIcon + 1) / 2; 
		int y = (rect.Height() - cyIcon + 1) / 2; 
 
		// Draw the icon 
		dc.DrawIcon(x, y, m_hIcon); 
	} 
	else 
	{ 
		CDialog::OnPaint(); 
	} 
} 
 
// The system calls this to obtain the cursor to display while the user drags 
//  the minimized window. 
HCURSOR CDemoNkiDllDlg::OnQueryDragIcon() 
{ 
	return (HCURSOR) m_hIcon; 
} 
 
void CDemoNkiDllDlg::OnConnect()  
{ 
    if ( m_bConnect )  //如果已经连接,则为断开 
	{ 
		Sms_Exit(); 
		m_B_Connect.SetWindowText( "连接(&C)" ); 
		m_bConnect = false; 
		return ; 
	} 
	char szSmca[32]; 
	char szBuf[256]; 
	m_E_Smca.GetWindowText( szSmca , sizeof(szSmca) ); 
	if ( lstrlen( szSmca ) <= 0 ) 
	{ 
		MessageBox( "短信中心输入错误!" , "错误" , MB_ICONWARNING|MB_OK ); 
		m_E_Smca.SetFocus(); 
		return ; 
	} 
 
	long lMobileType = m_L_Mobile     .GetCurSel() == 0 ? MOBILE_GSM    : MOBILE_NOKIA ;  //取得当前选择的手机类型 
	long lConnectType= m_L_ConnectType.GetCurSel() == 0 ? CONNECT_CABLE : CONNECT_IRDA ;  //取得当前选择的连接方式 
	long lPort       = m_L_Port.GetCurSel() + 1; //取得连接端口号 
 
	//初始化短信接口 
	int lRec = Sms_Init( lMobileType , lConnectType , lPort , 15 , szSmca , this->GetSafeHwnd() ); 
	if ( lRec<0 ) 
	{ 
		switch( lRec ) 
		{ 
		case -1: 
			 lstrcpy( szBuf , "初始化短信接口错误:连接串口失败!" ); 
			 break; 
		case -2: 
			 lstrcpy( szBuf , "初始化短信接口错误:初始化红外连接错误!" ); 
			 break; 
		case -3: 
			 lstrcpy( szBuf , "初始化短信接口错误:检测不到手机!" ); 
			 break; 
		case -4: 
			 lstrcpy( szBuf , "初始化短信接口错误:加密狗错误!" ); 
			 break; 
		default: 
			 lstrcpy( szBuf , "初始化短信接口错误:未知错误!" ); 
			 break; 
		} 
		MessageBox( szBuf , "错误" , MB_ICONWARNING|MB_OK ); 
		return ; 
	} 
	else 
	{ 
		char szName[32];  
		Sms_GetMobileName( szName );   //取手机名称 
		m_B_Connect.SetWindowText( "断开(&C)" ); 
		m_bConnect = true; 
		wsprintf( szBuf , "初始化短消息接口成功,手机型号为:%s!" , szName ); 
		MessageBox( szBuf ); 
		return ; 
	} 
} 
 
LONG CDemoNkiDllDlg::On_Sms_Sub( WPARAM wParam , LPARAM lParam ) 
{ 
	long lRec = wParam; 
	long lSeq = lParam; 
	char szBuf[256]; 
	if ( lRec >= 0 )  //发送成功或提交成功 
	{ 
		wsprintf( szBuf , "序列号为:%d的短信已成功发送,发送数目为:%d!" , lSeq,lRec ); 
		MessageBox( szBuf , "信息" , MB_OK ); 
		return 1; 
	} 
	else 
	{ 
		//发送失败 
		switch( lRec ) 
		{ 
		case -1: 
			 lstrcpy( szBuf , "发送失败,可能是短消息中心有错!" ); 
			 break; 
		case -2: 
			 lstrcpy( szBuf , "发送超时,可能是串口与手机的连接出错!" ); 
			 break; 
		case -3: 
			 lstrcpy( szBuf , "上次短信尚未发送完毕,暂不能发送!" ); 
			 break; 
		default: 
			 lstrcpy( szBuf , "发送失败,未知错误!" ); 
			 break; 
		} 
	} 
	MessageBox( szBuf , "错误" , MB_ICONWARNING|MB_OK ); 
	return 1; 
} 
 
LONG CDemoNkiDllDlg::On_Sms_Recv( WPARAM wParam , LPARAM lParam ) 
{ 
	//因为NkiDll是通过PostMessage来传消息的,所以必须尽快将原SMS_Recv的内容Copy过来 
	SMS_Recv * Sms = (SMS_Recv *)wParam; 
	char szBuf[512]; 
	wsprintf( szBuf , "你收到一短信,内容如下: \n短信中心: %s \n发送者  : %s\n发送时间: %s\n短信内容: %s "  \ 
					   , Sms->szSmsc , Sms->szSender , Sms->szTime , Sms->szMsg ); 
 
	AfxMessageBox( szBuf); 
	return 1; 
} 
 
void CDemoNkiDllDlg::OnSend()  
{ 
	if (!m_bConnect ) 
	{ 
		MessageBox( "尚未连接,请按连接!" ); 
		return; 
	} 
	char szNo[32]; 
	char szMsg[512]; 
	char szBuf[256]; 
	char szFile[256]; 
 
	BOOL bAsyn = m_B_Asyn.GetCheck(); 
 
	m_E_No  .GetWindowText( szNo   , sizeof( szNo ) ); 
	m_E_Msg .GetWindowText( szMsg  , sizeof(szMsg ) ); 
	m_E_FileName.GetWindowText( szFile , sizeof(szFile)); 
	if ( lstrlen( szNo ) <= 0 ) 
	{ 
		MessageBox( "发送目标号码输入错误!" , "错误" , MB_ICONWARNING|MB_OK ); 
		m_E_No.SetFocus(); 
		return ; 
	} 
	if ( lstrlen( szMsg ) <= 0 ) 
	{ 
		MessageBox( "发送内容不能不能为空!" , "错误" , MB_ICONWARNING|MB_OK ); 
		m_E_Msg.SetFocus(); 
		return ; 
	} 
 
 
	long lMsgType = 0; 
 
	CButton * pButton = (CButton *)GetDlgItem( IDC_MSG_PICT ); 
	if (pButton->GetCheck()) 
		lMsgType = SMARTSMS_NKI_PICT;   //增值短信类型为NOKIA图片短信 
	pButton = (CButton *)GetDlgItem( IDC_MSG_LOGO ); 
	if (pButton->GetCheck()) 
		lMsgType = SMARTSMS_NKI_LOGO;   //增值短信类型为NOKIA待机图片 
	pButton = (CButton *)GetDlgItem( IDC_MSG_CLI ); 
	if (pButton->GetCheck()) 
		lMsgType = SMARTSMS_NKI_CLI;   //增值短信类型为NOKIA分组图片 
	pButton = (CButton *)GetDlgItem( IDC_MSG_MIDI ); 
	if (pButton->GetCheck()) 
		lMsgType = SMARTSMS_NKI_MIDI;   //增值短信类型为NOKIA铃声消息 
	 
	if ( lMsgType == 0 )   //发送文字消息 
	{ 
		int lRec = Sms_Send( szNo , szMsg , m_B_Report.GetCheck() , m_B_HandFree.GetCheck() , bAsyn ); 
		if ( lRec >= 0 )  //发送成功或提交成功 
		{ 
			if ( bAsyn)  
				wsprintf( szBuf , "短信已成功提交,发送序列号为:%d请等待返回发送结果!" , lRec); 
			else 
				wsprintf( szBuf , "短信已成功发送,发送数目为:%d!" , lRec ); 
			MessageBox( szBuf , "信息" , MB_OK ); 
			return ; 
		} 
		else 
		{ 
			//发送失败 
			switch( lRec ) 
			{ 
			case -1: 
				lstrcpy( szBuf , "发送失败,可能是短消息中心有错!" ); 
				break; 
			case -2: 
				lstrcpy( szBuf , "发送超时,可能是串口与手机的连接出错!" ); 
				break; 
			case -3: 
				lstrcpy( szBuf , "上次短信尚未发送完毕,暂不能发送!" ); 
				break; 
			case -4: 
				lstrcpy( szBuf , "接口还没初始化,请先调用Sms_Init!" ); 
				break; 
			default: 
				lstrcpy( szBuf , "发送失败,未知错误!" ); 
				break; 
			} 
		} 
	} 
	else   //发送增值短消息 
	{ 
		int lRec = Sms_SendSmart( szNo , szFile , szMsg , lMsgType , bAsyn ); 
		if ( lRec >= 0 )  //发送成功或提交成功 
		{ 
			if ( bAsyn)  
				wsprintf( szBuf , "短信已成功提交,发送序列号为:%d请等待返回发送结果!" , lRec); 
			else 
				wsprintf( szBuf , "短信已成功发送,发送数目为:%d!" , lRec ); 
			MessageBox( szBuf , "信息" , MB_OK ); 
			return ; 
		} 
		else 
		{ 
			//发送失败 
 
			switch( lRec ) 
			{ 
			case -1: 
				lstrcpy( szBuf , "发送失败,可能是短消息中心有错!" ); 
				break; 
			case -2: 
				lstrcpy( szBuf , "发送超时,可能是串口与手机的连接出错!" ); 
				break; 
			case -3: 
				lstrcpy( szBuf , "上次短信尚未发送完毕,暂不能发送!" ); 
				break; 
			case -4: 
				lstrcpy( szBuf , "接口还没初始化,请先调用Sms_Init!" ); 
				break; 
			case -6: 
				lstrcpy( szBuf , "试用版没有发送Logo与铃声的功能!" ); 
				break; 
			case -7: 
				lstrcpy( szBuf , "增值短信类型不正确!" ); 
				break; 
			case -8: 
				lstrcpy( szBuf , "打开图像文件错误!" ); 
				break; 
			case -9: 
				lstrcpy( szBuf , "图像太大,现在只能处理宽或高小于128像点的图像!" ); 
				break; 
			case -10: 
				lstrcpy( szBuf , "图像颜色太高,现在只能处理单色位图!" ); 
				break; 
			case -11: 
				lstrcpy( szBuf , "取位图数据出错!" ); 
				break; 
			case -12: 
				lstrcpy( szBuf , "生成铃声失败,请检查文件!" ); 
				break; 
			case -13: 
				lstrcpy( szBuf , "发送的图片太大,正常值是78*14!" ); 
				break; 
			default: 
				lstrcpy( szBuf , "发送失败,未知错误!" ); 
				break; 
			} 
		} 
	} 
	MessageBox( szBuf , "错误" , MB_ICONWARNING|MB_OK ); 
} 
 
void CDemoNkiDllDlg::OnDelete()  
{ 
	long lRet = Sms_Delete(1);  //删除第一条记录 
	if ( lRet == 0 ) 
		MessageBox( "删除第一条短消息记录成功!" ); 
	else 
	{ 
		char Buf[256]; 
		wsprintf( Buf , "删除短消息记录失败,错误号为:%d" , lRet ); 
		MessageBox( Buf ); 
	} 
} 
 
void CDemoNkiDllDlg::OnGet()  
{ 
	SMS_Recv Sms; 
	long l = Sms_Get(&Sms); 
	char szBuf[512]; 
	if ( l>=0 ) 
	{ 
		wsprintf( szBuf , "取到一短信,内容如下: \n短信中心: %s \n发送者  : %s\n发送时间: %s\n短信内容: %s \n队列剩余短信数:%d"  \ 
			, Sms.szSmsc , Sms.szSender , Sms.szTime , Sms.szMsg , l); 
	} 
	else 
	{ 
		wsprintf(szBuf , "取短消息失败:短信队列为空!" ); 
	} 
	MessageBox(szBuf , "信息" , MB_OK ); 
 
} 
 
void CDemoNkiDllDlg::OnSmsnum()  
{ 
	char Buf[256]; 
	wsprintf( Buf , "此手机SIM卡的短信容量为:%d!" , Sms_GetSimNum() ); 
	MessageBox(Buf , "信息" , MB_OK ); 
} 
 
void CDemoNkiDllDlg::OnRecvnum()  
{ 
	char Buf[256]; 
	wsprintf( Buf , "接收队列中的短信数量为:%d!" , Sms_GetRecvNum() ); 
	MessageBox(Buf , "信息" , MB_OK ); 
} 
 
void CDemoNkiDllDlg::OnReadsim()  
{ 
	long lRet = Sms_GetSimSms();               //取Sim卡短消息 
 
	char szMsg[64]; 
	switch( lRet ) 
	{ 
	case -2: 
		 lstrcpy( szMsg , "取Sim卡短消息失败:通讯超时!" ); 
		 break; 
	case -4: 
		 lstrcpy( szMsg , "取Sim卡短消息失败:接口还没初始化,请调用Sms_Init!" ); 
		 break; 
	default: 
		 wsprintf( szMsg , "取Sim卡短消息成功,取回来记录数为:%d,已贮存于接收队列!" , lRet ); 
		 break; 
	} 
	MessageBox(szMsg , "信息" , MB_OK ); 
} 
 
void CDemoNkiDllDlg::OnClearsim()  
{ 
	long lRet = Sms_ClearSim();               //清空Sim卡短消息 
 
	char szMsg[64]; 
	switch( lRet ) 
	{ 
	case 0: 
		 lstrcpy( szMsg , "已成功清空Sim卡短消息!" ); 
		 break; 
	case -2: 
		 lstrcpy( szMsg , "清空Sim卡短消息失败:通讯超时!" ); 
		 break; 
	case -4: 
		 lstrcpy( szMsg , "清空Sim卡短消息失败:接口还没初始化,请调用Sms_Init!" ); 
		 break; 
	default: 
		 lstrcpy( szMsg , "未知错误" ); 
		 break; 
	} 
	MessageBox(szMsg , "信息" , MB_OK ); 
} 
 
void CDemoNkiDllDlg::OnGetimei()  
{ 
	char szMsg[64]; 
	char szIMEI[32]; 
	long lRet = Sms_GetIMEI(szIMEI);  //取IMEI 
	if ( lRet == 0 ) 
	{ 
		wsprintf( szMsg , "取IMEI成功,IMEI为:%s" , szIMEI ); 
		MessageBox( szMsg ); 
	} 
	else 
	{ 
		wsprintf( szMsg , "取IMEI失败,错误号为:%d" , lRet ); 
		MessageBox( szMsg ); 
	} 
}