MFC中ListBox实现商品的入库和出库

本文介绍了如何在MFC应用程序中利用ListBox控件实现商品的入库和出库功能。通过设置ListBox的Selection属性为Extended,允许多选。详细展示了入库、出库按钮的响应函数,以及如何根据选中状态调整按钮有效性。同时,文章还提到了MFC ListBox类提供的常用操作函数,如添加、删除、获取和设定选中行等。
摘要由CSDN通过智能技术生成

在开发实例中,经常会用到商品的入库和出库功能

下面让我们来完成这简单功能的实现


首先,我们为listbox设置Selection属性为Extended 。该属性可以设置为用Shift+鼠标左键选择多个条目。

下面是界面图形。




然后并为各个空间关联变量。


“入库”按钮的BN_CLICKED消息响应函数如下:





void CMFCApplication7Dlg::OnBnClickedButton3()
{
// TODO:  在此添加控件通知处理程序代码
UpdateData(TRUE);
if (m_unit.IsEmpty()){
AfxMessageBox(_T("装备名称不能为空"));
return;
}
m_ctlLis1.AddString(m_unit);
m_unit = "";
UpdateData(FALSE);


}



借出,归还的响应函数如下:


void CMFCApplication7Dlg::OnBnClickedButton1()
{
// TODO:  借出


int nCount = m_ctlLis1.GetSelCount();
if (!nCount){
return; 
}

MFC,可以通过重载Listbox控件的OnLButtonDown、OnMouseMove、OnLButtonUp等消息响应函数来实现鼠标拖拽式复制。以下是具体实现步骤: 1.在Listbox的OnLButtonDown消息响应函数,记录鼠标按下的位置和选项的索引。 2.在Listbox的OnMouseMove消息响应函数,判断鼠标是否移动超过一定距离,如果是,则开始拖拽操作。 3.在拖拽操作,创建一个拖拽数据对象,将选项的数据存入其,并调用DoDragDrop函数开始拖拽操作。 4.在Listbox的OnLButtonUp消息响应函数,判断是否是拖拽操作,如果是,则结束拖拽操作。 5.在目标控件的OnDrop消息响应函数,获取拖拽数据对象的数据,并将其插入到目标控件。 下面是具体代码实现: // Listbox控件的消息响应函数 void CMyListBox::OnLButtonDown(UINT nFlags, CPoint point) { // 记录鼠标按下的位置和选项的索引 m_ptStartDrag = point; m_nStartDragIndex = GetCurSel(); CListBox::OnLButtonDown(nFlags, point); } void CMyListBox::OnMouseMove(UINT nFlags, CPoint point) { if (nFlags & MK_LBUTTON) { // 判断是否移动超过一定距离,如果是,则开始拖拽操作 if (abs(point.x - m_ptStartDrag.x) > DRAG_THRESHOLD || abs(point.y - m_ptStartDrag.y) > DRAG_THRESHOLD) { // 创建拖拽数据对象 COleDataSource* pDataSource = new COleDataSource(); CString strData = GetText(m_nStartDragIndex); pDataSource->CacheGlobalData(CF_UNICODETEXT, (HGLOBAL)strData.GetBuffer(), -1); // 开始拖拽操作 DROPEFFECT dropEffect = pDataSource->DoDragDrop(DROPEFFECT_COPY | DROPEFFECT_MOVE); // 释放拖拽数据对象 delete pDataSource; // 结束拖拽操作 if (dropEffect & DROPEFFECT_MOVE) { DeleteString(m_nStartDragIndex); } } } CListBox::OnMouseMove(nFlags, point); } void CMyListBox::OnLButtonUp(UINT nFlags, CPoint point) { if (nFlags & MK_LBUTTON) { // 判断是否是拖拽操作 if (m_nStartDragIndex >= 0) { m_nStartDragIndex = -1; m_ptStartDrag = CPoint(0, 0); } } CListBox::OnLButtonUp(nFlags, point); } // 目标控件的消息响应函数 DROPEFFECT CMyTargetCtrl::OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) { // 判断数据类型是否匹配 if (pDataObject->IsDataAvailable(CF_UNICODETEXT)) { return DROPEFFECT_COPY; } return DROPEFFECT_NONE; } BOOL CMyTargetCtrl::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point) { // 获取拖拽数据对象的数据 HGLOBAL hGlobal = pDataObject->GetGlobalData(CF_UNICODETEXT); if (hGlobal != NULL) { LPWSTR lpData = (LPWSTR)GlobalLock(hGlobal); CString strData(lpData); GlobalUnlock(hGlobal); GlobalFree(hGlobal); // 将数据插入到目标控件 InsertString(GetCount(), strData); SetCurSel(GetCount() - 1); return TRUE; } return FALSE; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值