版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Ado 实现C+对象的存取作者:江上飞鸟下载源代码其实我最讨厌写东西了,最近忙死了,呵呵,前一段时间在做一个图形程序时,需要把C+对象保存到数据库里,刚开始真让我头疼啊,琢磨了一个下午,终于给做出来了,废话不说了,还是把自己的一些体会与各位同任一起分享!一、新建一个继承于 CObject 的子类 CLine;头文件:Line.h class CLine : public CObject?private :LOGPEN m_logPen; /画笔COLORREF m_crBackColor;CArray<CPoint, CPoint &> m_PointArray; /标记类
2、对应框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(COLO
3、RREF 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"#
4、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
5、;return *this;?/串行化操作void CLine:Serialize(CArchive &ar)if (ar.IsStoring()ar << DWORD(m_crBackColor);ar.Write(&m_logPen, sizeof(LOGPEN);elseDWORD dw;ar >> dw; m_crBackColor = COLORREF(dw);ar.Read(&m_logPen, sizeof(LOGPEN);m_PointArray.Serialize(ar);void CLine:Clear()m_crBackCo
6、lor = RGB(255,255,255);m_logPen.lopnStyle = PS_SOLID;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:SetBkCo
7、lor(COLORREF color)m_crBackColor = color;COLORREF CLine:GetBkColor()return m_crBackColor;void CLine:SetWidth(int iWidth)/绘线条void CLine:DrawPoint(CDC *pDC, CRect rect)int len = m_PointArray.GetSize();if (len <=0) return;CPen pen;pen.CreatePenIndirect(&m_logPen);CPen *pOldPen = pDC->SelectOb
8、ject(&pen);CPoint pt = m_PointArray.GetAt(0);pDC->MoveTo(pt);for (int i=1; i< len; i+)pt = m_PointArray.GetAt(i);pDC->LineTo(pt);pDC->SelectObject(pOldPen);pOldPen = NULL;pen.DeleteObject();void CLine:DrawBackGround(CDC *pDC, CRect rect)CBrush brushCtl;brushCtl.CreateSolidBrush(GetBk
9、Color();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->Sel
10、ectObject(pOldPen);pOldPen = NULL;pen.DeleteObject();CPoint CLine:GetPoint(int pos)if (pos>=0 && pos<m_PointArray.GetSize()?return m_PointArray.GetAt(pos);return CPoint(0,0);int CLine:GetSize()return m_PointArray.GetSize(); 二、用Ado接口打开数据库BOOL CTestAdoDlg:OpenDb(CString filename)HRESULT
11、hr=S_OK;hr=m_pCon.CreateInstance("ADODB.Connection");if (hr!=S_OK)return FALSE;try_bstr_t sCon;sCon=_bstr_t(filename); /路径名hr=m_pCon->Open(sCon,"","",adModeUnknown);if (hr!=S_OK)return FALSE;/hr=m_pSet.CreateInstance("ADODB.Recordset");if (hr!=S_OK)return F
12、ALSE;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("连接数据库失败!错误信息:
13、%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:OnButto
14、nSave()/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();VA
15、RIANT varBLOB;SAFEARRAY *psa;SAFEARRAYBOUND rgsabound1;rgsabound0.lLbound = 0;rgsabound0.cElements = dwSize;psa = SafeArrayCreate(VT_UI1, 1, rgsabound);for (long i = 0; i < (long)dwSize; i+)SafeArrayPutElement (psa, &i, lpInfo+);varBLOB.vt = VT_ARRAY | VT_UI1;varBLOB.parray = psa;m_pSet->G
16、etFields()->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:OnSelchangeLi
17、stData()int iPos = m_List.GetCurSel();if (iPos<0) return ;m_pSet->MoveFirst();int i=0;while (i< iPos)m_pSet->MoveNext();i+;long lDataSize = m_pSet->GetFields()->GetItem(_variant_t("object")->ActualSize;if(lDataSize <= 0) return;_variant_t varBLOB;VariantInit (&v
18、arBLOB);varBLOB = m_pSet->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.A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目运作遵规守法保证承诺书8篇
- 广东省深圳市红岭教育集团2025-2026学年九年级(下)开学物理试卷(含答案)
- 肝移植术后管理与康复
- 重症患者血液净化治疗技术
- 公司文件存档与管理制度模版档案管理规范化版
- 消化科麻醉管理与配合
- 雨课堂学堂在线学堂云《教育科学研究法(华南师范)》单元测试考核答案
- 企业会议计划与安排模板
- 合作项目成功实施保障承诺书(4篇)
- 公益事务参与与社会贡献承诺书(4篇)
- 2026年陕西航空职业技术学院单招职业技能考试题库附答案详解(完整版)
- 2026年宁夏财经职业技术学院单招职业技能考试题库及答案详解(各地真题)
- 人形机器人与具身智能标准体系(2026版)
- 中级消防设施操作员(监控方向)理论考试题库资料(含答案)
- 2026年中考语文常考考点专题之古诗词赏析(选择题)
- 2025肿瘤科护理指南
- 2025年广州市公安局越秀区分局辅警招聘考试笔试试题(附答案)
- 2025-2026学年岭南版小学美术六年级第二学期教学计划及教学进度表
- 雨课堂学堂在线学堂云安全科学原理(中南大学)单元测试考核答案
- 磨矿培训教学课件
- 物流运输安全协议范本
评论
0/150
提交评论