100分征求高手一个小问题,关于BMP — SQL/ACCESS...

smallBridge 2001-12-21 12:36:10
如何用MFC ODBC方式从SQL/ACCESS中存取内容为BMP的字段并显示在一个PICTURE中,希望有具体的源代码,多谢。分数不够可以再加。
...全文
83 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
smallBridge 2001-12-21
  • 打赏
  • 举报
回复
懂点VC的人都睡觉了么?!
smallBridge 2001-12-21
  • 打赏
  • 举报
回复
to: pinel():
不行啊,谁能告诉我
smallBridge 2001-12-21
  • 打赏
  • 举报
回复
to: pinel():
多谢!我先试试,可以的话马上给分。
smallBridge 2001-12-21
  • 打赏
  • 举报
回复
help!
pinel 2001-12-21
  • 打赏
  • 举报
回复
//取出位图文件并保存于临时文件
CString CStlibPage3::OperateBitmap(CString m_strname)
{
CStandardSet* m_pStandard = new CStandardSet();
m_pStandard->Open();
if (m_pStandard->GetRecordCount()!=0)
m_pStandard->MoveFirst();
int tempnumber = 0;
CByteArray Array1;
while (!m_pStandard->IsEOF())
{
if(m_pStandard->m_StandardName == m_standard_name)
{
Array1.Copy(m_pStandard->m_StabitmapFile);
tempnumber = Array1.GetSize();
break;
}
m_pStandard->MoveNext();
}
m_pStandard->Close();
delete m_pStandard;
DWORD dwWritten;
//**********************************************
char temp_name[_MAX_PATH];
GetTempPath(_MAX_PATH,temp_name);
strcat(temp_name,"bitmap.tmp");
HANDLE fh;
for (int nIndex = 0; nIndex < tempnumber; nIndex++)
{
if (Array1.GetAt(nIndex) == 'B' && Array1.GetAt(nIndex + 1) == 'M'
&& Array1.GetAt(nIndex + 2) != 'P')
{
int HeaderLen = nIndex;// + sizeof(BITMAPFILEHEADER);
Array1.RemoveAt( 0, HeaderLen );
break;
}
}
LPBITMAPINFOHEADER bmiHeader = (LPBITMAPINFOHEADER)Array1.GetData() ;
fh = CreateFile(temp_name,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
WriteFile(fh,(LPBYTE)bmiHeader,(DWORD)tempnumber,&dwWritten,NULL);
Array1.RemoveAll(); //Relese Memory
CloseHandle(fh);
return temp_name;
}

void CStlibPage3::Savebmp_Data()
{
CStandardSet* m_pStandard = new CStandardSet();
m_pStandard->Open();
CString tempid = "StandardName = '" + m_standard_name+"'";
if(m_pStandard->FindLast(tempid))
{
if (strBitmapPath == "")
{
if (!m_pStandard->CanUpdate()) return;
m_pStandard->Edit();
CString strupdate = "NULL";
m_pStandard->SetFieldValue(_T("[StabitmapFile]"),COleVariant(strupdate));
m_pStandard->Update();
goto ip;
}
CFile tempfile;
tempfile.Open(strBitmapPath,CFile::modeRead);
DWORD dwBufSize;
dwBufSize = tempfile.GetLength();
Array.SetSize(dwBufSize);
tempfile.ReadHuge((LPSTR)(Array.GetData()), dwBufSize);
tempfile.Close();
(m_pStandard->m_StabitmapFile).Copy(Array);
if (!m_pStandard->CanUpdate()) return;
m_pStandard->Edit();
m_pStandard->SetFieldValue(_T("[StabitmapFile]"),COleVariant(Array));
m_pStandard->Update();
}
ip:
m_pStandard->Close();
delete m_pStandard;
}

void CStlibPage3::DrawBitmap()
{
UpdateData(TRUE);
//draw bitmap
if (CStlibPage3::hpreview)
DeleteObject(CStlibPage3::hpreview);
CStlibPage3::hpreview = (HBITMAP)LoadImage(AfxGetInstanceHandle(),strBitmapPath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if (CStlibPage3::hpreview)
{

GetObject(CStlibPage3::hpreview,sizeof(BITMAP),&bm);

CSize m_sizeSource(bm.bmWidth,bm.bmHeight);
GetDlgItem(IDC_PIC_PREVIEW)->GetClientRect(&m_rectDest);

CClientDC pDC(GetDlgItem(IDC_PIC_PREVIEW));
HDC dcmem = CreateCompatibleDC(pDC);
HBITMAP old = (HBITMAP)SelectObject(dcmem,CStlibPage3::hpreview);

StretchBlt(pDC.m_hDC,m_rectDest.left, m_rectDest.top, m_rectDest.Width(), m_rectDest.Height(),dcmem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
//GetDlgItem(IDC_PIC_PREVIEW)->GetDC()
SelectObject(dcmem,old);

DeleteDC(dcmem);
}

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧