MainFrm.cpp
上传用户:hcymiss
上传日期:2009-09-17
资源大小:121k
文件大小:5k
源码类别:

手机短信编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "SmsTest.h"
  5. #include "MainFrm.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CMainFrame
  13. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  14. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  15. //{{AFX_MSG_MAP(CMainFrame)
  16. ON_WM_CREATE()
  17. ON_BN_CLICKED(IDC_SEND, OnSend)
  18. //}}AFX_MSG_MAP
  19. END_MESSAGE_MAP()
  20. static UINT indicators[] =
  21. {
  22. ID_SEPARATOR,           // status line indicator
  23. ID_INDICATOR_CAPS,
  24. ID_INDICATOR_NUM,
  25. ID_INDICATOR_SCRL,
  26. };
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CMainFrame construction/destruction
  29. CMainFrame::CMainFrame()
  30. {
  31. // TODO: add member initialization code here
  32. }
  33. CMainFrame::~CMainFrame()
  34. {
  35. }
  36. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  37. {
  38. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  39. return -1;
  40. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  41. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  42. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  43. {
  44. TRACE0("Failed to create toolbarn");
  45. return -1;      // fail to create
  46. }
  47. if (!m_wndStatusBar.Create(this) ||
  48. !m_wndStatusBar.SetIndicators(indicators,
  49.   sizeof(indicators)/sizeof(UINT)))
  50. {
  51. TRACE0("Failed to create status barn");
  52. return -1;      // fail to create
  53. }
  54. if (!m_wndDialogBar.Create(this, IDD_SEND_SM,
  55.       CBRS_BOTTOM|CBRS_TOOLTIPS|CBRS_FLYBY, IDD_SEND_SM))
  56. {
  57. TRACE0("Failed to create dialog barn");
  58. return -1;      // fail to create
  59. }
  60. // TODO: Delete these three lines if you don't want the toolbar to
  61. //  be dockable
  62. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  63. m_wndDialogBar.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
  64. EnableDocking(CBRS_ALIGN_ANY);
  65. DockControlBar(&m_wndToolBar);
  66. DockControlBar(&m_wndDialogBar);
  67. return 0;
  68. }
  69. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  70. {
  71. if( !CFrameWnd::PreCreateWindow(cs) )
  72. return FALSE;
  73. // TODO: Modify the Window class or styles here by modifying
  74. //  the CREATESTRUCT cs
  75. return TRUE;
  76. }
  77. /////////////////////////////////////////////////////////////////////////////
  78. // CMainFrame diagnostics
  79. #ifdef _DEBUG
  80. void CMainFrame::AssertValid() const
  81. {
  82. CFrameWnd::AssertValid();
  83. }
  84. void CMainFrame::Dump(CDumpContext& dc) const
  85. {
  86. CFrameWnd::Dump(dc);
  87. }
  88. #endif //_DEBUG
  89. /////////////////////////////////////////////////////////////////////////////
  90. // CMainFrame message handlers
  91. void CMainFrame::OnSend() 
  92. {
  93. // TODO: Add your control notification handler code here
  94. CComboBox* pNumberWnd=(CComboBox*)m_wndDialogBar.GetDlgItem(IDC_NUMBER);
  95. CComboBox* pContentWnd=(CComboBox*)m_wndDialogBar.GetDlgItem(IDC_CONTENT);
  96. CString strSmsc;
  97. CString strNumber;
  98. CString strContent;
  99. strSmsc = theApp.m_strSmsc;
  100. pNumberWnd->GetWindowText(strNumber);
  101. pContentWnd->GetWindowText(strContent);
  102. // 检查号码
  103. if(strNumber.GetLength() < 11)
  104. {
  105. AfxMessageBox("请输入正确的号码!");
  106. pNumberWnd->SetFocus();
  107. pNumberWnd->SetEditSel(-1, 0);
  108. return;
  109. }
  110. // 检查短消息内容是否空,或者超长
  111. CString strUnicode;
  112. WCHAR wchar[1024];
  113. int nCount = ::MultiByteToWideChar(CP_ACP, 0, strContent, -1, wchar, 1024);
  114. if(nCount <= 1)
  115. {
  116. AfxMessageBox("请输入消息内容!");
  117. pContentWnd->SetFocus();
  118. pContentWnd->SetEditSel(-1, 0);
  119. return;
  120. }
  121. else if(nCount > 70) // 我们决定全部用UCS2编码,最大70个字符(半角/全角)
  122. {
  123. AfxMessageBox("消息内容太长,无法发送!");
  124. pContentWnd->SetFocus();
  125. pContentWnd->SetEditSel(-1, 0);
  126. return;
  127. }
  128. if(AfxMessageBox("确定发送吗?", MB_YESNO) == IDYES)
  129. {
  130. SM_PARAM SmParam;
  131. memset(&SmParam, 0, sizeof(SM_PARAM));
  132. // 去掉号码前的"+"
  133. if(strSmsc[0] == '+')  strSmsc = strSmsc.Mid(1);
  134. if(strNumber[0] == '+')  strNumber = strNumber.Mid(1);
  135. // 在号码前加"86"
  136. if(strSmsc.Left(2) != "86")  strSmsc = "86" + strSmsc;
  137. if(strNumber.Left(2) != "86")  strNumber = "86" + strNumber;
  138. // 填充短消息结构
  139. strcpy(SmParam.SCA, strSmsc);
  140. strcpy(SmParam.TPA, strNumber);
  141. strcpy(SmParam.TP_UD, strContent);
  142. SmParam.TP_PID = 0;
  143. SmParam.TP_DCS = GSM_UCS2;
  144. // 发送短消息
  145. theApp.m_pSmsTraffic->PutSendMessage(&SmParam);
  146. // 列表中加入新串
  147. if(pNumberWnd->FindStringExact(-1, strNumber)<0)  pNumberWnd->InsertString(0, strNumber);
  148. if(pContentWnd->FindStringExact(-1, strContent)<0)  pContentWnd->InsertString(0, strContent);
  149. }
  150. pContentWnd->SetFocus();
  151. pContentWnd->SetEditSel(-1, 0);
  152. }