C++ 如何将鼠标双击添加到列表框

C++ 如何将鼠标双击添加到列表框,c++,winapi,listbox,C++,Winapi,Listbox,根据本守则: 它可以很好地显示列表和循环 可悲的是,我的导师从未完成他的代码。 所以我们的计划是在名字上添加双击检测。怎么做 case WM_COMMAND: { return 0; } 像这样的?11是此子窗口,其中包含名称 case WM_COMMAND: { if (LOWORD(wparam) == 11) { if ((me

根据本守则:

它可以很好地显示列表和循环

可悲的是,我的导师从未完成他的代码。 所以我们的计划是在名字上添加双击检测。怎么做

        case WM_COMMAND:
        {

            return 0;
        }
像这样的?11是此子窗口,其中包含名称

        case WM_COMMAND:
        {
            if (LOWORD(wparam) == 11) {
                if ((message) == LBN_DBLCLK) {
                    cout << "double click" << endl;
                }
            }
            return 0;
        }
case WM_命令:
{
if(LOWORD(wparam)==11){
如果((消息)==LBN\u DBLCLK){
不能尝试更换:

if ((message) == LBN_DBLCLK)
与:

文档。

首先,根据:

参数

wParam

LOWORD包含列表框的标识符。HIWORD指定通知代码

lParam

列表框的句柄

备注

此通知代码仅通过具有
LBS\u NOTIFY
样式的列表框发送

因此,在第一步中,您需要添加此样式,并使用
HIWORD(wParam)
确定是否双击列表

然后,如果需要获取列表元素,则不应将
LB_GETCURSEL
发送到
window\u handle
,而应将其发送到
This->listbox\u handle
,这是listbox的窗口句柄。然后,可以通过发送
LB_GETTEXT
文本内容来获取它

代码如下:

case WM_COMMAND:
{
    if (HIWORD(wparam) == LBN_DBLCLK) {
        TCHAR temp[100]{};
        int index = SendMessageW(This->listbox_handle, LB_GETCURSEL, 0, 0L);
        SendMessageW(This->listbox_handle, LB_GETTEXT, index, (LPARAM)temp);
        MessageBox(window_handle, temp, L"test", 0);
    }
    return 0;
}
这对我很有用:


是的,我也做到了这一点,但必须添加LBS\U NOTIFY以使子窗口消息通过。好的(这通常由资源编辑器设置,但我看到您没有使用它)。那么,您现在遇到了什么问题?您是否尝试过在
case WM_COMMAND
之后的行上放置断点并检查
wParam
?我很想知道单击了什么文本。查看了windows visual studio 2019上的对话框编辑器。我可以在那里构建,但如何将其导出到我的代码中?@ayesl
LBN_DBLCLK
不会告诉您这些信息。您必须处理这些信息,否则将发送cout
case WM_COMMAND:
{
    if (HIWORD(wparam) == LBN_DBLCLK) {
        TCHAR temp[100]{};
        int index = SendMessageW(This->listbox_handle, LB_GETCURSEL, 0, 0L);
        SendMessageW(This->listbox_handle, LB_GETTEXT, index, (LPARAM)temp);
        MessageBox(window_handle, temp, L"test", 0);
    }
    return 0;
}