MFC-初学者的探索-1

#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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值