请教各位朋友,MFC的对话框中如何显示Access种的图片,本人没大接触过MFC,请详细说明,或者有代码。谢谢!!
解决方案 »
- 有人能帮手下这个点歌程序帮忙修改下吗?程序就在csdn里。
- 怎样得到一个赋了值的浮点型变量的位数啊?
- 高手请进..如何将一个进程隐藏起来
- 用createprocess启动了1.exe,1.exe又启动2.exe,如何得到孙子进程2.exe的ID和句柄?
- 比较怪异的问题
- 如何获得当前具有输入焦点的控件的句柄(不一定为本程序,可能是任意一程序)?
- 关于Heap
- 我创建了一个ATL/COM的服务Service,但是,如何调用?
- 哪里有计算机进行浮点除法运算原理的文章?(63分!!!!!!!!!!!!!!!!!!!!!!!1)
- 请问在Windows CE中是否可以使用Access数据库,特别是在PDA上?
- 显示出现乱码是那儿出错了?
- vc基础问题
1.将 access中的数据写入本地临时文件。
2.将刚写成的临时文件显示在对话框上。相信这两步LZ都会做了吧?
CFile WriteFile;
WriteFile.Open(lpszFile,CFile::modeWrite|CFile::modeCreate);
WriteFile.Write(m_FivePhoto.GetData(),m_FivePhoto.GetSize());
WriteFile.Close();
CBitmap hbmp;
HBITMAP hbitmap;
//将pStatic指向要显示的地方
CStatic *pStaic;
pStaic=(CStatic*)GetDlgItem(IDC_PHOTO);
//装载资源 0.bmp
hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),lpszFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
hbmp.Attach(hbitmap);
//获取图片格式
BITMAP bm;
hbmp.GetBitmap(&bm);
CDC dcMem;
dcMem.CreateCompatibleDC(GetDC());
CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp);
CRect lRect;
pStaic->GetClientRect(&lRect);
//显示位图
pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(),&dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
dcMem.SelectObject(&poldBitmap);
void CInsertBmpDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
if(m_hbitmap != NULL)
{
CDC* pDC = m_Picture.GetDC();
CRect r;
m_Picture.GetClientRect(&r);
//将位图选进设备场景中
CDC memdc;
memdc.CreateCompatibleDC(pDC);
memdc.SelectObject(m_hbitmap);
BITMAP bmp;
GetObject(m_hbitmap,sizeof(bmp),&bmp);
pDC->StretchBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
memdc.DeleteDC();
}
}
void CInsertBmpDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CFileDialog m_dialog (true,"bmp",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"位图文件(*.bmp)|*.bmp",this);
if(m_dialog.DoModal() == IDOK)
{
//取得图片的完整路径
strText = m_dialog.GetPathName();
m_hbitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),strText,IMAGE_BITMAP,
0,0,LR_LOADFROMFILE|LR_DEFAULTCOLOR|LR_DEFAULTSIZE);
if (m_hbitmap != NULL)
{
//在控件上绘制图片
CDC* pDC = m_Picture.GetDC();
CRect r;
m_Picture.GetClientRect(&r);
//将位图选进设备场景中
CDC memdc;
memdc.CreateCompatibleDC( pDC );
memdc.SelectObject(m_hbitmap);
BITMAP bmp;
GetObject(m_hbitmap,sizeof(bmp),&bmp);
pDC->StretchBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
memdc.DeleteDC();
}
}
}void CInsertBmpDlg::OnButton2()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(m_Edit.IsEmpty())
{
MessageBox("基础信息不能为空.","提示");
return;
}
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open("select * from picture",m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
try
{
m_pRecordset->AddNew();//添加新行
VARIANT m_bitdata;
CFile m_file (strText,CFile::modeRead);
DWORD m_filelen = m_file.GetLength()+1;
char * m_bitbuffer = new char[m_filelen];
m_file.ReadHuge(m_bitbuffer,m_filelen);
m_file.Close();
m_bitdata.vt = VT_ARRAY|VT_UI1;
SAFEARRAY * m_psafe;
SAFEARRAYBOUND m_band;
m_band.cElements = m_filelen;
m_band.lLbound = 0;
m_psafe = SafeArrayCreate(VT_UI1,1,&m_band);
for(long i=0;i < m_filelen ; i++)
{
SafeArrayPutElement(m_psafe,&i,m_bitbuffer++);
}
m_bitdata.parray = m_psafe;
m_pRecordset->GetFields()->GetItem("编号")->Value = (_bstr_t)m_Edit;
m_pRecordset->GetFields()->GetItem("图片")->AppendChunk(&m_bitdata);
m_pRecordset->Update();
}
catch(...)
{
MessageBox("操作失败");
return;
}
MessageBox("操作成功.");
}
void CDistillBmpDlg::OnSelchangeCombo1()
{
// TODO: Add your control notification handler code here
OnInitADOConn();
CString str;
m_Combo.GetLBText(m_Combo.GetCurSel(),str);
CString sql;
sql.Format("select*from picture where 编号='%s'",str);
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open((_bstr_t)sql,m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
HBITMAP m_hBitmap;
//读取图像字段的实际大小
long lDataSize = m_pRecordset->GetFields()->GetItem("图片")->ActualSize;
char *m_pBuffer; //定义缓冲变量
if(lDataSize > 0)
{
//从图像字段中读取数据到varBLOB中
_variant_t varBLOB;
varBLOB = m_pRecordset->GetFields()->GetItem("图片")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
if(m_pBuffer = new char[lDataSize+1]) //分配必要的存储空间
{
char *pBuf = NULL;
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 = 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文件的图像数据,包括坐标及颜色格式等信息到BITMAPINFOHEADER对象
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB;
//读取BMP文件的图像数据,包括坐标及颜色格式等信息到BITMAPINFO对象
BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ;
//根据bfOffBits属性将指针移至文件头后
lpDIBBits = (m_pBuffer) + ((BITMAPFILEHEADER *)m_pBuffer)->bfOffBits;
CClientDC dc(this); //生成一个与当前窗口相关的CClientDC,用于管理输出设置
//生成DIBitmap数据
m_hBitmap = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);
}
}
}
ExitConnect();
if(m_hBitmap != NULL)
{
CDC* pDC = m_Picture.GetDC();
CRect r;
m_Picture.GetClientRect(&r);
//将位图选进设备场景中
CDC memdc;
memdc.CreateCompatibleDC( pDC );
memdc.SelectObject(m_hBitmap);
BITMAP bmp;
GetObject(m_hBitmap,sizeof(bmp),&bmp);
pDC->StretchBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
memdc.DeleteDC();
}
}
大家有没有遇到过?大家可以随便找个listctrl试下,上面的代码
listctrl是用drawitem自绘方式
是否有此方面例子,有的话请发到[email protected]里面。不甚感谢