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

Posted

技术标签:

【中文标题】为啥列表框不使用 Visual C++ 6 显示元素?【英文标题】:Why is Listboxes not displaying elements using Visual C++ 6?为什么列表框不使用 Visual C++ 6 显示元素? 【发布时间】:2016-02-11 21:04:30 【问题描述】:

所以,我有一个列表框问题,我希望它显示的条目没有在 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++ 6 实际上是什么? 您将消息发送到错误的窗口。使用描述性变量名称,“h”很烂。 @πάνταῥεῖ 快速谷歌让我觉得他的意思是 Visual C++ 6,但我们不能确定。 你需要一个一个地发送字符串,你不能发送这样的数组。 Win32 对 std::string 一无所知,因此您需要发送原始 c 字符串,即 StringArray[i].c_str() 您从哪里得到可以像这样使用LB_ADDSTRING 的想法? LB_ADDSTRING 需要一个指向单个零结尾字符串的指针 lparam。您正在发送一个指向 array 的指针。除此之外,该数组还包含std::string 对象,它们根本不是以零结尾的字符串。 【参考方案1】:

C++ 不是 C#。原始数组不是类,也没有方法。

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

但在此之前,请获取a good C++ book 并学习 C++。

ETA 由于您在尝试调用 StringArray 变量上不存在的 .Length 以在 for 循环中遍历它的地方进行了编辑...

MSDN 文档中关于 LB_ADDSTRING 消息的哪些内容让您认为它会接受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

注意这是现代的 C++,而不是古老的过时的 VC++ 6。

【讨论】:

以上是关于为啥列表框不使用 Visual C++ 6 显示元素?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个组合框不显示项目?

为啥我用Microsoft Visual C++ 6.0运行c语言文件出错?

德尔福。为啥要在 Windows 7 64 位上以发布模式编译程序。但是文本框不显示文本?

为啥visual c++打开之后就自动关闭了?

使用 Microsoft Visual C++ 6 的 FTP 事务

为啥消息框不阻塞线程? [复制]