• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
用VC处理ACCESS中的位图数据
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
用VC处理ACCESS中的位图数据
软件发布 用VC处理ACCESS中的位图数据
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 编程技术 >> VC教程 >> 用VC处理ACCESS中的位图数据

用VC处理ACCESS中的位图数据

添加时间: 2006-2-11 1:24:39  作者: VC教程  阅读次数:137   来源: http://www.d9soft.com

          在 CdaoRecordset 派 生 类 的 对 象 中,VC 自 动 为ACCESS 的“OLE 对 象” 域 生 成 一 个CLongBinary 对 象。 该 类 虽 然 较 简 单, 在 程 序 里 却 需 要 使 用 全 局 函 数GlobalAlloc() 和GlobalFree() 处 理 与 它 的 内 存 句 柄m_hData 有 关 操 作, 访 问 数 据 前 后 要 调 用GlobalLock() 和GlobalUnlock(), 而 且 还 要 给 它 的m_dwDataLength 赋 值, 使 用 起 来 相 对 复 杂, 所 以 一 般 推 荐 使 用CByteArray 类。 这 只 需 要 在CdaoRecordset 派 生 类 对象 的 数 据 说 明 里 修 改 一 下, 并 把DoFieldExchange() 里 的 DFX_LongBinary() 改 成DFX_Binary() 即 可。  

   作 者 定 义 了 一 个 以CObject 为 基 类 的CDib 类(CDaoRecordView 的派 生 类 里 定 义 了CDib 对 象 成 员m_DIB), 其 中 包 括 一 下 成 员 和 方 法: 

  CByteArray m_bufDIB;

  BOOL Create(CByteArray& ba);

  BOOL Create(CFile& bmpFile);

  BOOL Paint(HDC hDC);  

   m_bufDIB 是 存 储 位 图 数 据 的 缓 冲 区。 为 简 便 起 见, 它 不 包 含 包 装 信 息 和BITMAPFILEHEADER 结 构。 这 样 对 数 据 库更 新 后, 原 有 的“OLE 对 象” 类 型 将 变 成“ 长 二 进 制 数 据”, 不 能 在ACCESS 里 查 看 了。 

   第 一 个Create() 重 载 方 法 的 参 数ba 是 记 录 集 的 位 图 数 据( 比 如m_image), 使 用CByteArray::Copy() 把 数 据 复 制 给m_bufDIB; 第 二 个Create() 方 法 的 参 数bmpFile 是 已 打 开 的 位图 文 件, 使 用CFile::ReadHuge() 把 文 件 里 的 数 据 读 入

  m_bufDIB( 放 弃 前 面 的BITMAPFILEHEADER 结 构):  

  DWORD dwBufSize;

  dwBufSize = bmpFile.GetLength();// 获 得 文 件 长 度

  bmpFile.Seek((long)sizeof(BITMAPFILEHEADER),

  CFile::begin);// 放 弃 文 件 头

  dwBufSize-=sizeof(BITMAPFILEHEADER);

  m_bufDIB.SetSize(dwBufSize );// 设 置 缓 冲 区 大 小

  file.ReadHuge((LPSTR)(m_bufDIB.GetData()), dwBufSize);

  ……  
  Paint() 方 法 调 用 了SetDIBitsToDevice() 函 数( 根 据 情 况也 可 以 使 用StretchDIBits ()), 参 数hDC 是CDaoRecordview 的 资 源 中 的 一 个 静 态 控 制 的 设 备 句 柄, 作 为

  SetDIBitsToDevice() 的 第 一 个 参 数。 如 果 不 是16 或24 位 的 位图, 还 需 要 建 立 和 设 置 调 色 板。Paint() 方 法 除 了 在CDaoRecordView 派 生 类 的OnMove() 里 调 用 外, 也 被OnPaint() 调用( 最 好 不 在OnDraw() 里 调 用):  

  void CDerivedView::OnPaint()

  {

   CPaintDC dc(this);

   CClientDC dc1(&m_ctlImage);

   if(m_DIB.Create(m_pSet->m_image))

   m_DIB.Paint(dc1.m_hDC);

  }  

   作 者 首 先 采 用 的 方 法 是, 每 当 打 开 一 个 位 图 文 件,调 用m_DIB.Create() 和m_DIB.Paint(), 然 后 复 制 给m_pSet->m_image,再 设 置“ 脏” 标 识: 

  if(m_DIB.Create(bmpFile))

  {

   CClientDC dc(&m_ctlImage);

   m_DIB.Paint(dc.m_hDC);

   (m_pSet->m_image).Copy(m_DIB.m_bufDIB);

   SetFieldDirty(&(m_pSet->m_image));

  }  

   记 录 滚 动 时,OnMove() 调 用Update() 对 数 据 进 行 更 新。  

   但 是 这 样 做 的 结 果 是, 只 有 在 域 的 内 容 不 为 空(NULL) 的时 候 才 能 更 新 数 据。 也 就 是 说, 添 加“ 长 二 进 制 数据” 不 能 实 现。 

   最 后 发 现 使 用SeieldValue() 可 以 实 现 添 加 和 替 换。 但 由于 作 者 未 知 的 原 因, 还 需 要 把 另 外 某 个 域 设 置 为“ 脏” 才 行:  

  if(m_DIB.Create(bmpFile))

  {

   CClientDC dc(&m_ctlImage);

   m_DIB.Paint(dc.m_hDC);

   (m_pSet->m_image).Copy(m_DIB.m_bufDIB);

   // 只 为OnPaint() 调 用 时 使 用

   m_pSet->SetFieldValue(_T("[image]"),

   COleVariant(m_DIB.m_bufDIB));

   m_pSet->SetFieldDirty(&(m_pSet->m_name));

   // 任 意 另 外 一 个 域

  }   

   如 果 打 算 删 除 数 据 库 里 的 位 图 数 据, 可 以 把 一 个“ 空” 的CByteArray 对 象 替 换 原 来 的 就 行 了。

 

上下文章:

 

上一篇文章: Visual C++中的ODBC编程实例 下一篇文章: 在 Visual C++ 中使用内联汇编

相关文章:

  • 艾瑞数据显示:暴风影音市场优势明显
  • Oracle下调数据库许可价格以适应多芯CPU
  • Oracle发布免费数据库管理工具Raptor
  • 甲骨文意外泄漏数据库安全漏洞
  • Oracle认证数据库备份技巧

相关软件:

  • SendTo+批处理实用小工具 V1.0 绿色版
  • PhoXo Core Library (PCL) 图像处理库 V2.1
  • ibqsImage 图像处理组件 V2.4
  • AccessPC V1.0.5
  • iImgReSize图片处理组件 V3.0
  • 凌霄图像批处理专家 V4.2.1.285

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • VC++之Button控件
  • VC++之Static Box控件
  • VC++之Edit Box控件
  • VC++之Static Box控件
  • VC++之Edit Box控件
  • VC++之Scroll Bar
  • VC++之Scroll Bar
  • VC++之List Box/Check List Box控...
  • VC++ Combo Box/Combo Box Ex控件
  • VC++ List Ctrl控件

VC教程阅读排行

  • VC++之List Box/Check List Box控...
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • VC++之Button控件
  • VC++之Tab Ctrl控件
  • VC++之Edit Box控件
  • VC++之Edit Box控件
  • VC遍历整个目录树查找文件
  • VC++之Scroll Bar
  • 深入编程:控制面板知多少?

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • 第二章 PowerBuilder 入门之创建新...
  • VC++之List Box/Check List Box控...
  • 第一章 什么是PowerBuilder
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有