findmailDlg.cpp
上传用户:feituo2008
上传日期:2013-02-02
资源大小:493k
文件大小:7k
源码类别:

Email客户端

开发平台:

Visual C++

  1. // findmailDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "findmail.h"
  5. #include "findmailDlg.h"
  6. #include "tcp.h"
  7. #include "findmailthread.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #endif
  11. // CfindmailDlg 对话框
  12. CfindmailDlg::CfindmailDlg(CWnd* pParent /*=NULL*/)
  13. : CDialog(CfindmailDlg::IDD, pParent)
  14. , m_stat(_T(""))
  15. , m_domain(_T(""))
  16. , m_max_thread_count(100)
  17. , m_max_thread_num(99)
  18. , m_min_thread_num(0)
  19. , m_stat_file(_T(""))
  20. , m_dict_file(_T(""))
  21. , m_dial_name(_T(""))
  22. {
  23. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  24. }
  25. void CfindmailDlg::DoDataExchange(CDataExchange* pDX)
  26. {
  27. CDialog::DoDataExchange(pDX);
  28. DDX_Text(pDX, IDE_STAT, m_stat);
  29. DDX_CBString(pDX, IDC_DOMAIN, m_domain);
  30. DDX_Text(pDX, IDE_THREAD_COUNT, m_max_thread_count);
  31. DDV_MinMaxInt(pDX, m_max_thread_count, 1, 1024000);
  32. DDX_Text(pDX, IDE_MAX_THREAD_NUM, m_max_thread_num);
  33. DDX_Text(pDX, IDE_MIN_THREAD_NUM, m_min_thread_num);
  34. DDX_Text(pDX, IDE_STAT_FILE, m_stat_file);
  35. DDX_Text(pDX, IDE_DICT_FILE, m_dict_file);
  36. DDX_Text(pDX, IDE_DIAL_NAME, m_dial_name);
  37. }
  38. BEGIN_MESSAGE_MAP(CfindmailDlg, CDialog)
  39. ON_WM_PAINT()
  40. ON_WM_QUERYDRAGICON()
  41. //}}AFX_MSG_MAP
  42. ON_BN_CLICKED(ID_START, OnBnClickedStart)
  43. ON_WM_CLOSE()
  44. ON_BN_CLICKED(ID_BROWSE_STAT_FILE, OnBnClickedBrowseStatFile)
  45. ON_BN_CLICKED(ID_BROWSE_DICT_FILE, OnBnClickedBrowseDictFile)
  46. ON_BN_CLICKED(IDC_NO_STAT, OnBnClickedNoStat)
  47. ON_BN_CLICKED(IDC_NOT_SHOW_NONEXIST, OnBnClickedNotShowNonexist)
  48. ON_EN_CHANGE(IDE_DIAL_NAME, OnEnChangeDialName)
  49. END_MESSAGE_MAP()
  50. // CfindmailDlg 消息处理程序
  51. extern HWND g_hWndNotify;
  52. BOOL CfindmailDlg::OnInitDialog()
  53. {
  54. CDialog::OnInitDialog();
  55. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  56. //  执行此操作
  57. SetIcon(m_hIcon, TRUE); // 设置大图标
  58. SetIcon(m_hIcon, FALSE); // 设置小图标
  59. g_hWndNotify =m_hWnd; // TODO:在此添加额外的初始化代码
  60. SetDlgItemText(IDC_DNS, m_dns_client.m_dns_ip);
  61. for(int i =0; i<m_dns_client.m_dns_count; i++)
  62. SendDlgItemMessage(IDC_DNS, CB_ADDSTRING, 0, (LPARAM)m_dns_client.m_dns_servers[i]); 
  63. SetDlgItemText(IDE_STAT, "rn只需要输入域名按开始按钮就可以搜索了,选择不显示可以加快搜索速度.rnrn可以调用上次搜索保存的状态文件继续上次的搜索,rnrn可以选择重拨号的拨号名称,在每次连接被拒绝后重新拨号更换IP地址。rnrn欢迎光临编程沙龙www.ProgramSalon.com");
  64. GetDialName();
  65. return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE
  66. }
  67. // 如果向对话框添加最小化按钮,则需要下面的代码
  68. //  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
  69. //  这将由框架自动完成。
  70. void CfindmailDlg::OnPaint() 
  71. {
  72. if (IsIconic())
  73. {
  74. CPaintDC dc(this); // 用于绘制的设备上下文
  75. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  76. // 使图标在工作矩形中居中
  77. int cxIcon = GetSystemMetrics(SM_CXICON);
  78. int cyIcon = GetSystemMetrics(SM_CYICON);
  79. CRect rect;
  80. GetClientRect(&rect);
  81. int x = (rect.Width() - cxIcon + 1) / 2;
  82. int y = (rect.Height() - cyIcon + 1) / 2;
  83. // 绘制图标
  84. dc.DrawIcon(x, y, m_hIcon);
  85. }
  86. else
  87. {
  88. CDialog::OnPaint();
  89. }
  90. }
  91. //当用户拖动最小化窗口时系统调用此函数取得光标显示。
  92. HCURSOR CfindmailDlg::OnQueryDragIcon()
  93. {
  94. return static_cast<HCURSOR>(m_hIcon);
  95. }
  96. void CfindmailDlg::OnBnClickedStart()
  97. {
  98. CString str;
  99. GetDlgItemText(ID_START, str);
  100. time_t t;
  101. struct tm *ptm;
  102. time(&t);
  103. ptm =localtime(&t);
  104. char ttm[30];
  105. wsprintf(ttm, "%04d/%02d/%02d %02d:%02d:%02d", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday, ptm->tm_hour,
  106. ptm->tm_min, ptm->tm_sec);
  107. if(str =="启动")
  108. {
  109. UpdateData();
  110. SetDlgItemText(IDC_START_TIME, ttm);
  111. m_dns_client.GetMxServers((char *)(LPCTSTR)m_domain);
  112. SendDlgItemMessage(IDC_MX_SERVER, CB_RESETCONTENT, 0, 0L);
  113. for(int i =0; i<m_dns_client.m_mx_server_count; i++)
  114. SendDlgItemMessage(IDC_MX_SERVER, CB_ADDSTRING, 0, (LPARAM)m_dns_client.m_mx_servers[i]);
  115. SendDlgItemMessage(IDC_MX_SERVER, CB_SETCURSEL, 0, 0L);
  116. if(m_dns_client.m_mx_servers ==NULL)
  117. {
  118. MessageBox("no mx server");
  119. return;
  120. }
  121. m_thread_manager.Init((char *)(LPCTSTR)m_domain,m_dns_client.m_mx_servers[0], (char *)(LPCTSTR)m_dial_name,
  122. m_max_thread_count, m_max_thread_num-m_min_thread_num+1, m_min_thread_num,
  123. (char *)(LPCTSTR)m_stat_file, (char *)(LPCTSTR)m_dict_file);
  124. SetDlgItemText(IDE_STAT_FILE, m_thread_manager.m_stat_file);
  125. m_thread_manager.Start((m_stat_file=="")?false:true);
  126. SetDlgItemText(ID_START, "停止");
  127. }
  128. else
  129. {
  130. SetDlgItemText(IDC_END_TIME, ttm);
  131. m_thread_manager.Stop();
  132. SetDlgItemText(ID_START, "启动");
  133. }
  134. }
  135. void CfindmailDlg::OnClose()
  136. {
  137. // TODO: Add your message handler code here and/or call default
  138. if(MessageBox("您是否确定要退出?", "FindMail", MB_YESNO|MB_DEFBUTTON2) ==IDNO)
  139. return;
  140. m_thread_manager.Stop();
  141. CDialog::OnClose();
  142. }
  143. void CfindmailDlg::OnBnClickedBrowseStatFile()
  144. {
  145. CFileDialog fd(true, "stat", "*.stat");
  146. if(fd.DoModal() ==IDOK)
  147. SetDlgItemText(IDE_STAT_FILE, (LPCTSTR)fd.GetPathName());
  148. else return;
  149. char temp[100];
  150. GetPrivateProfileString("CONFIG", "DOMAIN_NAME", "", temp, sizeof(temp), (LPCTSTR)fd.GetPathName());
  151. SetDlgItemText(IDC_DOMAIN, temp);
  152. GetPrivateProfileString("CONFIG", "DICT_FILE", "", temp, sizeof(temp), (LPCTSTR)fd.GetPathName());
  153. SetDlgItemText(IDE_DICT_FILE, temp);
  154. m_max_thread_count =GetPrivateProfileInt("THREADS", "MAX_COUNT", 0, (LPCTSTR)fd.GetPathName());
  155. SetDlgItemInt(IDE_THREAD_COUNT, m_max_thread_count);
  156. m_min_thread_num =GetPrivateProfileInt("THREADS", "MIN_NUM", 0, (LPCTSTR)fd.GetPathName());
  157. SetDlgItemInt(IDE_MIN_THREAD_NUM, m_min_thread_num);
  158. m_max_thread_num =GetPrivateProfileInt("THREADS", "COUNT", 0, (LPCTSTR)fd.GetPathName())+m_min_thread_num-1;
  159. SetDlgItemInt(IDE_MAX_THREAD_NUM, m_max_thread_num);
  160. //UpdateData();
  161. }
  162. void CfindmailDlg::OnBnClickedBrowseDictFile()
  163. {
  164. CFileDialog fd(true);
  165. if(fd.DoModal() ==IDOK)
  166. SetDlgItemText(IDE_DICT_FILE, (LPCTSTR)fd.GetPathName());
  167. }
  168. extern int g_show_stat, g_show_nonexist;
  169. void CfindmailDlg::OnBnClickedNoStat()
  170. {
  171. g_show_stat =!g_show_stat;
  172. }
  173. void CfindmailDlg::OnBnClickedNotShowNonexist()
  174. {
  175. g_show_nonexist =!g_show_nonexist;
  176. }
  177. void CfindmailDlg::OnEnChangeDialName()
  178. {
  179. // TODO:  If this is a RICHEDIT control, the control will not
  180. // send this notification unless you override the CDialog::OnInitDialog()
  181. // function and call CRichEditCtrl().SetEventMask()
  182. // with the ENM_CHANGE flag ORed into the mask.
  183. // TODO:  Add your control notification handler code here
  184. }
  185. int CfindmailDlg::GetDialName(void)
  186. {
  187. RASCONN * lpRasConn;
  188. DWORD     lpcb;
  189. DWORD     lpcConnections;
  190. lpRasConn = (LPRASCONN) GlobalAlloc(GPTR, sizeof(RASCONN));
  191. lpRasConn->dwSize = sizeof(RASCONN);
  192. lpcb = sizeof(RASCONN);
  193.  
  194. int nRet = RasEnumConnections(lpRasConn, &lpcb, &lpcConnections);
  195. if (nRet != 0)
  196.     return -1;
  197. else
  198. {
  199. for (int i = 0; i < (int)lpcConnections; i++)
  200.     {
  201. SendDlgItemMessage(IDE_DIAL_NAME, CB_ADDSTRING, 0, (LPARAM)lpRasConn->szEntryName);
  202. lpRasConn++;
  203. }
  204. }
  205. GlobalFree(lpRasConn);
  206. return 0;
  207. }