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

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

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 nCount函数的DrawText参数。相反,您的包装器传递了-1,这意味着字符指针被解释为以空字符结尾的字符串。该函数将打印所有字符,直到到达空终止符为止。

如果要打印单个字符,则需要通过1参数传递nCount。您无法使用包装器执行此操作。您必须这样做:

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


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

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

10-12 18:00