c++ - 尝试将字符索引传递给 DrawText

标签 c++ winapi

我正在使用 DrawText 将一些文本绘制到我在插件中制作的一堆矩形中。

现在我从嵌入式 python 接收到一个字符指针:

char *a=PyString_AsString(value);

当我打印到文本文件时给出:1\n2\n3\n4\n5\n6\n7\n8\n9\n (这只是一个示例字符,我要使用的字符要复杂得多)

我想使用 DrawText 循环打印特定字符:

 for(int count=0;count<content.size();count++){
    dc->DrawText(a[count*2],&rect[count],DT_CENTER); //*2 to print only the numbers

但我不能,因为它说参数不是 char 类型??我可以传递 a&a[count] 但不能传递 a[count]。这是为什么?

此外,当我将 &a[2] 打印到文本文件时,它给出:2\n3\n4\n5\n6\n7\n8\n9\n。不应该只是 2 吗?

备注:DrawText函数接收:

int DrawText(
   _In_     HDC hDC,
   _Inout_  LPCTSTR lpchText,
   _In_     int nCount,
   _Inout_  LPRECT lpRect,
   _In_     UINT uFormat
 );

最佳答案

DrawText 方法的第一个参数是一个char* 指针。您传递的是单个 char,这是编译器提示的类型不匹配。

你可以像这样获得一个指向特定字符的指针:

&a[count*2]

或者像这样:

a + count*2

问题是 DrawText 的三参数 OOP 包装器删除了 Win32 DrawText 函数的 nCount 参数。相反,您的包装器传递的是 -1,这意味着字符指针被解释为以 null 结尾的字符串。该函数将打印所有字符,直到它到达空终止符。

如果要打印单个字符,则需要通过 nCount 参数传递 1。你没有办法用你的包装器来做到这一点。你必须这样做:

char temp[2];
temp[1] = 0;
temp[0] = a[count*2];
dc->DrawText(temp, ...);

为了避免这个临时缓冲区,您需要公开原始 Win32 API 函数的 nCount 参数。

关于c++ - 尝试将字符索引传递给 DrawText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22541672/

相关文章:

windows - 支持 IAccessible 接口(interface)以在文本编辑器中移动插入符号的正确解决方案是什么?

c++ - 如何用我自己的程序打开一个文件并让它调用另一个程序?

c++ - 在 Emacs 中运行 cpp 程序

c++ - 如何在 Windows 中捕获 HDR 帧缓冲区?

windows - 什么是子类化和 API Hook ?

c - 为什么通配符不能代表FindFirstFile中的目录?

c++ - Windows 如何进行定时 GUI 动画?

c# - c# 或 c++ 中的文字处理器

c++ - C++:在数组中输入数字时,第一个数字为0

c++ - Boost.Python 1.54(调试版本)对 Windows 上 Python27.lib 的令人费解的依赖性