龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

用Visual C++增强Notes打印功能(4)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
file://本域中不用时间格式参数,全部清零 CDField.TimeFormat.Date = 0; CDField.TimeFormat.Time = 0; CDField.TimeFormat.Zone = 0; CDField.TimeFormat.Structure = 0; // 设定FontID pFontFi

  file://本域中不用时间格式参数,全部清零
  CDField.TimeFormat.Date = 0;
  CDField.TimeFormat.Time = 0;
  CDField.TimeFormat.Zone = 0;
  CDField.TimeFormat.Structure = 0;

  // 设定FontID
  pFontFields = (FONTIDFIELDS *)&CDField.FontID;
  pFontFields->Face = FONT_FACE_ROMAN;
  pFontFields->Attrib = 0;
  pFontFields->Color = NOTES_COLOR_BLACK;
  pFontFields->PointSize = 14;

  // 编译默认值公式
  NSFFormulaCompile(NULL, 0, TextDefValFormula, (WORD) strlen(TextDefValFormula), &hTextDefValFormula, &wTextDefValFormulaLen, &wdc, &wdc, &wdc, &wdc, &wdc))

  // 填写CDFIELD 结构的其余部分,因为DVLength值只有公式编译后才知道
  CDField.DVLength = wTextDefValFormulaLen;
  CDField.ITLength = 0;
  CDField.TabOrder = 0;
  CDField.IVLength = 0;
  CDField.NameLength = strlen(TextFieldName);
  CDField.DescLength = strlen(TextDescription);
  CDField.TextValueLength = 0;
  CDField.Header.Length = ODSLength(_CDFIELD) +CDField.DVLength +CDField.ITLength +CDField.IVLength +CDField.NameLength +CDField.DescLength +CDField.TextValueLength;

  // 保证CDFIELD域长度为偶数
  if (CDField.Header.Length % 2)
    CDField.Header.Length++;
  ODSWriteMemory( (void far * far *)&pBuffer, _CDFIELD, (void far *)&CDField, 1 );

  // 获取指向编译后公式的指针
  pTextDefValFormula = OSLock( char, hTextDefValFormula );
  // 写入公式内容到内存
  memcpy( pBuffer, pTextDefValFormula, wTextDefValFormulaLen );
  pBuffer += CDField.DVLength;
  // 解锁并释放公式占用的空间
  OSUnlockObject(hTextDefValFormula);
  OSMemFree(hTextDefValFormula);

  // 域名部分,直接写入
  memcpy( pBuffer, TextFieldName, CDField.NameLength );
  pBuffer += CDField.NameLength;

  // 域描述部分,直接写入
  memcpy( pBuffer, TextDescription, CDField.DescLength );
  pBuffer += CDField.DescLength;

  // 保证整个域定义的长度为偶数
  if ((pBuffer-pBufferStart) %2)
    pBuffer++;

// 填写CDENDRECORD结构
  CDEnd.Header.Length = (BYTE)ODSLength(_CDENDRECORD);
  CDEnd.Header.Signature = SIG_CD_END;
  CDEnd.Version = 0;
  CDEnd.Signature = SIG_CD_FIELD;
  ODSWriteMemory( (void far * far *)&pBuffer, _CDENDRECORD, (void far *) &CDEnd, 1 );

精彩图集

赞助商链接