各位高手:我在做程序的时候遇到这个问题:
1、我需要动态的将Icon文件的图标导入到HICON变量中去,因为icon文件未知,所以只能动态的根据icon文件的路径导入到HICON变量中。
已知icon文件的路径->导入到HICON中!
2、将HICON变量的图形数据存到SQL SERVER数据库中。
3、从数据库中读出HICON.
最好能给我一点例子,不胜感激!!!!!
1、我需要动态的将Icon文件的图标导入到HICON变量中去,因为icon文件未知,所以只能动态的根据icon文件的路径导入到HICON变量中。
已知icon文件的路径->导入到HICON中!
2、将HICON变量的图形数据存到SQL SERVER数据库中。
3、从数据库中读出HICON.
最好能给我一点例子,不胜感激!!!!!
解决方案 »
- 关于串口通讯的简单问题(龚建伟编的书)
- 如何用目录调用对话框SHBrowseForFolder?
- 关于CEdit中字体下划线的更改
- VC关于定时全屏显示图片时出现的定时不准的问题
- 我的程序界面是基于对话框,在设计时为XP风格的界面,为何运行后却是一般的界面?
- 学习语言类应该要先做什么?
- 高分请教技术难题!
- 送分!mysql++总算在vc.net下编译成功啦,花了我好几天
- 我有很多分~
- 急急!这个该死的网站 http://www.cnfootball.net/ 修改了我的注册表!谁知道如何恢复注册表??
- 简单问题:怎样修改程序显示的标题
- 问个简单的clipboard的问题,16日18:00前结账
HRESULT hr;
DWORD FileSize,count;
char *pBuf;
VARIANT varBLOB;
SAFEARRAY *psa;
VARIANT rgvFields;
VARIANT rgvValues;
CFile f;
CFileException e;
HGLOBAL hfilemem;
SAFEARRAYBOUND rgsabound[1];
hr=CoInitialize(NULL);
CString Constr,wCmdString;
CComPtr<ADOField> pField;
if(FAILED(hr))
m_Conn = NULL;
m_Rec = NULL;
pFields = NULL; if(!f.Open(m_PhotoPath,CFile::modeRead,&e))
{
AfxMessageBox("打开文件错误!");
return;
}
f.SeekToBegin();
FileSize=f.GetLength();
hfilemem=GlobalAlloc(GMEM_MOVEABLE,(FileSize));
if(!hfilemem)
{
::AfxMessageBox("内存不够!");
return;
}
pBuf=(char *)GlobalLock(hfilemem);
count=f.Read(pBuf,FileSize);
if(count!=FileSize)
{
::AfxMessageBox("数据错误");
f.Close();
return;
}
f.Close();
JudgeAdo();
hr = ::CoCreateInstance((REFCLSID)CLSID_CADOConnection,NULL,CLSCTX_INPROC_SERVER,\
(REFIID)IID_IADOConnection,(LPVOID*)&m_Conn);
if (FAILED(hr))
return ;
hr = ::CoCreateInstance((REFCLSID)CLSID_CADORecordset,NULL,CLSCTX_INPROC_SERVER,\
(REFIID)IID_IADORecordset,(LPVOID*)&m_Rec);
if (FAILED(hr))
return ;
Constr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+tempstr+";Persist Security Info=False";
hr = m_Conn->Open(CComBSTR(Constr),CComBSTR(""),CComBSTR(""),adOpenUnspecified);
if (FAILED(hr))
{
::AfxMessageBox("连接数据库错误!");
return ;
}
wCmdString=_T("select * from userphoto");//
hr = m_Rec->Open(CComVariant(wCmdString),CComVariant(m_Conn),adOpenKeyset,adLockOptimistic,adCmdText);
if (FAILED(hr))
{
::AfxMessageBox("打开表错误!");
return ;
}
/* 添加新的记录 需要两个参数 所以添加两个空的参数*/
rgvFields.vt = VT_ERROR;
rgvFields.scode = DISP_E_PARAMNOTFOUND;
rgvValues.vt = VT_ERROR;
rgvValues.scode = DISP_E_PARAMNOTFOUND;
UpdateData();
m_Rec->AddNew(rgvFields, rgvValues);
m_Rec->put_Collect(CComVariant(1),(CComVariant)(m_UserName));
m_Rec->put_Collect(CComVariant(2),CComVariant((long)m_UseOld)); ///为新记录填充username字段
pField=NULL;
if(pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = FileSize;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound); ///创建SAFEARRAY对象
for (long i = 0; i < (long)FileSize; i++)
SafeArrayPutElement (psa, &i, pBuf++); ///将pBuf指向的二进制数据保存到SAFEARRAY对象psa中
varBLOB.vt = VT_ARRAY | VT_UI1; ///将varBLOB的类型设置为BYTE类型的数组
varBLOB.parray = psa; ///为varBLOB变量赋值
m_Rec->get_Fields(&pFields);//加入BLOB类型的数据
pFields->get_Item(CComVariant(3),&pField);
pField->AppendChunk(varBLOB);///加入BLOB类型的数据
}
hr=m_Rec->Update(rgvFields, rgvValues);
if(FAILED(hr))
{
::AfxMessageBox("保存失败!");
return ;
}
// m_Rec->UpdateBatch(adAffectAll);
GlobalUnlock(hfilemem);
GlobalFree(hfilemem);
if(m_Rec)
{
m_Rec->Close();
}
if(m_Conn)
{
m_Conn->Close();
// m_Conn->Release();
}
HRESULT hr;
HDC hdc;
char *pBuf;
VARIANT varBLOB;
VARIANT rgvValues;
BSTR Bstr1;
long lDataSize;
COleVariant rValueData;
hr=CoInitialize(NULL);
CString Constr,wCmdString;
CComPtr<ADOField> pField;
// if(FAILED(hr))
m_Conn = NULL;
m_Rec = NULL;
pFields = NULL;
hr = ::CoCreateInstance((REFCLSID)CLSID_CADOConnection,NULL,CLSCTX_INPROC_SERVER,\
(REFIID)IID_IADOConnection,(LPVOID*)&m_Conn);
if (FAILED(hr))
return ;
hr = ::CoCreateInstance((REFCLSID)CLSID_CADORecordset,NULL,CLSCTX_INPROC_SERVER,\
(REFIID)IID_IADORecordset,(LPVOID*)&m_Rec);
if (FAILED(hr))
return ;
Constr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+tempstr+";Persist Security Info=False";
hr = m_Conn->Open(CComBSTR(Constr),CComBSTR(""),CComBSTR(""),adOpenUnspecified);
if (FAILED(hr))
{
::AfxMessageBox("连接数据库错误!");
return ;
}
wCmdString=_T("select * from userphoto");//
hr = m_Rec->Open(CComVariant(wCmdString),CComVariant(m_Conn),adOpenKeyset,adLockOptimistic,adCmdText);
if (FAILED(hr))
{
::AfxMessageBox("打开表错误!");
return ;
}
m_Rec->get_Collect(CComVariant(1),rValueData);
Bstr1= (_bstr_t) rValueData;
m_UserName.Format("%s",(CString)Bstr1);
rValueData.Clear();
m_Rec->get_Collect(CComVariant(2),rValueData); ///为新记录填充username字段
m_UseOld=rValueData.intVal;
pField=NULL;
m_Rec->get_Fields(&pFields);//加入BLOB类型的数据
pFields->get_Item(CComVariant(3),&pField);
pField->get_ActualSize(&lDataSize);
if(lDataSize > 0)
{
rgvValues.vt = VT_ERROR;
rgvValues.scode = DISP_E_PARAMNOTFOUND;
pField->GetChunk(lDataSize,&varBLOB);
if(varBLOB.vt == (VT_ARRAY | VT_UI1)) ///判断数据类型是否正确
{
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf); ///得到指向数据的指针
/*****在这里我们可以对pBuf中的数据进行处理*****/
SafeArrayUnaccessData (varBLOB.parray);
}
}