华德瑞纳米科技股份:vc的简单问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/20 16:29:44
void CPicDlg::ShowBmpInStaic()
{
CBitmap hbmp;
HBITMAP hbitmap;
//将pStatic指向要显示的地方
CStatic *pStaic;
pStaic=(CStatic*)GetDlgItem(IDC_SHOW);
//装载资源 MM.bmp是我的一个文件名,用你的替换
CPicSet m_picshow;//定义的数据库全局变量
m_picshow.Open();

//CString strFileName = "1";// 用来存放临时文件名,以该临时文件存放读取的数据库的图像数据。
if (m_picshow.IsEOF())
AfxMessageBox("Unable to get image from db");
else
{
char tmpPath[_MAX_PATH+1];
GetTempPath(_MAX_PATH,tmpPath);//得到临时文件的目录;

//strFileName.Insert(0,tmpPath);//生成临时文件名
CString strFileName = "temp.bmp";
strFileName = tmpPath+strFileName;

AfxMessageBox(strFileName);//显示临时文件目录
CFile outFile(strFileName,CFile::modeCreate|CFile::modeWrite);
//向临时文件写数据,数据库中数据读操作时关键是知道数据的长度,这可以从记录集的图像字段对应的长二进制成员变量m_Image的成员

//dwDataLength得到;
LPSTR buffer = (LPSTR)GlobalLock(m_picshow.m_pic.m_hData);//m_hData为数据,用GLobalLock 分配
outFile.WriteHuge(buffer,m_picshow.m_pic.m_dwDataLength);//m_dwDataLength为文件长度
GlobalUnlock(m_picshow.m_pic.m_hData);
outFile.Close();
m_picshow.Close();
//ShellExecute(NULL,NULL,_T("temp.bmp"),NULL,_T(""),NULL);//打开文件
//定义图像句柄;
hbitmap = (HBITMAP)::LoadImage(NULL,//NULL,
strFileName,//临时文件路径,"b.bmp"
IMAGE_BITMAP,
0,
0,
LR_LOADFROMFILE);//得到的hbm句柄 为NULL!

hbmp.Attach(hbitmap);

//hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),"b.bmp",
//IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

//获取图片格式
BITMAP bm;
hbmp.GetBitmap(&bm);
CDC dcMem;
dcMem.CreateCompatibleDC(GetDC());
CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp);
CRect lRect;
pStaic->GetClientRect(&lRect);
lRect.NormalizeRect();

//显示位图
pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(),
&dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
dcMem.SelectObject(&poldBitmap);
}

为什么不能显示图片?

不要使用ODBC的查询了,用ADO吧。如果是小型数据库,直接建文件来存取好了。

估计有错误

很可能在OnPaint()里没有做显示图片的操作,图片被刷新掉了。

晕,这么乱啊。
错误太多了哥们儿,是新手吧,先学学简单的吧。