为什么列表框不显示使用 Visual C++ 6 的元素?

Why is Listboxes not displaying elements using Visual C++ 6?

所以,我遇到了一个列表框问题,我希望它显示的条目在 Visual C++ 6 中没有显示。

代码如下

switch (m) {
    case WM_INITDIALOG: //To initiate the dialog box
    {
        HICON hicon = (HICON__ *)LoadImageW(GetModuleHandleW(NULL), MAKEINTRESOURCEW(IDI_ICONMAIN), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE);
        SendMessageW(h, WM_SETICON, ICON_BIG, (long)hicon);
        RECT Rect;
        ::GetWindowRect(h, &Rect);
        ::SetWindowPos(h, HWND_TOPMOST, (::GetSystemMetrics(SM_CXSCREEN)/2 - ((Rect.right - Rect.left)/2)), (::GetSystemMetrics(SM_CYSCREEN)/2 - ((Rect.bottom - Rect.top)/2)), (Rect.right - Rect.left), (Rect.bottom - Rect.top), SWP_SHOWWINDOW);
        //Place items in listbox.
        const std::string StringArray[] = {"10", "20", "30", "40", "50", "60", "70"};
        SendMessage(h, LB_ADDSTRING, DROPDOWN1, (LPARAM)StringArray);
        return TRUE;
    }

C++ 不是 C#。原始数组不是 类 并且没有方法。

使用std::vector< std::string >.

但在那之前,a good C++ book 学习 C++。

ETA 由于您在尝试调用 StringArray 变量上不存在的 .Length 以在for 循环...

LB_ADDSTRING 消息的 MSDN 文档中的哪些内容使您认为它会接受 std::stringstd::string 不是以 NULL 结尾的字符数组。您为什么认为可以将 std::string 的数组转换为 LPARAM

你想要的更像是:(我没有编译这段代码。)

typedef std::vector< std::string > string_vec;
const string_vec StringArray{"10", "20", "30", "40", "50", "60", "70"};

for( const auto & s : StringArray )
{
    SendMessage(h, LB_ADDSTRING, DROPDOWN1, (LPARAM)( s.c_str() ) );
}

Range-based for

N.B。这是现代 C++,不是古老的,过时的 VC++ 6.