ListView_CancelEditLabel 是 Win32 API 中用于取消正在进行的列表视图编辑标签操作的函数,该函数位于 Commctrl.h 头文件中。
BOOL ListView_CancelEditLabel(
  HWND hwnd
);

参数说明:
  •  hwnd:指向列表视图控件的句柄。


函数返回值:
  •  如果成功,返回 TRUE;如果失败,返回 FALSE。


这个函数用于取消当前正在进行的编辑标签操作。通常在用户正在编辑标签时,可以通过某些条件或操作来取消编辑,这时可以调用 ListView_CancelEditLabel 函数。

以下是一个简单的示例:
#include <Commctrl.h>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
        case WM_CREATE:
        {
            // 创建列表视图控件
            HWND hListView = CreateWindowEx(0, WC_LISTVIEW, L"",
                                            WS_VISIBLE | WS_CHILD | LVS_REPORT | LVS_EDITLABELS,
                                            10, 10, 300, 200, hwnd, NULL, GetModuleHandle(NULL), NULL);

            if (hListView) {
                // 向列表视图添加列...
                LVCOLUMN lvc;
                lvc.mask = LVCF_TEXT | LVCF_WIDTH;
                lvc.cx = 100;
                lvc.pszText = L"Column 1";
                ListView_InsertColumn(hListView, 0, &lvc);

                // 向列表视图添加项...
                LVITEM lvi;
                lvi.mask = LVIF_TEXT;
                lvi.pszText = L"Item 1";
                ListView_InsertItem(hListView, &lvi);

                // 开始编辑标签
                ListView_EditLabel(hListView, 0);
            }
            break;
        }
        case WM_COMMAND:
        {
            if (LOWORD(wParam) == IDCANCEL) {
                // 取消编辑标签
                HWND hListView = GetDlgItem(hwnd, IDC_LISTVIEW);
                ListView_CancelEditLabel(hListView);
            }
            break;
        }
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }

    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    // 初始化通用控件库
    INITCOMMONCONTROLSEX icex;
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC = ICC_LISTVIEW_CLASSES; // 或其他适当的标志
    if (!InitCommonControlsEx(&icex)) {
        // 初始化失败处理
        return 1;
    }

    // 注册窗口类
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WindowProc, 0L, 0L,
                      GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                      L"ListView_CancelEditLabel Example", NULL };
    RegisterClassEx(&wc);

    // 创建主窗口
    HWND hwnd = CreateWindow(wc.lpszClassName, L"ListView_CancelEditLabel Example",
                             WS_OVERLAPPEDWINDOW, 100, 100, 400, 300,
                             NULL, NULL, wc.hInstance, NULL);

    // 显示主窗口
    ShowWindow(hwnd, SW_SHOWNORMAL);
    UpdateWindow(hwnd);

    // 消息循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    // 注销窗口类
    UnregisterClass(wc.lpszClassName, wc.hInstance);

    return 0;
}

在这个例子中,当用户开始编辑标签后,可以通过按下 "ESC" 键或某个取消按钮等,触发 WM_COMMAND 消息并调用 ListView_CancelEditLabel 函数,从而取消编辑标签。


转载请注明出处:http://www.zyzy.cn/article/detail/24703/Win32 API/Commctrl.h/ListView_CancelEditLabel