lyfzSMSAppDlg.cpp 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894
  1. // lyfzSMSAppDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "lyfzSMSApp.h"
  5. #include "lyfzSMSAppDlg.h"
  6. #include "DataManager.h"
  7. #include "PhoneNumImport.h"
  8. #include "AddContacts.h"
  9. #include "DataManager.h"
  10. #include "SendMsgLogDlg.h"
  11. #include "ExcelForODBC.h"
  12. #ifdef _DEBUG
  13. #define new DEBUG_NEW
  14. #endif
  15. #if USE_TRAYICON
  16. #define WM_MY_TRAY_NOTIFICATION WM_USER + 108
  17. const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(_T("lyfzSMSApp"));
  18. #endif
  19. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
  20. class CAboutDlg : public CDialog
  21. {
  22. public:
  23. CAboutDlg();
  24. // 对话框数据
  25. enum { IDD = IDD_ABOUTBOX };
  26. protected:
  27. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
  28. // 实现
  29. protected:
  30. DECLARE_MESSAGE_MAP()
  31. };
  32. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  33. {
  34. }
  35. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  36. {
  37. CDialog::DoDataExchange(pDX);
  38. }
  39. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  40. END_MESSAGE_MAP()
  41. // ClyfzSMSAppDlg 对话框
  42. #if USE_TRAYICON
  43. ClyfzSMSAppDlg::ClyfzSMSAppDlg(CWnd* pParent /*=NULL*/)
  44. : CDialog(ClyfzSMSAppDlg::IDD, pParent), m_trayIcon(IDR_MAINFRAME)
  45. , m_nCountNum(0)
  46. , m_strPhoneNums(_T(""))
  47. , m_strAccount(_T(""))
  48. , m_strPassWord(_T(""))
  49. , m_strContent(_T(""))
  50. , m_strTextCount(_T(""))
  51. #else
  52. ClyfzSMSAppDlg::ClyfzSMSAppDlg(CWnd* pParent /*=NULL*/)
  53. : CDialog(ClyfzSMSAppDlg::IDD, pParent)
  54. , m_nCountNum(0)
  55. , m_strPhoneNums(_T(""))
  56. , m_strAccount(_T(""))
  57. , m_strPassWord(_T(""))
  58. , m_strContent(_T(""))
  59. , m_strTextCount(_T(""))
  60. #endif
  61. {
  62. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  63. m_bAutoRuning = AfxGetApp()->GetProfileInt(_T("lyfzSMSApp"), _T("Autoruning"), 0);
  64. #if USE_TRAYICON
  65. m_isNotify = TRUE;
  66. m_bNoticeTray = TRUE;
  67. #endif
  68. }
  69. void ClyfzSMSAppDlg::DoDataExchange(CDataExchange* pDX)
  70. {
  71. CDialog::DoDataExchange(pDX);
  72. DDX_Text(pDX, IDC_PHONECOUNT, m_nCountNum);
  73. DDX_Control(pDX, IDC_PHONENUMBERS, m_NumEditCtrl);
  74. DDX_Control(pDX, IDC_USERINFOLIST, m_PhoneBook);
  75. DDX_Text(pDX, IDC_PHONENUMBERS, m_strPhoneNums);
  76. DDX_Text(pDX, IDC_EDIT_Account, m_strAccount);
  77. DDX_Text(pDX, IDC_EDIT_PWD, m_strPassWord);
  78. DDX_Text(pDX, IDC_EDIT_Contant, m_strContent);
  79. DDV_MaxChars(pDX, m_strContent, 390);
  80. }
  81. BEGIN_MESSAGE_MAP(ClyfzSMSAppDlg, CDialog)
  82. ON_WM_SYSCOMMAND()
  83. ON_WM_TIMER()
  84. ON_WM_PAINT()
  85. ON_WM_DESTROY()
  86. ON_WM_CLOSE()
  87. ON_WM_QUERYDRAGICON()
  88. #if USE_TRAYICON
  89. ON_MESSAGE(WM_MY_TRAY_NOTIFICATION, ClyfzSMSAppDlg::OnTrayNotification)
  90. ON_REGISTERED_MESSAGE(WM_TASKBARCREATED, ClyfzSMSAppDlg::OnTaskBarCreated)
  91. #endif
  92. ON_COMMAND(Menu_AutoRun, &ClyfzSMSAppDlg::OnAutorun)
  93. ON_COMMAND(Menu_Exit, &ClyfzSMSAppDlg::OnExit)
  94. //}}AFX_MSG_MAP
  95. ON_BN_CLICKED(IDC_ADDUSER_BTN, &ClyfzSMSAppDlg::OnBnClickedAdduserBtn)
  96. ON_BN_CLICKED(IDC_DELUSER_BTN, &ClyfzSMSAppDlg::OnBnClickedDeluserBtn)
  97. ON_BN_CLICKED(IDC_EXCELIMPORT_BTN, &ClyfzSMSAppDlg::OnBnClickedExcelimportBtn)
  98. ON_BN_CLICKED(IDC_PHONEIMPORT_BTN, &ClyfzSMSAppDlg::OnBnClickedPhoneimportBtn)
  99. ON_BN_CLICKED(IDC_SENDMESSAGE_BTN, &ClyfzSMSAppDlg::OnBnClickedSendmessageBtn)
  100. ON_BN_CLICKED(IDC_MESSAGELOG_BTN, &ClyfzSMSAppDlg::OnBnClickedMessagelogBtn)
  101. ON_NOTIFY(NM_CLICK, IDC_USERINFOLIST, &ClyfzSMSAppDlg::OnNMClickUserinfolist)
  102. ON_BN_CLICKED(IDC_SAVEPWD_CHECK, &ClyfzSMSAppDlg::OnBnClickedSavepwdCheck)
  103. END_MESSAGE_MAP()
  104. // ClyfzSMSAppDlg 消息处理程序
  105. BOOL ClyfzSMSAppDlg::OnInitDialog()
  106. {
  107. //SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_HIDEWINDOW);
  108. //ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);
  109. CDialog::OnInitDialog();
  110. // 将“关于...”菜单项添加到系统菜单中。
  111. // IDM_ABOUTBOX 必须在系统命令范围内。
  112. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  113. ASSERT(IDM_ABOUTBOX < 0xF000);
  114. CMenu* pSysMenu = GetSystemMenu(FALSE);
  115. if (pSysMenu != NULL)
  116. {
  117. BOOL bNameValid;
  118. CString strAboutMenu;
  119. bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
  120. ASSERT(bNameValid);
  121. if (!strAboutMenu.IsEmpty())
  122. {
  123. pSysMenu->AppendMenu(MF_SEPARATOR);
  124. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  125. }
  126. }
  127. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  128. // 执行此操作
  129. SetIcon(m_hIcon, TRUE); // 设置大图标
  130. SetIcon(m_hIcon, FALSE); // 设置小图标
  131. // TODO: 在此添加额外的初始化代码
  132. //初始化托盘
  133. InitTrayIcon();
  134. //登录帐号密码
  135. UpdateData();
  136. m_strAccount = g_szLoginAccount;
  137. m_strPassWord = g_szLoginPWD;
  138. g_IsSavePwd = g_IsSavePwd;
  139. ((CButton*)GetDlgItem(IDC_SAVEPWD_CHECK))->SetCheck(g_IsSavePwd);
  140. //初始化电话本
  141. m_PhoneBook.InsertColumn(0,_T("姓名"));
  142. m_PhoneBook.SetColumnWidth(0,58);
  143. m_PhoneBook.InsertColumn(1,_T("手机号码"));
  144. m_PhoneBook.SetColumnWidth(1,100);
  145. m_PhoneBook.SetExtendedStyle(m_PhoneBook.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
  146. //打开数据库
  147. CString strError = _T("");
  148. if(CDataManager::GetInstance()->OpenDataBase(g_szConnectAccess, _T(""), _T(""), strError) == S_FALSE)
  149. MessageBox(strError);
  150. //读取电话本
  151. CArray<CStringArray, CStringArray> arr;
  152. std::vector<CString> vFields;
  153. vFields.push_back(_T("name"));
  154. vFields.push_back(_T("phone"));
  155. CString strTableName = _T("contact");
  156. if(CDataManager::GetInstance()->Select(arr, strTableName, vFields) == -1)
  157. {
  158. MessageBox(_T("读取电话本失败"));
  159. return FALSE;
  160. }
  161. for(int i=0; i<arr.GetSize(); i++)
  162. {
  163. int nRow = m_PhoneBook.InsertItem(i, arr.ElementAt(i).ElementAt(0));
  164. m_PhoneBook.SetItemText(nRow, 1, arr.ElementAt(i).ElementAt(1)); //插入列
  165. }
  166. SetTimer(1, 60*1000, NULL);
  167. SetTimer(2, 1*1000, NULL);
  168. UpdateData(FALSE);
  169. return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
  170. }
  171. void ClyfzSMSAppDlg::OnSysCommand(UINT nID, LPARAM lParam)
  172. {
  173. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  174. {
  175. CAboutDlg dlgAbout;
  176. dlgAbout.DoModal();
  177. }
  178. else
  179. {
  180. CDialog::OnSysCommand(nID, lParam);
  181. }
  182. }
  183. BOOL ClyfzSMSAppDlg::PreTranslateMessage(MSG* pMsg)
  184. {
  185. //ctrl键按下
  186. if(pMsg->message == WM_KEYDOWN)
  187. {
  188. CWnd* pWnd = GetFocus();
  189. if(!pWnd)
  190. return CDialog::PreTranslateMessage(pMsg);
  191. if(pWnd == GetDlgItem(IDC_USERINFOLIST) && pMsg->hwnd == m_PhoneBook.m_hWnd)
  192. {
  193. SHORT ret = GetKeyState(VK_CONTROL);
  194. if(ret)
  195. {
  196. if(pMsg->wParam == 'a' || pMsg->wParam == 'A')
  197. {
  198. //ctrl+a/A全选
  199. int nCount = m_PhoneBook.GetItemCount();
  200. if(nCount > 0)
  201. {
  202. //ClearLinkMan();
  203. m_strPhoneNums = _T("");
  204. for(int i = 0; i<nCount; i++)
  205. {
  206. // SLinkManInfo* p = new SLinkManInfo();
  207. m_PhoneBook.SetCheck(i, TRUE);
  208. m_PhoneBook.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); //高亮
  209. //p->strName = m_PhoneBook.GetItemText(i, 0);
  210. //p->strNum = m_PhoneBook.GetItemText(i, 1);
  211. m_strPhoneNums += m_PhoneBook.GetItemText(i, 1);
  212. if(i < nCount-1)
  213. m_strPhoneNums += _T(",");
  214. // m_vLinkManInfo.push_back(p);
  215. }
  216. m_nCountNum = nCount;
  217. m_NumEditCtrl.LineScroll(m_NumEditCtrl.GetLineCount());
  218. UpdateData(FALSE);
  219. }
  220. }
  221. }
  222. }
  223. else if(pWnd == GetDlgItem(IDC_EDIT_Contant) && pMsg->hwnd == GetDlgItem(IDC_EDIT_Contant)->m_hWnd)
  224. {
  225. //计算短信条数
  226. UpdateData();
  227. int nCount = m_strContent.GetLength()/70;
  228. if((nCount*70) < m_strContent.GetLength())
  229. nCount += 1;
  230. m_strTextCount.Format(_T("(现%d字,共%d条短信)"), m_strContent.GetLength(), nCount);
  231. GetDlgItem(IDC_STATIC_Count)->SetWindowText(m_strTextCount);
  232. UpdateData(FALSE);
  233. }
  234. }
  235. return CDialog::PreTranslateMessage(pMsg);
  236. }
  237. // 如果向对话框添加最小化按钮,则需要下面的代码
  238. // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
  239. // 这将由框架自动完成。
  240. void ClyfzSMSAppDlg::OnPaint()
  241. {
  242. if (IsIconic())
  243. {
  244. CPaintDC dc(this); // 用于绘制的设备上下文
  245. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  246. // 使图标在工作区矩形中居中
  247. int cxIcon = GetSystemMetrics(SM_CXICON);
  248. int cyIcon = GetSystemMetrics(SM_CYICON);
  249. CRect rect;
  250. GetClientRect(&rect);
  251. int x = (rect.Width() - cxIcon + 1) / 2;
  252. int y = (rect.Height() - cyIcon + 1) / 2;
  253. // 绘制图标
  254. dc.DrawIcon(x, y, m_hIcon);
  255. }
  256. else
  257. {
  258. CDialog::OnPaint();
  259. }
  260. }
  261. //当用户拖动最小化窗口时系统调用此函数取得光标
  262. //显示。
  263. HCURSOR ClyfzSMSAppDlg::OnQueryDragIcon()
  264. {
  265. return static_cast<HCURSOR>(m_hIcon);
  266. }
  267. #if USE_TRAYICON
  268. void ClyfzSMSAppDlg::InitTrayIcon()
  269. {
  270. m_trayIcon.SetNotificationWnd(this, WM_MY_TRAY_NOTIFICATION);
  271. m_trayIcon.SetIcon(IDR_MAINFRAME, _T("短信处理程序"));
  272. m_trayIcon.SetIconInfos(IDI_ITRAY, IDI_ITRAY, IDI_ITRAY);
  273. m_trayIcon.SetDefaultTip(_T("短信处理程序"));
  274. }
  275. LRESULT ClyfzSMSAppDlg::OnTrayNotification(WPARAM wp, LPARAM lp)
  276. {
  277. if (m_isNotify)
  278. {
  279. static LPCSTR MouseMessages[] = { "WM_MOUSEMOVE",
  280. "WM_LBUTTONDOWN", "WM_LBUTTONUP", "WM_LBUTTONDBLCLK",
  281. "WM_RBUTTONDOWN", "WM_RBUTTONUP", "WM_RBUTTONDBLCLK",
  282. "WM_MBUTTONDOWN", "WM_MBUTTONUP", "WM_MBUTTONDBLCLK" };
  283. }
  284. if (wp != IDR_MAINFRAME)
  285. return m_trayIcon.OnTrayNotification(wp, lp);
  286. switch (lp)
  287. {
  288. case WM_RBUTTONUP:
  289. TrayRight();
  290. break;
  291. case WM_LBUTTONUP:
  292. break;
  293. case WM_LBUTTONDBLCLK:
  294. TaskNotifyIcon();
  295. break;
  296. default:
  297. break;
  298. }
  299. return 0;
  300. }
  301. LRESULT ClyfzSMSAppDlg::OnTaskBarCreated(WPARAM wp, LPARAM lp)
  302. {
  303. Shell_NotifyIcon(NIM_ADD, &m_trayIcon.m_nid);
  304. return 1;
  305. }
  306. // 托盘的工作内容;
  307. void ClyfzSMSAppDlg::TaskNotifyIcon()
  308. {
  309. if (!m_bNoticeTray)
  310. {
  311. m_trayIcon.SetIcon(IDR_MAINFRAME, _T("短信处理程序"));
  312. ShowWindow(SW_SHOWNORMAL);
  313. m_bNoticeTray = TRUE;
  314. }
  315. else
  316. {
  317. m_trayIcon.SetIcon(IDR_MAINFRAME, _T("短信处理程序"));
  318. ShowWindow(SW_HIDE);
  319. m_bNoticeTray = FALSE;
  320. }
  321. }
  322. void ClyfzSMSAppDlg::TrayRight()
  323. {
  324. CMenu menu;
  325. if (!menu.LoadMenu(IDR_MENU1))
  326. return;
  327. CMenu* pSubMenu = menu.GetSubMenu(0);
  328. if (!pSubMenu)
  329. return;
  330. if (m_bAutoRuning)
  331. pSubMenu->CheckMenuItem(Menu_AutoRun, MF_BYCOMMAND | MF_CHECKED);
  332. else
  333. pSubMenu->CheckMenuItem(Menu_AutoRun, MF_BYCOMMAND | MF_UNCHECKED);
  334. CPoint point;
  335. GetCursorPos(&point);
  336. ::SetForegroundWindow(m_hWnd);
  337. pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
  338. }
  339. #endif
  340. void ClyfzSMSAppDlg::OnAutorun()
  341. {
  342. m_bAutoRuning = !m_bAutoRuning;
  343. AfxGetApp()->WriteProfileInt(_T("lyfzSMSApp"), _T("Autoruning"), m_bAutoRuning);
  344. //BYTE szData[1024] = { 0 };
  345. //::GetModuleFileNameA(NULL, (LPSTR)szData, sizeof(szData));
  346. AddAutoSysRun((LPBYTE)g_szModuleFileName,_tcslen(g_szModuleFileName)*sizeof(TCHAR), _T("lyfzSMSApp"), m_bAutoRuning);
  347. }
  348. void ClyfzSMSAppDlg::OnExit()
  349. {
  350. UpdateData();
  351. if(g_IsSavePwd)
  352. SavePassWord(g_IsSavePwd, m_strAccount, m_strPassWord);
  353. else
  354. SavePassWord(g_IsSavePwd, m_strAccount, _T(""));
  355. CDialog::OnOK();
  356. }
  357. void ClyfzSMSAppDlg::OnTimer(UINT_PTR nIDEvent)
  358. {
  359. if(nIDEvent == 1)
  360. {
  361. //查找第一行数据列:account,phones,content,timestamp,msgcount,log,status,Sid,autoid(自动编号)
  362. CArray<CStringArray, CStringArray> arr;
  363. std::vector<CString> vFields;
  364. vFields.push_back(_T("account"));
  365. vFields.push_back(_T("phones"));
  366. vFields.push_back(_T("content"));
  367. vFields.push_back(_T("timestamp"));
  368. vFields.push_back(_T("msgcount"));
  369. vFields.push_back(_T("log"));
  370. vFields.push_back(_T("status"));
  371. vFields.push_back(_T("Sid"));
  372. vFields.push_back(_T("autoid"));
  373. CString strTableName = _T("sendreg");
  374. CString strfilter = _T("Sid<>'0'");
  375. if(CDataManager::GetInstance()->Select(arr, strTableName, vFields, strfilter) == -1)
  376. {
  377. MessageBox(_T("查询记录失败"));
  378. return;
  379. }
  380. if(arr.GetSize() == 0)
  381. return;
  382. for(int i=0; i<arr.GetSize(); i++)
  383. {
  384. if(arr.ElementAt(i).GetSize() == 0)
  385. continue;
  386. if(arr.ElementAt(i).ElementAt(7) != _T("0"))
  387. {
  388. SSendReg sr;
  389. sr.account = arr.ElementAt(i).ElementAt(0);
  390. sr.phones = arr.ElementAt(i).ElementAt(1);
  391. sr.content = arr.ElementAt(i).ElementAt(2);
  392. sr.timestamp = arr.ElementAt(i).ElementAt(3);
  393. sr.msgcount = arr.ElementAt(i).ElementAt(4);
  394. sr.log = arr.ElementAt(i).ElementAt(5);
  395. sr.status = arr.ElementAt(i).ElementAt(6);
  396. sr.Sid = arr.ElementAt(i).ElementAt(7);
  397. sr.autoid = arr.ElementAt(i).ElementAt(8);
  398. m_SMSHandle.GetSMState(g_szSMSServer, g_dwTCPSMSPort, m_strAccount, m_strPassWord, &sr);
  399. }
  400. }
  401. }
  402. else if(nIDEvent == 2)
  403. {
  404. /*
  405. //计算短信条数
  406. UpdateData();
  407. int nCount = m_strContent.GetLength()/70;
  408. if((nCount*70) < m_strContent.GetLength())
  409. nCount += 1;
  410. m_strTextCount.Format(_T("(现%d字,共%d条短信)"), m_strContent.GetLength(), nCount);
  411. GetDlgItem(IDC_STATIC_Count)->SetWindowText(m_strTextCount);
  412. UpdateData(FALSE);
  413. */
  414. }
  415. }
  416. void ClyfzSMSAppDlg::OnDestroy()
  417. {
  418. //删除缓存里的所有联系人信息
  419. ClearLinkMan();
  420. CDialog::OnDestroy();
  421. }
  422. void ClyfzSMSAppDlg::OnClose()
  423. {
  424. ShowWindow(SW_HIDE);
  425. #if USE_TRAYICON
  426. m_bNoticeTray = FALSE;
  427. #endif
  428. }
  429. //************************************//
  430. // [函数]:MultiLineShow
  431. // [描述]:自动换行
  432. // [参数]:
  433. // buf 要处理的字符串
  434. // [返回]:1成功
  435. //************************************//
  436. void ClyfzSMSAppDlg::AddElementAtList(CArray<CStringArray, CStringArray>& arr)
  437. {
  438. int nCount = m_PhoneBook.GetItemCount();
  439. int nIdx = nCount;
  440. for(int i=0; i<arr.GetSize(); i++)
  441. {
  442. CString strName = arr.ElementAt(i).ElementAt(0);
  443. CString strPhoneNum = arr.ElementAt(i).ElementAt(1);
  444. int nRow = m_PhoneBook.InsertItem(nIdx, strName);
  445. m_PhoneBook.SetItemText(nRow, 1, strPhoneNum); //插入列
  446. CString strTableName = _T("contact");
  447. CString strValues = _T("");
  448. strValues = _T("'") + strName + _T("','") + strPhoneNum + _T("'");
  449. CDataManager::GetInstance()->Insert(strTableName, strValues);
  450. ++nIdx;
  451. }
  452. UpdateData(FALSE);
  453. }
  454. //************************************//
  455. // [函数]:MultiLineShow
  456. // [描述]:自动换行
  457. // [参数]:
  458. // buf 要处理的字符串
  459. // [返回]:1成功
  460. //************************************//
  461. int ClyfzSMSAppDlg::AutoChangeLine(char* buf)
  462. {
  463. int ret = 1;
  464. return ret;
  465. }
  466. //************************************//
  467. // [函数]:OnBnClickedAdduserBtn
  468. // [描述]:添加用户手机号
  469. // [参数]:
  470. // [返回]:
  471. //************************************//
  472. void ClyfzSMSAppDlg::OnBnClickedAdduserBtn()
  473. {
  474. // TODO: 在此添加控件通知处理程序代码
  475. CAddContacts dlg;
  476. if(dlg.DoModal() == IDCANCEL)
  477. return;
  478. UpdateData();
  479. int nCount = m_PhoneBook.GetItemCount();
  480. int nRow = m_PhoneBook.InsertItem(nCount, dlg.m_strName);
  481. m_PhoneBook.SetItemText(nRow, 1, dlg.m_strPhoneNum); //插入列
  482. //添加数据到表contact
  483. CString strTableName = _T("contact");
  484. CString strValues = _T("");
  485. strValues = _T("'") + dlg.m_strName + _T("','") + dlg.m_strPhoneNum + _T("'");
  486. CDataManager::GetInstance()->Insert(strTableName, strValues);
  487. UpdateData(FALSE);
  488. }
  489. //************************************//
  490. // [函数]:OnBnClickedDeluserBtn
  491. // [描述]:删除电话本里的号码
  492. // [参数]:
  493. // [返回]:
  494. //************************************//
  495. void ClyfzSMSAppDlg::OnBnClickedDeluserBtn()
  496. {
  497. // TODO: 在此添加控件通知处理程序代码
  498. if(MessageBox(_T("确定要删除选中的联系人吗?"), _T("提示"), MB_YESNO | MB_ICONWARNING) == IDNO)
  499. {
  500. ClearLinkMan();
  501. return;
  502. }
  503. //获取选中项数据
  504. int nIdx = 0;
  505. CString strnames(_T("")), strphones(_T(""));
  506. int nCount = m_PhoneBook.GetItemCount();
  507. for(int i=0; i<nCount; i++)
  508. {
  509. if( m_PhoneBook.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED)
  510. {
  511. if(nIdx != 0)
  512. {
  513. strnames += _T(",");
  514. strphones += _T(",");
  515. }
  516. strnames += _T("'") + m_PhoneBook.GetItemText(i, 0) + _T("'");
  517. strphones += _T("'") + m_PhoneBook.GetItemText(i, 1) + _T("'");
  518. ++nIdx;
  519. }
  520. }
  521. //select * from contact where name in ('fd','gg','dddd') and phone in ('13760634561','13760631451','13553437881');
  522. CString strFilter = _T("name in (") + strnames + _T(") and phone in (") + strphones + _T(")");
  523. CString strTableName = _T("contact");
  524. //删除列表选中的项
  525. if(CDataManager::GetInstance()->Delete(strTableName, strFilter) != -1)
  526. {
  527. int nSize = m_PhoneBook.GetItemCount();
  528. for(int i = nSize-1; i>=0; i--)
  529. {
  530. if( m_PhoneBook.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED)
  531. m_PhoneBook.DeleteItem(i);
  532. }
  533. }
  534. UpdateData(FALSE);
  535. }
  536. //************************************//
  537. // [函数]:OnBnClickedExcelimportBtn
  538. // [描述]:excel表导入
  539. // [参数]:
  540. // [返回]:
  541. //************************************//
  542. void ClyfzSMSAppDlg::OnBnClickedExcelimportBtn()
  543. {
  544. // TODO: 在此添加控件通知处理程序代码
  545. /*
  546. Excel接口 导入类 头文件 说明
  547. _Application CApplicaton Application.h Excel应用程序。
  548. Workbooks CWorkbooks Workbooks.h 工作簿的容器,里面包括了Excel应用程序打开的所有工作簿。
  549. _Workbook CWorkbook Workbook.h 单个工作簿。
  550. Worksheets CWorksheets Worksheets.h 单个工作簿中的Sheet表格的容器,包括该工作簿中的所有Sheet。
  551. _Worksheet CWorksheet Worksheet.h 单个Sheet表格。
  552. Range CRange Range.h 一定数量的单元格,可对单元格进行单个或多个单元格进行操作。
  553. */
  554. CString strFindFile = _T("");
  555. LPCTSTR lpszFile = strFindFile.GetBuffer();
  556. LPCTSTR lpszFilter = _T("(Excel*.xls)|*.xls||");
  557. DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT | OFN_ENABLESIZING;
  558. CFileDialog dlg(TRUE, _T("default Files (*xls)"), NULL, dwFlags, lpszFilter, NULL);
  559. dlg.m_ofn.lpstrTitle = _T("请加载相关电话本文件");
  560. // 最多可以打开20个文件
  561. dlg.m_ofn.nMaxFile = 20 * MAX_PATH;
  562. dlg.m_ofn.lpstrFile = new TCHAR[dlg.m_ofn.nMaxFile];
  563. ZeroMemory(dlg.m_ofn.lpstrFile, sizeof(TCHAR) * dlg.m_ofn.nMaxFile);
  564. // 显示文件对话框,获得文件名集合
  565. int retval = dlg.DoModal();
  566. if(retval==IDCANCEL)
  567. {
  568. delete [] dlg.m_ofn.lpstrFile;
  569. dlg.m_ofn.lpstrFile = NULL;
  570. return;
  571. }
  572. POSITION pos_file;
  573. pos_file = dlg.GetStartPosition();
  574. CArray<CString, CString> ary_filename;
  575. while(pos_file != NULL)
  576. ary_filename.Add(dlg.GetNextPathName(pos_file));
  577. int nFileCount = ary_filename.GetSize();
  578. ExcelForODBC excelio;
  579. //根据扩展名读取相关文件
  580. for(int i=0; i<nFileCount; i++)
  581. {
  582. CString str_ext;
  583. str_ext = ary_filename.GetAt(i).Right(3);
  584. if ( str_ext.CollateNoCase(_T("xls")) != 0 )
  585. {
  586. str_ext.Format(_T("文件:%s 不是xls文件,无法读取..."),ary_filename.GetAt(i).GetBuffer());
  587. continue;
  588. }
  589. CArray<CStringArray, CStringArray> arr;
  590. CString strSql = _T("select * from [sheet1$]");
  591. DWORD dwListCount = m_PhoneBook.GetItemCount();
  592. excelio.ReadFromExcel(ary_filename.GetAt(i), strSql, arr);
  593. if(arr.GetSize() > 0)
  594. {
  595. AddElementAtList(arr);
  596. str_ext.Format(_T("文件:%s 导入成功..."), ary_filename.GetAt(i).GetBuffer());
  597. MessageBox(str_ext);
  598. }
  599. }
  600. delete [] dlg.m_ofn.lpstrFile;
  601. dlg.m_ofn.lpstrFile = NULL;
  602. }
  603. //************************************//
  604. // [函数]:OnBnClickedExcelimportBtn
  605. // [描述]:手机导入
  606. // [参数]:
  607. // [返回]:
  608. //************************************//
  609. void ClyfzSMSAppDlg::OnBnClickedPhoneimportBtn()
  610. {
  611. // TODO: 在此添加控件通知处理程序代码
  612. CPhoneNumImport dlg;
  613. dlg.SetTelNumbers(m_strPhoneNums);
  614. if (dlg.DoModal() == IDCANCEL)
  615. {
  616. return;
  617. }
  618. m_nCountNum = dlg.GetPhones()->GetSize();
  619. m_strPhoneNums = dlg.GetDifferTelNumbers();
  620. UpdateData(FALSE);
  621. }
  622. //************************************//
  623. // [函数]:OnBnClickedSendmessageBtn
  624. // [描述]:发送短信
  625. // [参数]:
  626. // [返回]:
  627. //************************************//
  628. void ClyfzSMSAppDlg::OnBnClickedSendmessageBtn()
  629. {
  630. // TODO: 在此添加控件通知处理程序代码
  631. UpdateData();
  632. if(m_strAccount == _T(""))
  633. {
  634. MessageBox(_T("请输入登录的帐户"));
  635. return;
  636. }
  637. if(!CheckNumFormat(m_strAccount))
  638. {
  639. MessageBox(_T("帐号只能是数字"));
  640. return;
  641. }
  642. if(m_strPassWord == _T(""))
  643. {
  644. MessageBox(_T("请输入密码"));
  645. return;
  646. }
  647. if(m_strContent == _T(""))
  648. {
  649. MessageBox(_T("还没有编辑信息"));
  650. return;
  651. }
  652. if(m_strPhoneNums == _T(""))
  653. {
  654. MessageBox(_T("请编辑要发送的号码"));
  655. return;
  656. }
  657. //添加新记录 列名:account,phones,content,timestamp,msgcount,log,status,Sid,autoid(自动编号)
  658. CString strTableName = _T("sendreg");
  659. int nCurrSendCount = 0;
  660. CString strfiles = _T("account,phones,content,[timestamp],msgcount,log,status,Sid");
  661. CString strStampTime = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
  662. CString strValues = _T("");
  663. strValues = _T("'") + m_strAccount + _T("','") + m_strPhoneNums + _T("','") + m_strContent + _T("','") + strStampTime + _T("','0','0/1','0','0'");
  664. if(CDataManager::GetInstance()->Insert(strTableName, strValues, strfiles) == -1)
  665. {
  666. MessageBox(_T("添加记录失败"));
  667. return;
  668. }
  669. //查找第一行数据
  670. CArray<CStringArray, CStringArray> arr;
  671. std::vector<CString> vFields;
  672. vFields.push_back(_T("autoid"));
  673. CString strstrSelLineCount = _T("top 1");
  674. if(CDataManager::GetInstance()->Select(arr, strTableName, vFields, _T(""), strstrSelLineCount, _T("autoid desc")) == -1)
  675. {
  676. MessageBox(_T("查询记录失败"));
  677. return;
  678. }
  679. if(arr.GetSize() == 0)
  680. return;
  681. //发送信息
  682. //获取帐号余额
  683. if(m_SMSHandle.SendSMToSever(g_szSMSServer, g_dwTCPSMSPort, m_strAccount, m_strPassWord, m_strPhoneNums, m_strContent, strStampTime, arr.ElementAt(0).ElementAt(0)) == 0)
  684. {
  685. MessageBox(_T("发送成功!"));
  686. }
  687. // QuerAccountInfo tAccountInfo;
  688. // m_SMSHandle.GetSMSBlance(g_szSMSServer, g_dwTCPSMSPort,m_strAccount,m_strPassWord,tAccountInfo);
  689. /*
  690. */
  691. }
  692. //************************************//
  693. // [函数]:OnBnClickedMessagelogBtn
  694. // [描述]:短信记录
  695. // [参数]:
  696. // [返回]:
  697. //************************************//
  698. void ClyfzSMSAppDlg::OnBnClickedMessagelogBtn()
  699. {
  700. // TODO: 在此添加控件通知处理程序代码
  701. CSendMsgLogDlg dlg;
  702. dlg.m_strAccount = m_strAccount;
  703. dlg.m_strPassWord = m_strPassWord;
  704. dlg.m_pSMSHandle = &m_SMSHandle;
  705. if(dlg.DoModal() == IDCANCEL)
  706. return;
  707. }
  708. void ClyfzSMSAppDlg::OnNMClickUserinfolist(NMHDR *pNMHDR, LRESULT *pResult)
  709. {
  710. LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
  711. // TODO: 在此添加控件通知处理程序代码
  712. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  713. if(pNMListView->iItem != -1)
  714. {
  715. //单击行列pNMListView->iItem, pNMListView->iSubItem
  716. UpdateData();
  717. m_strPhoneNums = m_PhoneBook.GetItemText(pNMListView->iItem, 1);
  718. m_nCountNum = 1;
  719. UpdateData(FALSE);
  720. }
  721. *pResult = 0;
  722. }
  723. //************************************//
  724. // [函数]:DelPhoneNum
  725. // [描述]:删除
  726. // [参数]:
  727. // nIdx 选中索引
  728. // [返回]:1成功, 0失败
  729. //************************************//
  730. int ClyfzSMSAppDlg::DelPhoneNum(const int nIdx)
  731. {
  732. return 1;
  733. }
  734. void ClyfzSMSAppDlg::OnBnClickedSavepwdCheck()
  735. {
  736. // TODO: 在此添加控件通知处理程序代码
  737. UpdateData();
  738. g_IsSavePwd = !g_IsSavePwd;
  739. ((CButton*)GetDlgItem(IDC_SAVEPWD_CHECK))->SetCheck(g_IsSavePwd);
  740. if(g_IsSavePwd)
  741. SavePassWord(g_IsSavePwd, m_strAccount, m_strPassWord);
  742. else
  743. SavePassWord(g_IsSavePwd, m_strAccount, _T(""));
  744. UpdateData(FALSE);
  745. }
  746. void ClyfzSMSAppDlg::SavePassWord(const int nIsSave, const CString& strAccount, const CString& strPWD)
  747. {
  748. CString str = _T("");
  749. TCHAR szFile[MAX_PATH + 1] = _T("");
  750. _stprintf_s(szFile, _T("%s\\SMScfg.ini"), g_szModulePath);
  751. WritePrivateProfileString(_T("SMSHostInfo"), _T("LoginAccount"), strAccount, szFile);
  752. WritePrivateProfileString(_T("SMSHostInfo"), _T("LoginPassWord"), strPWD, szFile);
  753. CString strIsSave = _T("");
  754. strIsSave.Format(_T("%d"), nIsSave);
  755. WritePrivateProfileString(_T("SMSHostInfo"), _T("IsSavePWD"), strIsSave, szFile);
  756. }
  757. //************************************//
  758. // [函数]:ClearLinkMan
  759. // [描述]:清除缓存里的联系人
  760. // [参数]:
  761. // [返回]:
  762. //************************************//
  763. void ClyfzSMSAppDlg::ClearLinkMan()
  764. {
  765. if(!m_vLinkManInfo.empty())
  766. {
  767. std::vector<SLinkManInfo*>::iterator iter = m_vLinkManInfo.begin();
  768. for(;iter != m_vLinkManInfo.end();)
  769. {
  770. if((*iter) != NULL)
  771. delete (*iter);
  772. ++iter;
  773. }
  774. m_vLinkManInfo.clear();
  775. }
  776. }