emf文件解析处理EMR_RESERVED_108格式记录


参照链接:http://www.flounder.com/metafileexplorer.htm

在参照链接下载项目基础上进行格式解析,主要是分析里面的文本化的数据,

对于EMR_RESERVED_108格式记录解析,网上没什么资料,拿出来跟大家分享下

解析参照资料:https://msdn.microsoft.com/zh-cn/library/cc230599.aspx




typedef struct  {
      EMR   emr; 
      POINTL  ptlReference;
 DWORD cChars;
 DWORD fuOptions;
 DWORD iGraphicsMode;
 FLOAT exScale;
 FLOAT eyScale;
 RECTL rclBounds; 
//  char* txt;
    } EMR_SMALLTEXTOUT;

 DWORD ETO_NO_RECT = 0x100;
DWORD SMALLTEXT_TYPE_ANSI = 0x200;
void TreeDecode::DecodeReservedRecord(DECODE_PARAMETERS)
    {
     GET_CTL_ITEM();
     
     SetState(ctl, item, StateIcon::State);

EMR_SMALLTEXTOUT *txt = ( EMR_SMALLTEXTOUT *)rec;
AddFormattedItem(ctl, item, EMR_SMALLTEXTOUT, txt, POINTL, ptlReference, cvt);  
AddFormattedItem(ctl, item, EMR_SMALLTEXTOUT, txt, LONG, cChars, cvt);
CStringW ss;
ss.Format(_T("[type] \"%d "), txt->fuOptions);
ctl->InsertItem(ss, item);
//OutputDebugString(ss);
const LPBYTE base = (BYTE *)rec;  
 
int offString = 36;
CStringW ss="";


if ( (ETO_NO_RECT & txt->fuOptions) != ETO_NO_RECT)   
{
AddFormattedItem(ctl, item, EMR_SMALLTEXTOUT, txt, RECTL, rclBounds, cvt);
offString += 16;
ss.Format(_T("%s"), str);
}


CStringW s;
CStringW str = CStringW((LPCSTR)(base + offString), txt->cChars);
if (  (SMALLTEXT_TYPE_ANSI & txt->fuOptions) == SMALLTEXT_TYPE_ANSI )   ansi char
{
s.Format(L"[%d] L\"%ls\"", offString, str);
//str = cvtString(str);
//s.Format(_T("[%d] \"%s\""), offString, str);
}
else    ///widechar
{
str = cvtString(str);
s.Format(_T("[%d] \"%s\""), offString, str);
 
}
ctl->InsertItem(s, item);



    } // TreeDecode::DecodeReservedRecord


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值