在虚拟打印机中,我将DrvTextOut,Hook在我的TextOut函数上,在接受到传给的参数中--STROBJ  *pstro记录了字符串的内容,或者是图元句柄的enumeration。如果内容是图元句柄,则用矢量字体的打印方法;如果内容是字符串,则用TureType的方式打印。  
 
现在的问题是:在Visual  Studio下测试,我选择"Arial"字体打印文本"Test",但TextOut接受的STROBJ  *pstro参数内容是图元句柄的enumeration;在Notepad下测试同样的内容,STROBJ  *pstro参数的内容却是字符串。  
 
请教高手:我在什么地方可以控制打印字体信息?

解决方案 »

  1.   

    PIFIMETRICS pifiMetrics = FONTOBJ_pifi(pfo);
    const char *fontFamily = (const char *)pifiMetrics + pifiMetrics->dpwszFamilyName;
    const char *fontStyle = (const char *)pifiMetrics + pifiMetrics->dpwszStyleName;pfo就是DrvTextOut的参数之一
    dpwszFamilyName=字体名称字符串(比如"Arial")相对PIFIMETRICS起始地址的偏移量
    dpwszStyleName=字体样式字符串(比如"bold"相对PIFIMETRICS起始地址的偏移量
    (注意以上以及PIFIMETRICS所指向结构中的其他字符串成员都是unicode字符串)PIFIMETRICS指向字体信息结构,MSDN上有此结构的详细说明