#include "stdafx.h"
#include "test.h"
#include "Infadddlg.h"
#include "afxdialogex.h"
// CInfadddlg 对话框
IMPLEMENT_DYNAMIC(CInfadddlg, CDialog)
CInfadddlg::CInfadddlg(CWnd* pParent /*=NULL*/)
: CDialog(CInfadddlg::IDD, pParent)
{
}
CInfadddlg::~CInfadddlg()
{
}
void CInfadddlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CInfadddlg, CDialog)
ON_BN_CLICKED(IDC_ADD_ADD, &CInfadddlg::OnBnClickedAddAdd)
ON_BN_CLICKED(IDC_ADD_CLOSE, &CInfadddlg::OnBnClickedAddClose)
ON_BN_CLICKED(IDC_ADD_CLEAN, &CInfadddlg::OnBnClickedAddClean)
END_MESSAGE_MAP()
// CInfadddlg 消息处理程序
BOOL CInfadddlg::OnInitDialog()
{
CDialog::OnInitDialog();
CComboBox *pob1 = (CComboBox *)GetDlgItem(IDC_ADD_POB1);
pob1->SetCurSel(0); // 下拉列表的初始索引
CComboBox *pob2 = (CComboBox *)GetDlgItem(IDC_ADD_POB2);
pob2->SetCurSel(0); // 下拉列表的初始索引
CComboBox *p_id = (CComboBox *)GetDlgItem(IDC_ADD_ID);
p_id->SetCurSel(0); // 下拉列表的初始索引
CComboBox *p_sala = (CComboBox *)GetDlgItem(IDC_ADD_SALA);
p_sala->SetCurSel(0); // 下拉列表的初始索引
CDateTimeCtrl *p_ctc = (CDateTimeCtrl *)GetDlgItem(IDC_ADD_TIME);
CTime time(1990,1,1,0,0,0);
p_ctc->SetTime(&time);
return TRUE;
}
void CInfadddlg::OnBnClickedAddAdd()
{
if(GetFocus() != GetDlgItem(IDC_ADD_NAME)) // 如果焦点不在IDC_ADD_NAME上
{
CDialog::NextDlgCtrl(); // 将焦点转移到下个控件(但似乎受到了影响,可能是触发了基类的消息)
};
CEdit *edit[9];
CString str[9];
CListCtrl &list = m_pdlg->m_List;
int i ;
for(i=0; i<9;i++)
{
edit[i] = (CEdit *)GetDlgItem(1007+i); // 在resource.h中将控件的ID进行的编号的处理;
edit[i]->GetWindowTextA(str[i]);
};
int nCount = list.GetItemCount();
for(i=0;i<nCount;i++)
{
if(list.GetItemText(i,0) == str[0])
{
AfxMessageBox("该用户已存在!");
return ;
}
}
for(i=0;i<9;i++)
{
if(str[i]=="")
{
AfxMessageBox("请输入完整的用户信息!");
return ;
}
};
if ((!Is_number(str[1])))
{
AfxMessageBox("“QQ号”处的输入有非法字符!");
return;
};
if (!Is_number(str[8]))
{
AfxMessageBox("“薪资”处的输入有非法字符!");
return;
};
list.InsertItem(nCount,str[0]); // 在处理列表框控件时,必须先插入首项;
list.SetItemText(nCount,1,str[1]);
list.SetItemText(nCount,2,str[2]);
list.SetItemText(nCount,3,str[3]+str[4]+str[5]);
list.SetItemText(nCount,4,str[6]);
list.SetItemText(nCount,5,str[7]);
list.SetItemText(nCount,6,str[8]);
}
BOOL CInfadddlg::Is_number(CString str) // 判断是否为数字
{
int n = str.GetLength();
for (int i = 0; i < n; i++)
if ((str[i]!='.'&&str[i]<'0') || (str[i]>'9'&&str[i]!='.'))
{
return FALSE;
}
return TRUE;
}
void CInfadddlg::OnBnClickedAddClose()
{
CDialog::OnCancel();
}
void CInfadddlg::OnBnClickedAddClean() // 清空文字
{
CEdit *edit[9];
CString str[9];
CListCtrl &list = m_pdlg->m_List;
int i;
for (i = 0; i < 9; i++)
{
edit[i] = (CEdit *)GetDlgItem(1007 + i);
str[i] = "";
edit[i]->SetWindowTextA(str[i]);
}
}
// testDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "test.h"
#include "testDlg.h"
#include "afxdialogex.h"
#include "Infadddlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CtestDlg 对话框
CtestDlg::CtestDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CtestDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CtestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CtestDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_INF_ADD, &CtestDlg::OnBnClickedInfAdd)
ON_BN_CLICKED(IDC_INF_MIX, &CtestDlg::OnBnClickedInfMix)
ON_BN_CLICKED(IDC_INF_OPEN, &CtestDlg::OnBnClickedInfOpen)
ON_BN_CLICKED(IDC_INF_SAVE, &CtestDlg::OnBnClickedInfSave)
END_MESSAGE_MAP()
// CtestDlg 消息处理程序
BOOL CtestDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
m_List.SubclassDlgItem(IDC_INF_LIST,this); // 注意如果在头文件中定义为 CListCtrl * m_List可能导致错误;原因是m_List的起始的地址为空;
m_List.InsertColumn(0,"用户名",0,60);
m_List.InsertColumn(1,"QQ号",0,60);
m_List.InsertColumn(2,"邮箱",0,100);
m_List.InsertColumn(3,"出生地",0,100);
m_List.InsertColumn(4,"出生日期",0,100);
m_List.InsertColumn(5,"身份",0,100);
m_List.InsertColumn(6,"薪资",0,100);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CtestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CtestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
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;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CtestDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CtestDlg::OnBnClickedInfAdd()
{
CInfadddlg dlg;
dlg.m_pdlg = this; // 在infadddlg的成员变量m_pdlg中,使其指向该对话框(以便进行操作)
dlg.DoModal();
}
void CtestDlg::OnBnClickedInfMix()
{
AfxMessageBox("“修改”按键被按下!");
}
void CtestDlg::OnBnClickedInfOpen()
{
TCHAR *szFilter = "信息记录(*.dat)|*.dat|所用文件(*.*)|*.*||";
CFileDialog dlg(TRUE,".dat","",NULL,szFilter); // TRUE 代表“打开”
if (IDCANCEL == dlg.DoModal())
return;
CFile file;
CString szFile = dlg.GetPathName(); // 获取打开的文件路径;
if (!file.Open(szFile, CFile::modeReadWrite | CFile::shareDenyNone))
return;
/*CFileStatus status;
file.GetStatus(status);
int i = 0;
while (file.Read(&status, status.m_size))
{
m_List.InsertItem(i,)
}*/
m_List.DeleteAllItems(); // 删除列表控件中的所有项
Info inf;
CString str1,str2;
int i = 0;
while (file.Read(&inf, sizeof(inf)))
{
m_List.InsertItem(i, inf.s_name);
str1.Format("%d", inf.n_qq); // INT型的变量,需要格式的转化
m_List.SetItemText(i,1, str1);
m_List.SetItemText(i, 2, inf.s_mail);
m_List.SetItemText(i, 3, inf.s_pob);
m_List.SetItemText(i, 4, inf.s_time);
m_List.SetItemText(i, 5, inf.s_id);
str2.Format("%d", inf.n_sala); // INT型的变量,需要格式的转化
m_List.SetItemText(i, 6, str2);
i++;
}
}
void CtestDlg::OnBnClickedInfSave()
{
TCHAR *szFilter = "信息记录(*.dat)|*.dat|所用文件(*.*)|*.*||";
CFileDialog dlg(FALSE, ".dat", "", NULL, szFilter); // FALSE 代表“另存为”
if (IDCANCEL == dlg.DoModal())
return;
CFile file;
CString szFileName = dlg.GetPathName();
if (!file.Open(szFileName, CFile::modeCreate | CFile::modeWrite))
return;
Info inf; // 在“stdafx.h”中定义的结构体
int nCount = m_List.GetItemCount(); // 获取列表框中的项的总数;
for (int i = 0; i < nCount; i++)
{
m_List.GetItemText(i, 0, inf.s_name, sizeof(inf.s_name));
inf.n_qq = atoi(m_List.GetItemText(i, 1)); // 将字符串转换成 INT型
m_List.GetItemText(i, 2, inf.s_mail, sizeof(inf.s_mail));
m_List.GetItemText(i, 3, inf.s_pob, sizeof(inf.s_pob));
m_List.GetItemText(i, 4, inf.s_time, sizeof(inf.s_time));
m_List.GetItemText(i, 5, inf.s_id, sizeof(inf.s_id));
inf.n_sala = atoi(m_List.GetItemText(i, 6)); // 注意:格式的转化
file.Write(&inf, sizeof(inf));
}
}
resources.h
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ 生成的包含文件。
// 供 test.rc 使用
//
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_TEST_DIALOG 102
#define IDD_INF_DIALOG 102
#define IDR_MAINFRAME 128
#define IDD_ADD_DIALOG 129
#define IDD_INF_ADD_DIALOG 129
#define IDC_INF_ADD 1001
#define IDC_INF_DEL 1002
#define IDC_INF_MIX 1003
#define IDC_INF_OPEN 1004
#define IDC_INF_SAVE 1005
#define IDC_INF_LIST 1006
#define IDC_ADD_NAME 1007
#define IDC_ADD_QQ 1008
#define IDC_ADD_MAIL 1009
#define IDC_ADD_POB1 1010
#define IDC_ADD_POB2 1011
#define IDC_ADD_POB3 1012
#define IDC_ADD_TIME 1013
#define IDC_ADD_ID 1014
#define IDC_ADD_SALA 1015
#define IDC_ADD_ADD 1016
#define IDC_ADD_CLOSE 1017
#define IDC_ADD_CLEAN 1018
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 131
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1021
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif