《2022年添加AddToCombo函数 .pdf》由会员分享,可在线阅读,更多相关《2022年添加AddToCombo函数 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、添加 AddToCombo函数void CInputpictureDlg:AddToCombo() ADOConn m_AdoConn; m_AdoConn.OnInitADOConn(); _bstr_t sql; sql = select*from picture order by id; _RecordsetPtr m_pRecordset; m_pRecordset = m_AdoConn.GetRecordSet(_bstr_t)sql); int i=0; while(m_AdoConn.m_pRecordset-adoEOF=0) m_combo.InsertString(i,(
2、char*)(_bstr_t)m_pRecordset-GetCollect(id); m_pRecordset-MoveNext(); i+; m_AdoConn.ExitConnect(); 添加 OnSelchangeCombo1函数void CInputpictureDlg:OnSelchangeCombo1() / TODO: Add your control notification handler code here UpdateData(true); CString id; m_combo.GetLBText(m_combo.GetCurSel(),id); ADOConn m
3、_AdoConn; m_AdoConn.OnInitADOConn(); _bstr_t sql; sql = select*from picture where id=+id+ ; _RecordsetPtr m_pRecordset; m_pRecordset=m_AdoConn.GetRecordSet(sql); / 读取图像字段的实际大小long lDataSize = m_pRecordset-GetFields()-GetItem(Photo)-ActualSize; char *m_pBuffer; / 定义缓冲变量if(lDataSize 0) / 从图像字段中读取数据到va
4、rBLOB中_variant_t varBLOB; varBLOB = m_pRecordset-GetFields()-GetItem(Photo)-GetChunk(lDataSize); if(varBLOB.vt = (VT_ARRAY | VT_UI1) if(m_pBuffer = new charlDataSize+1) / 分配必要的存储空间 char *pBuf = NULL; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - -
5、- - - - SafeArrayAccessData(varBLOB.parray,(void *)&pBuf); memcpy(m_pBuffer,pBuf,lDataSize); / 复制数据到缓冲区m_pBuffer SafeArrayUnaccessData (varBLOB.parray); / 将数据转换为HBITMAP格式LPSTR hDIB; LPVOID lpDIBBits; BITMAPFILEHEADER bmfHeader; / 用于保存BMP 文件头信息, 包括类型、大小、位移量等DWORD bmfHeaderLen; / 保存文件头的长度bmfHeaderLen
6、= sizeof(bmfHeader); / 读取文件头的长度/ 将 m_pBuffer 中文件头复制到bmfHeader 中strncpy(LPSTR)&bmfHeader, (LPSTR)m_pBuffer, bmfHeaderLen); if (bmfHeader.bfType != (*(WORD*)BM) / 如果文件类型不对,则返回 MessageBox(BMP 文件格式不准确); return; hDIB = m_pBuffer + bmfHeaderLen; / 将指针移至文件头后面/ 读 取BMP 文 件 的 图 像 数 据 , 包 括 坐 标 及 颜 色 格 式 等 信 息
7、 到BITMAPINFOHEADER 对象BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB; / 读取 BMP 文件的图像数据,包括坐标及颜色格式等信息到BITMAPINFO对象BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ; / 根据 bfOffBits 属性将指针移至文件头后lpDIBBits = (m_pBuffer) + (BITMAPFILEHEADER *)m_pBuffer)-bfOffBits; CClientDC dc(this); / 生成一个与当前窗口相关的CClientDC
8、,用于管理输出设置/ 生成 DIBitmap 数据m_hBitmap = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS); m_photo.SetBitmap(m_hBitmap); 为“浏览”按钮添加消息响应函数,利用文件对话框CFileDialog取得图片的完整路径void CInputpictureDlg:OnButliulan() / TODO: Add your control notification handler code here CFileDialog m_dialo
9、g (true,bmp,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,位图文件 (*.bmp)|*.bmp,this); if (m_dialog.DoModal()=IDOK) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - / 取得图片的完整路径strText = m_dialog.GetPathName(); m_hBitmap=(HBITMAP):LoadImage(AfxGet
10、InstanceHandle(),strText,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTCOLOR|LR_DEFAULTSIZE); if (m_hBitmap != NULL) / 使用控件显示图片m_picture.SetBitmap(m_hBitmap); 为“保存”按钮添加消息响应函数,使具有向数据库添加数据的功能。保存图片时,将位图文件读入内存,调用AppendChunk()函数将内存中数据写入数据库中void CInputpictureDlg:OnOK() / TODO: Add extra validation here try C
11、String id,name; m_id.GetWindowText(id); if(id.IsEmpty() MessageBox(编号不能为空 ., 提示 ); return; m_name.GetWindowText(name); if(name.IsEmpty() MessageBox(姓名不能为空 ., 提示 ); return; char *m_pBuffer; / 定义文件对象CFile file; / 以只读方式打开文件if(!file.Open(strText,CFile:modeRead) MessageBox(无法打开BMP 文件 ); return; / 用于保存文件长
12、度名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - DWORD m_filelen; / 读取文件长度m_filelen = file.GetLength(); / 根据文件长度分配数组空间m_pBuffer = new charm_filelen + 1; / 读取 BMP 文件到 m_pBuffer 中if(file.ReadHuge(m_pBuffer,m_filelen)!=m_filelen) MessageBox(读取
13、 BMP 文件是出现错误); return; ADOConn m_AdoConn; m_AdoConn.OnInitADOConn(); _bstr_t sql; sql = select*from picture; _RecordsetPtr m_pRecordset; m_pRecordset=m_AdoConn.GetRecordSet(sql); / 添加新行m_pRecordset-AddNew(); VARIANT varblob; SAFEARRAY *psa; SAFEARRAYBOUND rgsabound1; rgsabound0.lLbound = 0; rgsaboun
14、d0.cElements = m_filelen; / 创建数组psa = SafeArrayCreate(VT_UI1,1,rgsabound); / 将 m_pBuffer 中的图像数据写入数组psa for(long i=0;iGetFields()-GetItem(id)-Value = (_bstr_t)id; m_pRecordset-GetFields()-GetItem(name)-Value = (_bstr_t)name; / 调用 AppendChunk()函数将图像数据写入Photo 字段m_pRecordset-GetFields()-GetItem(photo)-A
15、ppendChunk(varblob); / 更新数据库m_pRecordset-Update(); m_AdoConn.ExitConnect(); catch(.) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - MessageBox(操作失败 ); return; MessageBox(操作成功 .); m_combo.ResetContent(); AddToCombo(); OnButcancel(); /CDialo
16、g:OnOK(); 为“取消”按钮添加消息响应函数,点击取消是清空控件中数据void CInputpictureDlg:OnButcancel() / TODO: Add your control notification handler code here m_id.SetWindowText(); m_name.SetWindowText(); m_picture.SetBitmap(NULL); 添加自定义函数,实现窗体伸缩功能,当“显示”按钮被按下时调用此函数伸展窗体void CInputpictureDlg:Display() CRect rcDlg; GetWindowRect(r
17、cDlg); if (m_bExpand) rcDlg.SetRect( rcDlg.left, rcDlg.top, rcDlg.left + m_nExpandedWidth, rcDlg.top + rcDlg.Height(); else rcDlg.SetRect(rcDlg.left, rcDlg.top, rcDlg.left + m_nNormalWidth, rcDlg.top + rcDlg.Height(); MoveWindow(rcDlg, true); 为“显示”按钮添加消息响应函数void CInputpictureDlg:OnButshow() / TODO:
18、Add your control notification handler code here m_bExpand = !m_bExpand; Display(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - 在 OnInitDialog 函数中添加m_bExpand=false; CRect rcDlg, rcMarker; GetWindowRect(rcDlg); m_nExpandedWidth = rcDlg.Width(); GetDlgItem(IDC_STATIC1)-GetWindowRect(rcMarker); m_nNormalWidth = (rcMarker.left - rcDlg.left); Display(); AddToCombo(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -