from ctypes import *
import win32gdi
# init HDC
# set hdc to something like
hdc = win32gdi.CreateDC(print_processor, printername, devmode)
# here comes the ctypes function that does your deal
text = u'Working! \u4e00\u4e01'
windll.gdi32.TextOutW(hdc, x, y, text, len(text))
# ... continue your prog ...
David:“这些函数必须通过PyWin32来实现”,实际上,它们不是。在
经过几十个小时的搜索,试图找出
win32ui
,win32gui
等的位置,可能有一个隐藏的TextOutW
,我自己编写了一个有其他缺陷的C扩展,编写了一个外部程序。从python内部调用发现HDC
句柄不能转移到其他进程,我终于偶然发现了这个基于ctypes
的简单的预编程解决方案,如上面所示:TextOutW
或类似的函数,就像您在windows gdi c中使用的一样。尽管有一个名为win32gdi.DrawTextW
的函数,它的工作原理与windows对应的函数完全相同,但有时您需要特别使用,例如TextOut
,ExtTextOut
等。,在pywin32
的win32gdi
的unicodeW
后缀版本中不可用要实现这一点,不要使用有限的
win32gui
函数,而是使用ctypes
提供的windll.gdi32.TextOutW
:玩得开心点
要在Windows上输出Unicode文本,需要用UTF-16编码,并调用^{} 或^{} Win32函数的宽字符版本。如果您不熟悉,windowsapi本机是UTF-16,并且有并行的8位ANSI版本来支持遗留版本。在
我对您使用的Win32包装器一无所知,但怀疑}的方法。您可以用ctypes来实现,而且这些函数肯定也可以通过PyWin32使用。在
PyCDC.DrawText()
正在调用这些Win32函数中任何一个的ANSI版本。您的解决方案可能涉及找到一种调用DrawTextW()
或{但是,我可能会选择更高级别的东西,比如PyQt。在
相关问题 更多 >
编程相关推荐