代码无误但LCD12864无反应
时间: 2023-11-12 11:37:38 浏览: 32
实现鼠标自由拖拽式选中与复制Listbox控件的文本,需要在对话框类中重载以下消息处理函数:
1. WM_LBUTTONDOWN: 当鼠标左键按下时,记录鼠标的起始位置和当前选中的项。
2. WM_MOUSEMOVE: 当鼠标移动时,根据当前鼠标位置计算出选中的项,并更新Listbox控件的选择状态。
3. WM_LBUTTONUP: 当鼠标左键松开时,将选中的文本复制到剪切板中。
以下是示例代码:
// 在对话框类中添加以下成员变量
CListBox m_listBox;
CPoint m_startPoint;
int m_startIndex = -1;
int m_endIndex = -1;
// 在OnInitDialog函数中初始化Listbox控件,并为其添加消息处理函数
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 初始化Listbox控件
m_listBox.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | LBS_HASSTRINGS | LBS_NOTIFY,
CRect(10, 10, 200, 200), this, IDC_LIST_BOX);
m_listBox.AddString(_T("Item 1"));
m_listBox.AddString(_T("Item 2"));
m_listBox.AddString(_T("Item 3"));
m_listBox.AddString(_T("Item 4"));
m_listBox.AddString(_T("Item 5"));
m_listBox.AddString(_T("Item 6"));
// 为Listbox控件添加消息处理函数
m_listBox.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_listBox.ModifyStyleEx(0, LVS_EX_GRIDLINES);
m_listBox.SetFocus();
m_listBox.SendMessage(LB_SETCURSEL, 0, 0);
m_listBox.SetFont(GetFont());
return TRUE;
}
// 在消息映射中添加以下消息处理函数
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
// 鼠标左键按下
ON_WM_LBUTTONDOWN()
// 鼠标移动
ON_WM_MOUSEMOVE()
// 鼠标左键松开
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()
// 鼠标左键按下
void CMyDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
m_startPoint = point;
m_startIndex = m_listBox.ItemFromPoint(point, TRUE);
m_endIndex = m_startIndex;
m_listBox.SetSel(m_startIndex, TRUE);
CDialogEx::OnLButtonDown(nFlags, point);
}
// 鼠标移动
void CMyDialog::OnMouseMove(UINT nFlags, CPoint point)
{
if (nFlags & MK_LBUTTON)
{
int index = m_listBox.ItemFromPoint(point, TRUE);
if (index != LB_ERR)
{
m_endIndex = index;
m_listBox.SetSel(m_startIndex, FALSE);
m_listBox.SetSel(index, TRUE);
}
}
CDialogEx::OnMouseMove(nFlags, point);
}
// 鼠标左键松开
void CMyDialog::OnLButtonUp(UINT nFlags, CPoint point)
{
CString text;
int count = m_listBox.GetSelCount();
if (count > 0)
{
int* indices = new int[count];
m_listBox.GetSelItems(count, indices);
for (int i = 0; i < count; i++)
{
CString itemText;
m_listBox.GetText(indices[i], itemText);
text += itemText + _T("\r\n");
}
delete[] indices;
if (OpenClipboard())
{
EmptyClipboard();
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, (text.GetLength() + 1) * sizeof(TCHAR));
if (hMem != NULL)
{
TCHAR* pText = (TCHAR*)GlobalLock(hMem);
_tcscpy_s(pText, text.GetLength() + 1, text);
GlobalUnlock(hMem);
SetClipboardData(CF_UNICODETEXT, hMem);
}
CloseClipboard();
}
}
m_listBox.SetSel(m_startIndex, FALSE);
m_startIndex = -1;
m_endIndex = -1;
CDialogEx::OnLButtonUp(nFlags, point);
}