我正在使用 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/