Loading

Paste #pckzzudmn

  1.  
  2. // MFCApplication1Dlg.cpp: 实现文件
  3. //
  4.  
  5. #include "stdafx.h"
  6. #include "MFCApplication1.h"
  7. #include "MFCApplication1Dlg.h"
  8. #include "afxdialogex.h"
  9.  
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #endif
  13.  
  14.  
  15. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
  16.  
  17. class CAboutDlg : public CDialogEx
  18. {
  19. public:
  20.     CAboutDlg();
  21.  
  22. // 对话框数据
  23. #ifdef AFX_DESIGN_TIME
  24.     enum { IDD = IDD_ABOUTBOX };
  25. #endif
  26.  
  27.     protected:
  28.     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
  29.  
  30. // 实现
  31. protected:
  32.     DECLARE_MESSAGE_MAP()
  33. };
  34.  
  35. CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
  36. {
  37. }
  38.  
  39. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  40. {
  41.     CDialogEx::DoDataExchange(pDX);
  42. }
  43.  
  44. BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
  45. END_MESSAGE_MAP()
  46.  
  47.  
  48. // CMFCApplication1Dlg 对话框
  49.  
  50.  
  51.  
  52. CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=nullptr*/)
  53.     : CDialogEx(IDD_MFCAPPLICATION1_DIALOG, pParent)
  54. {
  55.     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  56.     m = new std::map<CString, CString>;
  57. }
  58.  
  59. void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
  60. {
  61.     CDialogEx::DoDataExchange(pDX);
  62. }
  63.  
  64. BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
  65.     ON_WM_SYSCOMMAND()
  66.     ON_WM_PAINT()
  67.     ON_WM_QUERYDRAGICON()
  68.     ON_BN_CLICKED(IDC_BTN_NEXT, &CMFCApplication1Dlg::OnBnClickedBtnNext)
  69.     ON_BN_CLICKED(IDC_BTN_RESET, &CMFCApplication1Dlg::OnBnClickedBtnReset)
  70.     ON_BN_CLICKED(IDC_BTN_SAVE, &CMFCApplication1Dlg::OnBnClickedBtnSave)
  71.     ON_BN_CLICKED(IDC_BTN_SEARCH, &CMFCApplication1Dlg::OnBnClickedBtnSearch)
  72.     ON_BN_CLICKED(IDC_BTN_OPEN, &CMFCApplication1Dlg::OnBnClickedBtnOpen)
  73. END_MESSAGE_MAP()
  74.  
  75.  
  76. // CMFCApplication1Dlg 消息处理程序
  77.  
  78. BOOL CMFCApplication1Dlg::OnInitDialog()
  79. {
  80.     CDialogEx::OnInitDialog();
  81.  
  82.     // 将“关于...”菜单项添加到系统菜单中。
  83.  
  84.     // IDM_ABOUTBOX 必须在系统命令范围内。
  85.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  86.     ASSERT(IDM_ABOUTBOX < 0xF000);
  87.  
  88.     CMenu* pSysMenu = GetSystemMenu(FALSE);
  89.     if (pSysMenu != nullptr)
  90.     {
  91.         BOOL bNameValid;
  92.         CString strAboutMenu;
  93.         bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
  94.         ASSERT(bNameValid);
  95.         if (!strAboutMenu.IsEmpty())
  96.         {
  97.             pSysMenu->AppendMenu(MF_SEPARATOR);
  98.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  99.         }
  100.     }
  101.  
  102.     // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
  103.     //  执行此操作
  104.     SetIcon(m_hIcon, TRUE);         // 设置大图标
  105.     SetIcon(m_hIcon, FALSE);        // 设置小图标
  106.  
  107.     // TODO: 在此添加额外的初始化代码
  108.  
  109.     list_box = (CListBox*)GetDlgItem(IDC_NUM_LIST);
  110.     num_input = (CEdit*)GetDlgItem(IDC_EDIT_NUM_INPUT);
  111.     name_input = (CEdit*)GetDlgItem(IDC_EDIT_NAME_INPUT);
  112.     num_search = (CEdit*)GetDlgItem(IDC_EDIT_NUM_SEARCH);
  113.  
  114.     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
  115. }
  116.  
  117. void CMFCApplication1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
  118. {
  119.     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  120.     {
  121.         CAboutDlg dlgAbout;
  122.         dlgAbout.DoModal();
  123.     }
  124.     else
  125.     {
  126.         CDialogEx::OnSysCommand(nID, lParam);
  127.     }
  128. }
  129.  
  130. // 如果向对话框添加最小化按钮,则需要下面的代码
  131. //  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
  132. //  这将由框架自动完成。
  133.  
  134. void CMFCApplication1Dlg::OnPaint()
  135. {
  136.     if (IsIconic())
  137.     {
  138.         CPaintDC dc(this); // 用于绘制的设备上下文
  139.  
  140.         SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  141.  
  142.         // 使图标在工作区矩形中居中
  143.         int cxIcon = GetSystemMetrics(SM_CXICON);
  144.         int cyIcon = GetSystemMetrics(SM_CYICON);
  145.         CRect rect;
  146.         GetClientRect(&rect);
  147.         int x = (rect.Width() - cxIcon + 1) / 2;
  148.         int y = (rect.Height() - cyIcon + 1) / 2;
  149.  
  150.         // 绘制图标
  151.         dc.DrawIcon(x, y, m_hIcon);
  152.     }
  153.     else
  154.     {
  155.         CDialogEx::OnPaint();
  156.     }
  157. }
  158.  
  159. //当用户拖动最小化窗口时系统调用此函数取得光标
  160. //显示。
  161. HCURSOR CMFCApplication1Dlg::OnQueryDragIcon()
  162. {
  163.     return static_cast<HCURSOR>(m_hIcon);
  164. }
  165.  
  166.  
  167. void CMFCApplication1Dlg::OnBnClickedBtnNext()
  168. {
  169.     // TODO: 在此添加控件通知处理程序代码
  170.     CString num,name;
  171.     num_input->GetWindowText(num);
  172.     name_input->GetWindowText(name);
  173.     list_box->AddString(num + " : " + name);
  174.     m->insert(std::pair<CString,CString>(num, name));
  175. }
  176.  
  177.  
  178. void CMFCApplication1Dlg::OnBnClickedBtnReset()
  179. {
  180.     // TODO: 在此添加控件通知处理程序代码
  181.     m->erase(m->begin(), m->end());
  182.     while (list_box->GetCount() > 0) {
  183.         list_box->DeleteString(0);
  184.     }
  185.    
  186. }
  187.  
  188.  
  189. void CMFCApplication1Dlg::OnBnClickedBtnSave()
  190. {
  191.     // TODO: 在此添加控件通知处理程序代码
  192.  
  193.     CFileDialog dia(FALSE,
  194.         NULL,
  195.         NULL,
  196.         OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  197.         NULL,
  198.         this
  199.     );
  200.     CString a, b;
  201.     if (IDOK == dia.DoModal()) {
  202.         std::map<CString, CString>::iterator iter;
  203.         iter = m->begin();
  204.         std::string filename = (CStringA)dia.GetPathName();
  205.         std::ofstream f;
  206.         f.open(filename, std::ios::out);
  207.         while (iter != m->end()) {
  208.             a = iter->first;
  209.             b = iter->second;
  210.             std::string astr, bstr;
  211.             astr = (CStringA)a.GetBuffer();
  212.             bstr = (CStringA)b.GetBuffer();
  213.  
  214.             f << astr.data() << " " << bstr.data() << std::endl;
  215.             iter++;
  216.         }
  217.         f.close();
  218.     }
  219. }
  220.  
  221. DWORD WINAPI search(LPVOID para)
  222. {
  223.     CMFCApplication1Dlg *t = (CMFCApplication1Dlg*)para;
  224.     CString num, name;
  225.     std::map<CString, CString>::iterator iter;
  226.     t->num_search->GetWindowText(num);
  227.     iter = t->m->find(num);
  228.     if (iter != t->m->end()) {
  229.         name = iter->second;
  230.         t->MessageBox((LPCTSTR)(num + " : " + name), (LPCTSTR)(CString)"已找到 ", MB_OK);
  231.     }
  232.     else {
  233.         t->MessageBox((LPCTSTR)((CString)"未找到"), (LPCTSTR)((CString)"未找到"), MB_OK);
  234.  
  235.     }
  236.     return 0;
  237. }
  238. void CMFCApplication1Dlg::OnBnClickedBtnSearch()
  239. {
  240.     // TODO: 在此添加控件通知处理程序代码
  241.     CreateThread(NULL, 0, search, (LPVOID)this, 0, NULL);
  242. }
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249. void CMFCApplication1Dlg::OnBnClickedBtnOpen()
  250. {
  251.     // TODO: 在此添加控件通知处理程序代码
  252.     CFileDialog dia(TRUE,
  253.         NULL,
  254.         NULL,
  255.         OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  256.         NULL,
  257.         this
  258.     );
  259.     if (IDOK == dia.DoModal()) {
  260.         OnBnClickedBtnReset();;
  261.         std::string filename = (CStringA)dia.GetPathName();
  262.         std::ifstream f;
  263.         f.open(filename, std::ios::in);
  264.         char num[1024], name[1024];
  265.         while (!f.eof()) {
  266.             f >> num >> name;
  267.             CString num1(num), name1(name);
  268.             if (num1.GetLength() > 0 && name1.GetLength() > 0) {
  269.                 m->insert(std::pair<CString, CString>(num1, name1));
  270.                 list_box->AddString(num1 + " : " + name1);
  271.             }
  272.         }
  273.     }
  274. }