Win32 LB_GETTEXT 返回垃圾

2024-02-03

我有一个问题,很可能是一个简单的问题,但对我来说仍然是一个问题。我在 Win32 / C++ 中使用列表框,当从列表框中获取选定的文本时,返回的字符串只是垃圾。它是结构或类似结构的句柄?

下面是代码和我得到的示例。

std::string Listbox::GetSelected() {
int index = -1;
int count = 0;

count = SendMessage(control, LB_GETSELCOUNT, 0, 0);

if(count > 0) {
    index = SendMessage(control, LB_GETSEL, 0, 0);
}

return GetString(index);
}


std::string Listbox::GetString(int index) {
int count = 0;
int length = 0;
char * text;

if(index >= 0) {
    count = GetItemCount();

    if(index < count) {
        length = SendMessage(control, LB_GETTEXTLEN, (WPARAM)index, 0);
        text = new char[length + 1];

        SendMessage(control, LB_GETTEXT, (WPARAM)index, (LPARAM)text);
    }
}
std::string s(text);
delete[] text;

return s;
}

GetItemCount 就是这样做的。它只是获取列表框中当前的项目数。

我从列表框中抓取的字符串是“Test String”,它返回了“Tzã”

如有任何帮助,我们将不胜感激,谢谢。

好的,我将范围缩小到 GetSelected 函数,因为 GetString 返回正确的字符串。


LB_GETSEL 消息不返回所选项目的索引,它返回您在 WPARAM 中传递的 ITEM 的所选状态。

您还有一个严重的错误,如果没有选择任何项目,您将尝试检索索引 -1 处的项目的字符串,这显然是错误的。检查这些 SendMessage 调用的返回值将有助于您诊断问题。

以下是如何获取第一个选定项目的文本的示例;

// get the number of items in the box.
count = SendMessage(control, LB_GETCOUNT, 0, 0);

int iSelected = -1;

// go through the items and find the first selected one
for (int i = 0; i < count; i++)
{
  // check if this item is selected or not..
  if (SendMessage(control, LB_GETSEL, i, 0) > 0)
  {
    // yes, we only want the first selected so break.
    iSelected = i;
    break;
  }
}

// get the text of the selected item
if (iSelected != -1)
  SendMessage(control, LB_GETTEXT, (WPARAM)iSelected , (LPARAM)text);

或者,您可以使用 LB_GETSELITEMS 获取所选项目的列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Win32 LB_GETTEXT 返回垃圾 的相关文章

  • 分段错误(核心转储)错误

    我的程序编译罚款 但在输入文件时出现 分段错误 核心转储 错误 我没有正确处理 ostream 吗 include
  • 内联函数/方法

    声明 内联函数必须在调用之前定义 这个说法正确吗 EDIT 该问题最初是德语 内联功能穆森 弗 伊赫雷姆 奥夫鲁夫定义 sein 也许它对任何人都有帮助 是的 它是正确的 但只是部分正确 它可能正确地重新构建如下 内联函数必须在每个翻译单位
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • 在 C# 中生成 HMAC-SHA1

    我正在尝试使用 C 来使用 REST API API 创建者提供了以下用于 hmac 创建的伪代码 var key1 sha1 body var key2 key1 SECRET KEY var key3 sha1 key2 var sig
  • C# 正则表达式用于查找 中具有特定结尾的链接

    我需要一个正则表达式模式来查找字符串 带有 HTML 代码 中的链接 以获取文件结尾如 gif 或 png 的链接 示例字符串 a href site com folder picture png target blank picture
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • C++中delete和delete[]的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的删除与删除 运算符 https stackoverflow com questions 2425728 delete vs delete operators in c 我写了一个包含两个指针的
  • 如何生成 appsettings..json 文件?

    我有一个 ASP NET Core 2 WebAPI 它将部署在以下环境中 INT QA STAGE 生产环境 基于上述 我需要有appsettings
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • 将带有 glut 的点击坐标添加到向量链接列表中

    我想创建一个向量链接列表 并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中 这些是我写的结构 typedef struct vector int x int y Vector typedef struct VectorLis
  • libxml2 xmlChar * 到 std::wstring

    libxml2似乎将所有字符串存储在 UTF 8 中 如xmlChar xmlChar This is a basic byte in an UTF 8 encoded string It s unsigned allowing to pi
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • 分配器感知容器和propagate_on_container_swap

    The std allocator traits模板定义了一些常量 例如propagate on container copy move assign让其他容器知道它们是否应该在复制或移动操作期间复制第二个容器的分配器 我们还有propag
  • 使用 iTextSharp 5.3.3 和 USB 令牌签署 PDF

    我是 iTextSharp 和 StackOverFlow 的新手 我正在尝试使用外部 USB 令牌在 C 中签署 PDF 我尝试使用从互联网上挖掘的以下代码 Org BouncyCastle X509 X509CertificatePar
  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构
  • 在 Xamarin 中获取 OutOfMemoryException

    java lang OutOfMemoryError 考虑增加 JavaMaximumHeapSize Java 执行时内存不足 java exe 我的 Visualstudio Xamarin 项目出现内存不足异常 请帮助我如何解决此问题

随机推荐

  • 使用架构标头和目录查找进行 Xml 验证

    如何在不显式指定架构文件的情况下验证 xml 使用 libxml 文件 xsd 文件位于 xml 文件的标头中 相应的 xsd 文件 URL 应使用 Catalog xml 位于本地文件系统中 看起来目前不可能 libxml 2 8 0 这
  • 如何获取 cookie 并将其用于其他请求,例如 POST ( iOS )?

    My 上一个问题 https stackoverflow com questions 12538782 how to remain logged in until user decides to logout 是关于我每次都必须登录才能执行
  • 在Ruby中,如果我们定义了一个方法调用“c=”,为什么不能通过c = 3来调用它?

    例如 如果我们 def c foo p hello end c 3 c 3 并且不会打印 hello 我知道它可以被调用self c 3但为什么 还可以通过哪些其他方式调用它 c 3 and c 3 与它完全等效 始终被解释为局部变量赋值
  • 我无法初始化 NSInputStream

    请帮助我 我快疯了 我需要创建一个NSInputStream这样我就可以通过 wifi 从相机读取实时预览 liveViewStream 是一个NSInputStream 在我的实现中声明的实例变量 如下所示 implementation
  • undefined 不是一个对象(评估 'navigation.navigate')

    我正在尝试在本机反应中从一个屏幕导航到选项卡栏中的另一个屏幕 但是 我收到以下错误 ButtonClickCheckFunction gt const navigation this props navigation navigate de
  • 查明函数是否被调用

    我正在用Python编程 我想知道是否可以测试我的代码中是否调用了函数 def example pass example Pseudocode if example has been called print foo bar 我该怎么做 如
  • CastleWindsor 3.0 和 DefaultServiceHostFactory.RegisterContainer()?

    以下内容无法编译 DefaultServiceHostFactory RegisterContainer Container Kernel Castle 3 0 中似乎不存在静态方法 我检查了 Breakingchanges txt 但没有
  • 使用 Pandas 读取数据(.dat 文件)

    如何使用 Pandas 读取以下 两列 数据 来自 dat 文件 TIME XGSM 2004 006 01 00 01 37 600 1 2004 006 01 00 02 32 800 5 2004 006 01 00 03 28 00
  • 防止 dblclick 事件触发时触发 click 事件

    我正在处理 DOM 元素上的 click 和 dblclick 事件 每个执行不同的命令 但我发现当双击元素时 除了触发双击事件之外 还触发了两次单击事件 防止这种行为的最佳方法是什么 万一其他人偶然发现这个问题 就像我一样 寻找答案 我能
  • Angular 8 和 9 中提供和注入“Window”与 Window 之间有什么区别?

    我有两个使用这些版本的 Angular 项目 9 0 0 下一个 6 8 1 0 在版本 9 中我用它来提供和注入window目的 NgModule providers provide Window useValue window expo
  • 使用 Java 重命名文件

    我们可以重命名一个文件吗test txt to test1 txt If test1 txt存在会重命名吗 如何将其重命名为已经存在的 test1 txt 文件 以便将 test txt 的新内容添加到其中以供以后使用 复制自http ex
  • 从 ELF 目标文件转储 C 结构大小

    如何使用调试符号从 ELF 目标文件中提取所有 C 结构的大小 可以使用 print sizeof some struct 从 GDB 获取各个结构大小 但我需要的是获取所有结构的列表 我查看了 nm 和 objdump 但没有看到执行我正
  • MongoDB“无法找到 $geoNear 查询的索引”

    我只是想得到一个简单的near查询工作 这是我的文档的示例 point type Point coordinates 30 443902444762696 84 27326978424058 created on date 13980167
  • 在 R Markdown 模板中包含图像,无需为模板创建新目录

    我正在构建一个投影仪演示模板 我想在幻灯片的前面添加一个徽标 尽管这可以通过在演示文稿目录中包含图像来实现 但我不希望只为该图像的每个新演示文稿创建一个新目录 有没有一种方法可以从包内检索相对文件路径resources文件夹并让它引用 La
  • 为什么套接字可以 connect() 到它自己的临时端口?

    我可以可靠地获得 Winsock 套接字connect 如果我使用自动分配的临时端口 5000 65534 范围内的端口连接到本地主机 具体来说 Windows 似乎有一个系统范围的滚动端口号 这是它将尝试分配为客户端套接字的本地端口号的下
  • 使用 std::string 键提升共享内存中的无序映射

    是否可以在共享内存上使用 std string 或其他复杂结构键类型以及 boost 无序映射 如果是这样 我可以找到一些示例代码吗 我找到了一些在共享内存上使用无序映射的示例代码 但无法将键类型更改为复杂结构 谢谢 Yes 您可以在此处查
  • 如何向初学者描述面向对象编程?现实世界有一个很好的类比吗?

    我的姐夫是一名大学工程专业的新生 他之前没有编程经验 他正在课堂上学习编程 但他似乎在基本概念上遇到了困难 更糟糕的是 他似乎是所有班级中唯一没有编程背景的人 他在 Matlab 上做得很好 我不知道 然后当他学习 Python 基础知识时
  • Cytsocape.js 无法使用不存在的目标创建边缘

    在使用 AJAX 请求创建节点后 我尝试创建边缘 My code success function data each data kids function i value cy add group nodes data id value
  • 从 QML 访问 QStandardItemModel 的项目

    已编辑 在原始问题中 我错误地假设 GridView 本机使用二维模型 事实上 它与其他 QML 类似 需要一个元素列表 意见 为了使问题和答案更容易理解 我更改了给定的代码 轻微地 此外 我根据答案添加了工作解决方案 在主程序中 我定义了
  • Win32 LB_GETTEXT 返回垃圾

    我有一个问题 很可能是一个简单的问题 但对我来说仍然是一个问题 我在 Win32 C 中使用列表框 当从列表框中获取选定的文本时 返回的字符串只是垃圾 它是结构或类似结构的句柄 下面是代码和我得到的示例 std string Listbox