// MyTestDlg.cpp: 实现文件
//
#include "pch.h"
#include "framework.h"
#include "MyTest.h"
#include "MyTestDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define IDC_COMBOX_CREATEID 3000
#define IDC_EDIT_CREATEID 3001
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CMyTestDlg 对话框
CMyTestDlg::CMyTestDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MYTEST_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMyTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_list);
}
void CMyTestDlg::createEdit(NM_LISTVIEW* pEditCtrl, CEdit* createdit, int& Item, int& SubItem, bool& havecreat)
{
Item = pEditCtrl->iItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
SubItem = pEditCtrl->iSubItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
createdit->Create(ES_AUTOHSCROLL | WS_CHILD | ES_LEFT | ES_WANTRETURN,
CRect(0, 0, 0, 0), this, IDC_EDIT_CREATEID);//创建编辑框对象,IDC_EDIT_CREATEID为控件ID号3000,在文章开头定义
havecreat = true;
createdit->SetFont(this->GetFont(), FALSE);//设置字体,不设置这里的话上面的字会很突兀的感觉
createdit->SetParent(&m_list);//将list control设置为父窗口,生成的Edit才能正确定位,这个也很重要
CRect EditRect;
m_list.GetSubItemRect(e_Item, e_SubItem, LVIR_LABEL, EditRect);//获取单元格的空间位置信息
EditRect.SetRect(EditRect.left + 1, EditRect.top + 1, EditRect.left + m_list.GetColumnWidth(e_SubItem) - 1, EditRect.bottom - 1);//+1和-1可以让编辑框不至于挡住列表框中的网格线
CString strItem = m_list.GetItemText(e_Item, e_SubItem);//获得相应单元格字符
createdit->SetWindowText(strItem);//将单元格字符显示在编辑框上
createdit->MoveWindow(&EditRect);//将编辑框位置放在相应单元格上
createdit->ShowWindow(SW_SHOW);//显示编辑框在单元格上面
createdit->SetFocus();//设置为焦点
createdit->SetSel(-1);//设置光标在文本框文字的最后
}
void CMyTestDlg::distroyEdit(CListCtrl* list, CEdit* distroyedit, int& Item, int& SubItem)
{
CString meditdata;
distroyedit->GetWindowTextW(meditdata);
list->SetItemText(Item, SubItem, meditdata);//获得相应单元格字符
distroyedit->DestroyWindow();//销毁对象,有创建就要有销毁,不然会报错
}
void CMyTestDlg::createCcombobox(NM_LISTVIEW* pEditCtrl, CComboBox* createccomboboxobj, int& Item, int& SubItem, bool& havecreat)
{
Item = pEditCtrl->iItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
SubItem = pEditCtrl->iSubItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
havecreat = true;
createccomboboxobj->Create(WS_CHILD | WS_VISIBLE | CBS_DROPDOWN | CBS_OEMCONVERT, CRect(0, 0, 0, 0), this, IDC_COMBOX_CREATEID);
createccomboboxobj->SetFont(this->GetFont(), FALSE);//设置字体,不设置这里的话上面的字会很突兀的感觉
createccomboboxobj->SetParent(&m_list);//将list control设置为父窗口,生成的Ccombobox才能正确定位,这个也很重要
CRect EditRect;
m_list.GetSubItemRect(e_Item, e_SubItem, LVIR_LABEL, EditRect);//获取单元格的空间位置信息
EditRect.SetRect(EditRect.left + 1, EditRect.top + 1, EditRect.left + m_list.GetColumnWidth(e_SubItem) - 1, EditRect.bottom - 1);//+1和-1可以让编辑框不至于挡住列表框中的网格线
CString strItem = m_list.GetItemText(e_Item, e_SubItem);//获得相应单元格字符
createccomboboxobj->SetWindowText(strItem);//将单元格字符显示在编辑框上
createccomboboxobj->MoveWindow(&EditRect);//将编辑框位置放在相应单元格上
createccomboboxobj->ShowWindow(SW_SHOW);//显示编辑框在单元格上面
}
void CMyTestDlg::distroyCcombobox(CListCtrl* list, CComboBox* distroyccomboboxobj, int& Item, int& SubItem)
{
CString meditdata;
distroyccomboboxobj->GetWindowTextW(meditdata);
list->SetItemText(Item, SubItem, meditdata);//更新相应单元格字符
distroyccomboboxobj->DestroyWindow();//销毁对象,有创建就要有销毁,不然会报错
}
BEGIN_MESSAGE_MAP(CMyTestDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_NOTIFY(NM_CLICK, IDC_LIST1, &CMyTestDlg::OnClickListStudentdata)
END_MESSAGE_MAP()
// CMyTestDlg 消息处理程序
BOOL CMyTestDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
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); // 设置小图标
// TODO: 在此添加额外的初始化代码
haveeditcreate = false;//初始化标志位,表示还没有创建编辑框
haveccomboboxcreate = false;//初始化标志位,表示还没有创建下拉列表框
RECT m_rect;
m_list.GetClientRect(&m_rect); //获取list的客户区,方便调节每一列的宽度
m_list.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); //设置list风格,LVS_EX_GRIDLINES为网格线(只适用与report风格的listctrl)
//LVS_EX_FULLROWSELECT为选中某行使整行高亮(只适用与report风格的listctrl)
m_list.InsertColumn(0, _T("学号"), LVCFMT_LEFT, m_rect.right / 4);
m_list.InsertColumn(1, _T("姓名"), LVCFMT_LEFT, m_rect.right / 4);
m_list.InsertColumn(2, _T("性别"), LVCFMT_LEFT, m_rect.right / 4);
m_list.InsertColumn(3, _T("班级"), LVCFMT_LEFT, m_rect.right / 4);
m_list.InsertItem(0, _T("09090901"));//添加第一个学生数据
m_list.SetItemText(0, 1, _T("小李"));
m_list.SetItemText(0, 2, _T("男"));
m_list.SetItemText(0, 3, _T("计科0901"));
m_list.InsertItem(1, _T("09090902"));//添加第二个学生数据
m_list.SetItemText(1, 1, _T("小王"));
m_list.SetItemText(1, 2, _T("男"));
m_list.SetItemText(1, 3, _T("计科0902"));
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CMyTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CMyTestDlg::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;
Ge
没有合适的资源?快使用搜索试试~ 我知道了~
MFC中在ListControl下进行下拉框操作
共54个文件
tlog:12个
h:6个
obj:5个
需积分: 2 27 下载量 72 浏览量
2022-07-13
09:29:35
上传
评论
收藏 116.3MB ZIP 举报
温馨提示
动态创建下拉框方案, 实现listcontrol与COmboBox组合
资源详情
资源评论
资源推荐
收起资源包目录
MyTest.zip (54个子文件)
.vs
MyTest
v16
Browse.VC.db 68.34MB
.suo 39KB
ipch
3aaac0b8dc08f5e8.ipch 118.06MB
69260b777adec671.ipch 136.13MB
MyTest.sln 1KB
MyTest
MyTest.h 478B
MyTestDlg.cpp 11KB
framework.h 2KB
pch.h 544B
MyTest.cpp 3KB
MyTest.rc 11KB
res
MyTest.rc2 668B
MyTest.ico 66KB
MyTestDlg.h 2KB
MyTest.vcxproj.user 232B
targetver.h 295B
pch.cpp 158B
MyTest.aps 106KB
x64
Debug
MyTest.res 68KB
MyTest.obj 99KB
MyTestDlg.obj 98KB
vc142.pdb 6.73MB
pch.obj 738KB
MyTest.pch 56.13MB
MyTest.tlog
CL.write.1.tlog 2KB
CL.read.1.tlog 107KB
rc.write.1.tlog 270B
rc.read.1.tlog 4KB
CL.command.1.tlog 3KB
MyTest.lastbuildstate 321B
link.write.1.tlog 978B
link.command.1.tlog 2KB
rc.command.1.tlog 454B
link.read.1.tlog 7KB
MyTest.ilk 2.05MB
vc142.idb 1.33MB
MyTest.log 105B
MyTest.exe.recipe 306B
resource.h 685B
MyTest.vcxproj 10KB
Debug
MyTest.obj 78KB
vc142.pdb 6.61MB
pch.obj 699KB
MyTest.pch 55.81MB
MyTest.tlog
CL.write.1.tlog 2KB
CL.read.1.tlog 106KB
unsuccessfulbuild 0B
CL.command.1.tlog 2KB
MyTest.lastbuildstate 323B
vc142.idb 1.33MB
MyTest.log 2KB
MyTest.vcxproj.filters 2KB
x64
Debug
MyTest.exe 255KB
MyTest.pdb 8.29MB
Debug
共 54 条
- 1
KK_THREESTEP
- 粉丝: 20
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0