




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Ado 实现C+对象的存取作者:江上飞鸟下载源代码其实我最讨厌写东西了,最近忙死了,呵呵,前一段时间在做一个图形程序时,需要把C+对象保存到数据库里,刚开始真让我头疼啊,琢磨了一个下午,终于给做出来了,废话不说了,还是把自己的一些体会与各位同任一起分享!一、新建一个继承于 CObject 的子类 CLine;头文件:Line.h class CLine : public CObject?private :LOGPEN m_logPen; /画笔COLORREF m_crBackColor;CArray m_PointArray; /标记类对应框public:int GetSize();CPoint GetPoint(int pos);void DrawLine(CDC *pDC,CPoint pt1,CPoint pt2,CRect rc);void DrawBackGround(CDC *pDC,CRect rect);void DrawPoint(CDC *pDC, CRect rect);void SetWidth(int iWidth);COLORREF GetColor();void SetColor(COLORREF color);COLORREF GetBkColor();void SetBkColor(COLORREF color);void AddPoint(CPoint point);void Clear();CLine();virtual CLine();virtual void Serialize(CArchive &ar);CLine& operator=(CLine &src);DECLARE_SERIAL(CLine)?; 实现文件:Line.cpp / Line.cpp: implementation of the CLine class./#include stdafx.h#include TestAdo.h#include Line.h#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE=_FILE_;#define new DEBUG_NEW#endifIMPLEMENT_SERIAL(CLine,CObject,1)CLine:CLine()Clear();CLine:CLine()/重写 =CLine& CLine:operator=(CLine &src)if(this!=&src)m_logPen = src.m_logPen;m_crBackColor = src.m_crBackColor;return *this;?/串行化操作void CLine:Serialize(CArchive &ar)if (ar.IsStoring()ar dw; m_crBackColor = COLORREF(dw);ar.Read(&m_logPen, sizeof(LOGPEN);m_PointArray.Serialize(ar);void CLine:Clear()m_crBackColor = RGB(255,255,255);m_logPen.lopnStyle = PS_SOLID;m_logPen.lopnWidth.x = 1;m_logPen.lopnWidth.y = 1;m_logPen.lopnColor = RGB(0, 0, 0);m_PointArray.RemoveAll();void CLine:AddPoint(CPoint point)m_PointArray.Add(point);void CLine:SetColor(COLORREF color)m_logPen.lopnColor = color;COLORREF CLine:GetColor()return m_logPen.lopnColor;void CLine:SetBkColor(COLORREF color)m_crBackColor = color;COLORREF CLine:GetBkColor()return m_crBackColor;void CLine:SetWidth(int iWidth)m_logPen.lopnWidth.x = iWidth;m_logPen.lopnWidth.y = iWidth;/绘线条void CLine:DrawPoint(CDC *pDC, CRect rect)int len = m_PointArray.GetSize();if (len SelectObject(&pen);CPoint pt = m_PointArray.GetAt(0);pDC-MoveTo(pt);for (int i=1; iLineTo(pt);pDC-SelectObject(pOldPen);pOldPen = NULL;pen.DeleteObject();void CLine:DrawBackGround(CDC *pDC, CRect rect)CBrush brushCtl;brushCtl.CreateSolidBrush(GetBkColor();pDC-Rectangle(rect);pDC-FillRect(rect,&brushCtl) ;brushCtl.DeleteObject();void CLine:DrawLine(CDC *pDC,CPoint pt1, CPoint pt2, CRect rc)CPen pen;pen.CreatePenIndirect(&m_logPen);CPen *pOldPen = pDC-SelectObject(&pen);pDC-MoveTo(pt1);pDC-LineTo(pt2);pDC-SelectObject(pOldPen);pOldPen = NULL;pen.DeleteObject();CPoint CLine:GetPoint(int pos)if (pos=0 & posOpen(sCon,adModeUnknown);if (hr!=S_OK)return FALSE;/hr=m_pSet.CreateInstance(ADODB.Recordset);if (hr!=S_OK)return FALSE;m_pSet-CursorLocation=adUseClient;hr=m_pSet-Open(SELECT * FROM object_table,_variant_t(IDispatch*)m_pCon,TRUE),adOpenStatic,adLockOptimistic,adCmdText);if (hr!=S_OK)return FALSE;return TRUE;/catch(_com_error &e)CString errorMessage;errorMessage.Format(连接数据库失败!错误信息:%s,e.ErrorMessage();return FALSE;return FALSE; (注意:在StdAfx.h中要加入:#import C:Program FilesCommon FilesSYSTEMADOmsado15.dll no_namespace rename(EOF,adoEOF) 来引入ado库,还有在 BOOL CTestAdoApp:InitInstance() 加入 AfxOleInit();/初始化COM库)三、CLine对象的保存void CTestAdoDlg:OnButtonSave()/m_Listif (!m_bState) return;UpdateData();trym_pSet-AddNew();m_pSet-PutCollect(name, _variant_t(m_sName);/保存图形对象CMemFile memFile;CArchive ar(&memFile, CArchive:store);m_Line.Serialize(ar);ar.Close();DWORD dwSize = memFile.GetLength();LPBYTE lpInfo = memFile.Detach();VARIANT varBLOB;SAFEARRAY *psa;SAFEARRAYBOUND rgsabound1;rgsabound0.lLbound = 0;rgsabound0.cElements = dwSize;psa = SafeArrayCreate(VT_UI1, 1, rgsabound);for (long i = 0; i GetFields()-GetItem(object)-AppendChunk(varBLOB);m_pSet-Update();m_List.AddString(m_sName);catch(_com_error &e)CString str=(char *)e.Description();MessageBox(str+r保存数据库出问题!,提示,MB_OK|MB_ICONWARNING);return ;四、CLine对象的读取 void CTestAdoDlg:OnSelchangeListData()int iPos = m_List.GetCurSel();if (iPosMoveFirst();int i=0;while (iMoveNext();i+;long lDataSize = m_pSet-GetFields()-GetItem(_variant_t(object)-ActualSize;if(lDataSize GetFields()-GetItem(_variant_t(object)-GetChunk(lDataSize);if(varBLOB.vt = (VT_ARRAY | VT_UI1)BYTE *pBuf = new BYTElDataSize + 1;if(pBuf)SafeArrayAccessData(varBLOB.parray,(void *)&pBuf);SafeArrayUnaccessData (varBLOB.parray);CMemFile memfile;memfile.Attach(pBuf,lDataSize);memfile.SeekToBegin();CArc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年家庭农场承包合同
- 基于手势识别的自然交互界面探索-洞察阐释
- 能源采购居间服务协议范本
- 绿色建筑示范场开发与推广合作协议
- 柴油运输环保风险评估合同
- 2025合作合同范本母公司与发展公司合作协议模板
- 2020年江苏公务员考试申论真题及答案(C类)
- 系统功能测试计划
- 量子化学测试题目及答案
- 新证券法考试题及答案
- 耕地占补平衡动态监管系统培训讲解
- 电大可编程控制器应用实训 形考任务2
- 实验设计与数据处理
- 语C圈洗白手册
- GB/T 1931-2009木材含水率测定方法
- 【不做为不担当自查报告】不作为不担当自查报告教师
- NB∕T 33009-2021 电动汽车充换电设施建设技术导则
- 熊春锦先生校勘的《德道经》
- 滑板项目选材指标与标准
- YTHG 金 属 波 纹 涵 管
- 有机化学第九章醛和酮
评论
0/150
提交评论