试图将char索引传递给DrawText

时间:2014-03-20 18:12:24

标签: c++ winapi

我使用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
 );

1 个答案:

答案 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参数。