Listview C++ win32 API - 例子不工作。

问题描述 投票:0回答:1

我正试图用C++与win32 api创建一个列表视图,然而mdsn上提供的代码却给我一个错误。

HWND CreateListView (HWND hwndParent) 
{
    INITCOMMONCONTROLSEX icex;           // Structure for control initialization.
    icex.dwICC = ICC_LISTVIEW_CLASSES;
    InitCommonControlsEx(&icex);

    RECT rcClient;                       // The parent window's client area.

    GetClientRect (hwndParent, &rcClient); 

    // Create the list-view window in report view with label editing enabled.
    HWND hWndListView = CreateWindow(WC_LISTVIEW, //ERROR red line under create window
                                     L"",
                                     WS_CHILD | LVS_REPORT | LVS_EDITLABELS,
                                     0, 0,
                                     rcClient.right - rcClient.left,
                                     rcClient.bottom - rcClient.top,
                                     hwndParent,
                                     (HMENU)IDM_CODE_SAMPLES, //ERROR IDM CODE SAMPLES undefined
                                     g_hInst, //ERROR
                                     NULL); 

    return (hWndListView);
}

这个例子是直接来自mdsn,我不知道为什么它不能工作。我得到了IDM_CODE_SAMPLES Undefined,以及createwindow的一些问题。请帮我把这个工作做好,这将是非常有帮助的。

c++ api listview winapi createwindow
1个回答
1
投票

IDM_CODE_SAMPLES 是你要分配给你的控件的ID。你可以将符号定义为一个数值,或者直接使用数值 (选100例如,)。) 如果你想引用一个特定的控件,ID是有用的,尽管它的 HWND 同样可以作为一个ID。

g_hInst 大概是一个全局变量,类型为 HMODULE,初始化自 WinMain. 如果你不想使用全局变量,你可以调用 GetModuleHandle(nullptr) 取而代之,前提是你编译的是.exe而不是.dll。

当你在编译时,你会得到很多有用的信息。用C++介绍Win32编程.


0
投票

我现在得到一个错误(1个未解决的外部因素)

我们可以从 InitCommonControlsEx 功能。

确保加载通用控制DLL(Comctl32.dll),并从DLL中注册特定的通用控制类。

添加。

#include <commctrl.h>    
#pragma comment(lib,"Comctl32.lib")

最小的代码示例。

#ifndef UNICODE
#define UNICODE
#endif 

#include <windows.h>
#include <commctrl.h>

#pragma comment(lib,"Comctl32.lib")

#define IDM_CODE_SAMPLES 101

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
HWND CreateListView(HWND hwndParent);

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
    // Register the window class.
    const wchar_t CLASS_NAME[] = L"Sample Window Class";

    WNDCLASS wc = { };

    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = CLASS_NAME;

    RegisterClass(&wc);

    // Create the window.

    HWND hwnd = CreateWindowEx(
        0,                              // Optional window styles.
        CLASS_NAME,                     // Window class
        L"Learn to Program Windows",    // Window text
        WS_OVERLAPPEDWINDOW,            // Window style

        // Size and position
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

        NULL,       // Parent window    
        NULL,       // Menu
        hInstance,  // Instance handle
        NULL        // Additional application data
    );
    CreateListView(hwnd);
    if (hwnd == NULL)
    {
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);

    // Run the message loop.

    MSG msg = { };
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;

    case WM_PAINT:
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hwnd, &ps);

        EndPaint(hwnd, &ps);
    }
    return 0;

    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

HWND CreateListView(HWND hwndParent)
{
    INITCOMMONCONTROLSEX icex;           // Structure for control initialization.
    icex.dwICC = ICC_LISTVIEW_CLASSES;
    InitCommonControlsEx(&icex);

    RECT rcClient;                       // The parent window's client area.

    GetClientRect(hwndParent, &rcClient);

    // Create the list-view window in report view with label editing enabled.    
    HWND hWndListView = CreateWindow(WC_LISTVIEW, //ERROR red line under create window
        L"",
        WS_CHILD | LVS_REPORT | LVS_EDITLABELS,
        0, 0,
        rcClient.right - rcClient.left,
        rcClient.bottom - rcClient.top,
        hwndParent,
        (HMENU)IDM_CODE_SAMPLES, //ERROR IDM CODE SAMPLES undefined
        GetModuleHandle(nullptr), //ERROR
        NULL);

    return (hWndListView);
}
© www.soinside.com 2019 - 2024. All rights reserved.