试图将char索引传递给DrawText

Trying to pass char index to DrawText

本文关键字:DrawText 索引 char      更新时间:2023-10-16

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

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

char *a=PyString_AsString(value);

,当我打印到textfile给出:1n2n3n4n5n6n7n8n9n(这只是一个示例字符,我将要使用的字符要复杂得多)

我想使用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]到文本文件它给出:2n3n4n5n6n7n8n9n。不应该只有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,这意味着字符指针被解释为以空结束的字符串。该函数将打印所有字符,直到到达空终止符。

如果你想打印一个字符,那么你需要通过nCount参数传递1。对于您的包装器,您无法做到这一点。你必须这样做:

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

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