您现在的位置是: 软件 > 开发者网络 > 程序方舟 > 开发专栏 > Visual C++开发 > 正文
·速成电脑精英(包分配)白领高薪一族从这里开始



-Java套接字编程(下)
-MediaStudio Pro 6.5教程
-三款卸载软件最新试用
-基于Visual C++的Winsock API研究

用Visual C++增强Notes打印功能
2002-02-20· ·邹龙泉 ··yesky

上一页  1 2 3  

  四 例程

  下面的程序段定义了一个带有默认值公式的名为"TextField"的域:

  char TextFieldName[] = "TextField";
  char TextDescription[] = "This is a Simple Text Field";
  char TextDefValFormula[] = "\"Default\"";
  char far *pBufferStart, far *pBuffer;
  HANDLE hMem;
  CDPABREFERENCE CDPabRef;
  CDPARAGRAPH CDPara;
  CDBEGINRECORD CDBegin;
  CDENDRECORD CDEnd;
  CDEXT2FIELD CDExt2Field;
  CDFIELD CDField;
  FONTIDFIELDS *pFontFields;

// 申请内存并锁定内存,获得指向该块内存的指针
  OSMemAlloc (0, wCDBufferLength, &hMem);
  pBufferStart = (char far *)OSLockObject(hMem);
  memset( pBufferStart, 0, (size_t) wCDBufferLength );
  pBuffer = pBufferStart;

// 填写 PARAGRAPH 结构
  // 结构体的长度
  CDPara.Header.Length = (BYTE) ODSLength(_CDPARAGRAPH);
  // 结构体的类型
  CDPara.Header.Signature = (BYTE)SIG_CD_PARAGRAPH;
  // 转换为Domino规范的形式写入申请的内存
  ODSWriteMemory( (void far * far *)&pBuffer, _CDPARAGRAPH, &CDPara, 1 );

// 填写 PABREF 结构
  CDPabRef.Header.Signature = (BYTE)SIG_CD_PABREFERENCE;
  CDPabRef.Header.Length = (BYTE) ODSLength(_CDPABREFERENCE);
  // 要引用的段定义的序号
  CDPabRef.PABID = wPabDefNumber;
  ODSWriteMemory( (void far * far *)&pBuffer, _CDPABREFERENCE, &CDPabRef, 1 );

// 填写CDBEGINRECORD 结构
  CDBegin.Header.Length = (BYTE)ODSLength(_CDBEGINRECORD);
  CDBegin.Header.Signature = SIG_CD_BEGIN;
  CDBegin.Version = 0;
  CDBegin.Signature = SIG_CD_FIELD;
  ODSWriteMemory( (void far * far *)&pBuffer, _CDBEGINRECORD,(void far *) &CDBegin, 1 );

// 填写CDEXT2FIELD 结构
  memset(&CDExt2Field, 0, sizeof(CDEXT2FIELD));
  CDExt2Field.Header.Length = (WORD)ODSLength(_CDEXT2FIELD);
  CDExt2Field.Header.Signature = SIG_CD_EXT2_FIELD;
  ODSWriteMemory( (void far * far *)&pBuffer, _CDEXT2FIELD, (void far *) &CDExt2Field, 1 );

// 填写CDFIELD 结构,定义文本域
  CDField.Header.Signature = SIG_CD_FIELD;
  CDField.Flags = FEDITABLE;
  CDField.DataType = TYPE_TEXT;
  CDField.ListDelim = LDDELIM_SEMICOLON;

  // 本域中不用数值格式参数,全部清零
  CDField.NumberFormat.Digits = 0;
  CDField.NumberFormat.Format = 0;
  CDField.NumberFormat.Attributes = 0;
  CDField.NumberFormat.Unused = 0;

  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 );

上一页  1 2 3  

【责任编辑:方舟】
【发表评论】【关闭窗口】
■ 相关内容
 通过COM技术实现Windows外壳编程
 利用Active X控件开发串口通信软件
 Visual C++实现视频图像处理技术
 在存储过程中调用外部的动态连接库
 在Visual C++中如何利用UDL文件来建立ADO连接
 在Visual C++中用ADO进行数据库编程
 Visual C++多线程DAO处理
 Visual C++6.0开发灰度位图处理
 visual c++对大型数据文件的读取
 Visual C++版本6中工具条的新特色(续)
 Visual C++中建立滚动视窗
 Visual C++ 中的ODBC编程
 在Visual C++中实现特性表
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!