MFC部分控件简单使用

    xiaoxiao2025-08-27  24

    一.List Control列表控件(隶属于CListCtrl类)

    1. CListCtrl 风格

    LVS_ICON: //为每个item显示大图标 LVS_SMALLICON: //为每个item显示小图标 LVS_LIST: //显示一列带有小图标的item LVS_REPORT: //显示item详细资料 //直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”

    2. 设置listctrl 风格及扩展风格

    LONG lStyle; lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口style lStyle &= ~LVS_TYPEMASK; //清除显示方式位 lStyle |= LVS_REPORT; //设置style SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置style DWORD dwStyle = m_list.GetExtendedStyle(); dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl) dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl) dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件 m_list.SetExtendedStyle(dwStyle); //设置扩展风格

    3. 插入数据

    m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列 m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 ); int nRow = m_list.InsertItem(0, "11");//插入行 m_list.SetItemText(nRow, 1, "jacky");//设置数据

    4. 删除所有列

    // 方法一: while ( m_list.DeleteColumn (0)) //因为你删除了第一列后,后面的列会依次向上移动。 //方法二: int nColumns = 4; for (int i=nColumns-1; i>=0; i--) m_list.DeleteColumn (i);

    5. 单行删除(删除最后一行)

    int n = 0;//全局变量,代表之前添加的行 if(n == 0) { AfxMessageBox("列表中无项目,请添加"); return FALSE; } n--; m_list.DeleteItem(n);

    6. 单行删除(删除选中行)

    if(n == 0) { AfxMessageBox("列表中无项目,请添加"); return FALSE; } for(int i=0;i<m_list.GetItemCount();i++) { if(m_list.GetItemState(i,LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))//复选框被选中或者该行被选中 { m_list.DeleteItem(i); n--; } }

    二.ComboBox控件

    1.在类向导中创建控件关联成员变量m_Combo,类型为CComboBox 控件属性为下拉列表,并去掉分类属性(按照写入字串的顺序排序而非字母顺序)。 2.在初始化函数OnInitDialog()中添加控件初始化显示的内容 m_Combo.AddString("汉族"); m_Combo.AddString("其他"); // ((CComboBox*)GetDlgItem(IDC_NATION))->AddString("另一种");//此方法也可以,但是不够简单 m_Combo.SetCurSel(0);//初始化选择"汉族" 3.获取当前选择字串 CString str; int nSel = m_Combo.GetCurSel(); m_Combo.GetLBText(nSel,str); 代码

    BOOL CListctrlDlg::OnInitDialog() { CDialog::OnInitDialog(); //去掉CComboBox分类属性 m_Nation.AddString("汉族"); m_Nation.AddString("其他"); // ((CComboBox*)GetDlgItem(IDC_NATION))->AddString("haiyou");//此方法也可以,但是不够简单 m_Nation.SetCurSel(0); // m_list.Create(LVS_REPORT,CRect(0,0,100,100),this,IDC_LIST); // Add "About..." menu item to system menu. AddList(); // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control } //列表属性要调成“报告” BOOL CListctrlDlg::AddList() { for(int i=0;i<10;i++) { m_list.DeleteColumn(i); } m_list.InsertColumn(0,"工号",LVCFMT_LEFT,60); m_list.InsertColumn(1,"姓名",LVCFMT_LEFT,70); m_list.InsertColumn(2,"部门",LVCFMT_LEFT,50); m_list.InsertColumn(3,"性别",LVCFMT_LEFT,50); m_list.InsertColumn(4,"学历",LVCFMT_LEFT,60); m_list.InsertColumn(5,"外语",LVCFMT_LEFT,60); m_list.InsertColumn(6,"民族",LVCFMT_LEFT,60); m_list.InsertColumn(7,"入职日期",LVCFMT_LEFT,100); //设置背景及风格 m_list.SetExtendedStyle(LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES); m_list.SetBkColor(RGB(220,240,240)); //设置背景颜色 m_list.SetTextBkColor(RGB(220,240,240));//设置文字背景颜色 m_list.SetTextColor(RGB(128,64,0)); //设置文字颜色 return TRUE; } //增加行的函数 BOOL CListctrlDlg::AddListItem() { UpdateData();//更新数据,不添加此行,数据无法及时传递进来 if(m_szName == ""||m_szNumber == ""||m_szBranch == "") { AfxMessageBox("不能有项为空,请填充后再添加!"); return FALSE; } int nCount = m_list.GetItemCount();//获取当前已经存在的行数 m_list.InsertItem(nCount,m_szNumber); m_list.SetItemText(nCount,1,m_szName); m_list.SetItemText(nCount,2,m_szBranch); m_list.SetItemText(nCount,3,m_nSex?"女":"男"); char *p[]={"高中","大学","硕士","博士"}; m_list.SetItemText(nCount,4,p[m_nEduca]); //对于复选框,选中为真,初始化都为FALSE(定义成员变量的时候在构造函数中已经初始化) CString str; if(m_bEngl) str += "英"; if(m_bJapa) str += "日"; if(m_bRuss) str += "俄"; if(m_bKorea) str += "韩"; if(str.IsEmpty()) str += "无"; m_list.SetItemText(nCount,5,str); int nSel = m_Nation.GetCurSel(); m_Nation.GetLBText(nSel,str); m_list.SetItemText(nCount,6,str); str.Format("%d-%d-%d",m_dtJoin.GetYear(),m_dtJoin.GetMonth(),m_dtJoin.GetDay()); m_list.SetItemText(nCount,7,str); // ++n; return TRUE; } //删除行的函数 BOOL CListctrlDlg::DeleteListItem() { // while ( m_list.DeleteColumn (0)); //删除列 /* if(n == 0) { AfxMessageBox("列表中无项目,请添加"); return FALSE; } for(int i=0;i<m_list.GetItemCount();i++) { if(m_list.GetItemState(i,LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))//复选框被选中或者该行被选中 { m_list.DeleteItem(i); n--; } }*/ POSITION pos = m_list.GetFirstSelectedItemPosition(); if (pos == NULL) { AfxMessageBox("请先选择一行再删除!"); return FALSE; } else { while (pos) { int nItem = m_list.GetNextSelectedItem(pos); m_list.DeleteItem(nItem); } } return TRUE; } //修改行内容 BOOL CListctrlDlg::ModListItem() { POSITION pos = m_list.GetFirstSelectedItemPosition(); if (pos == NULL) { AfxMessageBox("请先选择一行再修改!"); return FALSE; } int nItem = m_list.GetNextSelectedItem(pos); UpdateData(); // int nCount = m_list.GetItemCount();//获取当前已经存在的行数 m_list.SetItemText(nItem,0,m_szNumber); m_list.SetItemText(nItem,1,m_szName); m_list.SetItemText(nItem,2,m_szBranch); m_list.SetItemText(nItem,3,m_nSex?"女":"男"); char *p[]={"高中","大学","硕士","博士"}; m_list.SetItemText(nItem,4,p[m_nEduca]); //对于复选框,选中为真,初始化都为FALSE(定义成员变量的时候在构造函数中已经初始化) CString str; if(m_bEngl) str += "英"; if(m_bJapa) str += "日"; if(m_bRuss) str += "俄"; if(m_bKorea) str += "韩"; if(str.IsEmpty()) str += "无"; m_list.SetItemText(nItem,5,str); int nSel = m_Nation.GetCurSel(); m_Nation.GetLBText(nSel,str); m_list.SetItemText(nItem,6,str); str.Format("%d-%d-%d",m_dtJoin.GetYear(),m_dtJoin.GetMonth(),m_dtJoin.GetDay()); m_list.SetItemText(nItem,7,str); return TRUE; } //增加行的按钮响应 void CListctrlDlg::OnAdd() { AddListItem(); } //修改按键 void CListctrlDlg::OnMod() { ModListItem(); } //删除行按钮响应 void CListctrlDlg::OnDeleteall() { DeleteListItem(); } //主要是为了添加是否关闭对话框消息 void CListctrlDlg::OnClose() { if(AfxMessageBox("是否关闭窗口?",MB_YESNO) == IDYES) CDialog::OnClose(); else return; }

    转载请注明原文地址: https://ju.6miu.com/read-1302030.html
    最新回复(0)