📄 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 );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -