怎么动态设置加载本地位图的路径名?初学VC++6.0,望高手指点!万谢!!!
void CPatentCaseDlg::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
{
//------设置图片控件使图片适用于控件尺寸-------//
CWnd *pWnd=GetDlgItem(IDC_SOLUTIONDRAW);//获得pictrue控件窗口的句柄
CRect rect;
pWnd->GetClientRect(&rect);//获得pictrue控件所在的举行区域
CDC *pDC=pWnd->GetDC();//获得pictrue控件的DC
IStream *pStm;
CFileStatus fstatus;
CFile file;
LONG cb;
CTRIZPLATFORMApp *app = (CTRIZPLATFORMApp *)AfxGetApp(); //生成指向应用程序类的指针
m_patent_SearchID=app->patent_SearchID1;
// TODO: Add extra initialization here
//连接数据库
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
//设置select语句
_bstr_t vSQL;
vSQL="SELECT * FROM patent";
//执行select语句
_RecordsetPtr m_pRecordsetPictureTable;
m_pRecordsetPictureTable=m_AdoConn.GetRecordSet(vSQL);
_variant_t var;
CString picturename[2];
m_pRecordsetPictureTable->MoveFirst();
while (!m_pRecordsetPictureTable->adoEOF)
{
var=m_pRecordsetPictureTable->GetCollect(_variant_t("patentID"));
if(atoi((LPCSTR)_bstr_t(var))==app->patent_SearchID1)
{
//var=m_pRecordsetPictureTable->GetCollect(_variant_t("probpicture"));
//picturename[0]=(LPCSTR)_bstr_t(var);
var=m_pRecordsetPictureTable->GetCollect(_variant_t("solupicture"));
picturename[1]=(LPCSTR)_bstr_t(var);
}
m_pRecordsetPictureTable->MoveNext();
}
IPicture *pPic;//定义显示图片的接口(可显示jpg格式图片)
CString m_sPath="./图片/picturename[1].BMP";//设置想要显示的图片
//打开图象文件,获取文件字节数
if(file.Open(m_sPath,CFile::modeRead) && file.GetStatus(m_sPath,fstatus)
&& ((cb=fstatus.m_size)!=-1))
{
//分配全局存储空间
HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,cb);
LPVOID pvData=NULL;
if(hGlobal!=NULL)
{
//锁定分配内存块
if((pvData=GlobalLock(hGlobal))!=NULL)
{
//读入文件到内存缓冲区
file.ReadHuge(pvData,cb);
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal,true,&pStm);
}
}
}
//装载图象文件
if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))
{
OLE_XSIZE_HIMETRIC hmWidth;
OLE_XSIZE_HIMETRIC hmHeight;
pPic->get_Width(&hmWidth);//获得图象真实宽度
pPic->get_Height(&hmHeight);//获得图象真实高度
//在控件上显示图片
pPic->Render(*pDC,0,0,rect.Width(),rect.Height(),0,hmHeight,hmWidth,-hmHeight,NULL);
pPic->Release();
}
CDialog::OnPaint();
}
CString m_sPath="./图片/picturename[1].BMP"
这里我只能设置CString m_sPath="./图片/CN200380104880.7-S(1),S(2).BMP"才能显示本地位图资源,
如果是这样的话,我就不能根据前面的查询结果动态显示位图。
但是我要根据前面SQL server 查询表patent中贮存的文件名来动态加载本地位图资源。
初学VC++,有很多地方需要请教。
请问,有什么好的方法吗?
万分感谢给一些建议。。
Visual?C++ Bitmap 图片 控件
[解决办法]
m_sPath.Format(_T(".//图片//%s.BMP"),picturename[1]);
[解决办法]