高分求MFC CListBox 函数

2024-12-27 23:18:59
推荐回答(2个)
回答1:

CListBox不支持多选,所以第三个就不能实现了,而用clistcontrol就可以多选
至于前两个功能没看明白,最好先设计好界面

回答2:

很无奈啊,刷新数据这里我无法完成;数据已经改变了,但是更新UI没有很好地实现;
思路明显是对的,你看看代码,然后自己思索下;
可以用自绘来实现数据的更新。。

代码给出来吧
定义的CMyArray类:
CMyArray。h

#pragma once
#include "afxtempl.h"
class CMyArray :
public CArray
{
public:
CMyArray(void);
~CMyArray(void);
public:
void up(int index,bool bmore);
void Down(int index,bool bmore);
void Change(int one,int two);
};

CMyArray。cpp

#include "StdAfx.h"

#include "MyArray.h"
CMyArray::CMyArray(void)
{
}
CMyArray::~CMyArray(void)
{
}
void CMyArray::up(int index,bool bmore)
{if(!bmore)
{ if(index==0) return;
CString one=this->GetAt(index);
CString two=this->GetAt(index-1);
this->SetAt(index,two);
this->SetAt(index-1,one);
}
else{
}
}void CMyArray::Down(int index,bool bmore)
{
if(!bmore)
{
if(index==this->GetCount()-1) return;
CString one=this->GetAt(index);
CString two=this->GetAt(index+1);
this->SetAt(index,two);
this->SetAt(index+1,one);
}
else{
}
}
void CMyArray::Change(int one,int two)
{
CString ones=this->GetAt(one);
CString twos=this->GetAt(two);
this->SetAt(one,twos);
this->SetAt(two,ones);
}
CMFC_ListBoxDlg。h

#pragma once
#include "MyArray.h"
// CMFC_ListBoxDlg 对话框
class CMFC_ListBoxDlg : public CDialogEx
{
// 构造
public:
CMFC_ListBoxDlg(CWnd* pParent = NULL);// 标准构造函数
CMyArray m;
void fresh();
// 对话框数据
enum { IDD = IDD_MFC_LISTBOX_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButton2();
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedButton3();
//afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
};

CMFC_ListBoxDlg。cpp

void CMFC_ListBoxDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
CListBox*l=(CListBox*)GetDlgItem(IDC_LIST1);
int index=l->GetCurSel();
m.Down(
index,false);
fresh();l->Invalidate(FALSE);
}
void CMFC_ListBoxDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CListBox*l=(CListBox*)GetDlgItem(IDC_LIST1);
int index=l->GetCurSel();
m.up(
index,false);
fresh();
;
l->Invalidate(FALSE);
}
void CMFC_ListBoxDlg::OnBnClickedButton3()
{
CListBox*l=(CListBox*)GetDlgItem(IDC_LIST1);
int index=l->GetCurSel();
m.change(
index,0);//具体自己实现
fresh();
;
l->Invalidate(FALSE);
// TODO: 在此添加控件通知处理程序代码
}