我使用DrawText
将一些文字绘制到我在插件中制作的一堆矩形中。
现在我收到来自嵌入式python的char指针:
char *a=PyString_AsString(value);
当我打印到textfile时给出: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
);
答案 0 :(得分:3)
DrawText
方法的第一个参数是char*
指针。您正在传递单个char
,这是编译器抱怨的类型不匹配。
您可以获取指向特定字符的指针,如下所示:
&a[count*2]
或者像这样:
a + count*2
问题是DrawText
的三个参数OOP包装已删除了Win32 nCount
函数的DrawText
参数。相反,您的包装器正在传递-1
,这意味着字符指针被解释为以null结尾的字符串。该函数将打印所有字符,直到它到达空终止符。
如果要打印单个字符,则需要通过1
参数传递nCount
。使用包装器无法做到这一点。你必须这样做:
char temp[2];
temp[1] = 0;
temp[0] = a[count*2];
dc->DrawText(temp, ...);
为了避免使用这个临时缓冲区,您需要公开原始Win32 API函数的nCount
参数。