Â̲èÈí¼þÔ°
×ÊѶÊ×Ò³> Èí¼þ½Ì³Ì> ±à³Ì¿ª·¢> Visual C++ÖÐʵÏÖ¶ÔͼÏñÊý¾ÝµÄ¶ÁÈ¡ÏÔʾ

Visual C++ÖÐʵÏÖ¶ÔͼÏñÊý¾ÝµÄ¶ÁÈ¡ÏÔʾ

×÷ÕߣºØýÃûÀ´Ô´£ºÂ̲èÈí¼þÔ°2011-06-05 12:35:48

ÔÚÀûÓÃVC½øÐÐÊý¾Ý¿â±à³Ìʱ£¬¾­³£ÐèÒª´¦ÀíÊý¾Ý¿âÖеÄͼÏñÊý¾Ý£¬½«¸ÃͼÏñ´ÓÊý¾Ý¿âÖжÁÈ¡³öÀ´²¢ÏÔʾ£¬Í¼ÏñÊý¾ÝÓëÎı¾×ֶβ»Í¬£¬ËüÊÇ×÷ΪOLE×Ö¶ÎÔÚÊý¾Ý¿âÖд洢£¬Í¨¹ýÊý¾Ý¼¯¶ÔÏóµÄ³ÉÔ±±äÁ¿×Ô¶¯½»»»µÃµ½µÄͼÏñÊý¾Ý£¬µÃµ½µÄÊý¾Ý²¢²»ÄÜÖ±½ÓÏÔʾ£¬ÈçºÎ´¦ÀíͼÏñÊý¾Ý£¬Ò»Ö±ÊÇÊý¾Ý¿â±à³ÌÖеÄÒ»¸öÄѵ㣬Ŀǰ¹ØÓÚVC½øÐÐÊý¾Ý¿â±à³ÌµÄ×ÊÁϲ»ÉÙ£¬µ«ºÜÉÙÉ漰ͼÏñÊý¾ÝµÄ²Ù×÷£¬±ÊÕßÕë¶ÔÒ»ÏÖ×´£¬½áºÏ×Ô¼º¿ª·¢µÄÒ»¸öÏîÄ¿£¬½â¾öÁËÈçºÎÏÔʾÊý¾Ý¿âÖеÄͼÏñÕâÒ»ÎÊÌ⣬±¾ÎÄÒÔ²Ù×÷ACESSÊý¾Ý¿âΪÀý×Ó£¬½²½âÒ»ÏÂ×Ô¼ºµÄʵÏÖ˼·£¬Ï£Íû¶Ô°®ºÃVC±à³ÌµÄÅóÓÑÃÇÓÐËù°ïÖú£¬ÒÔÆðµ½Å×שÒýÓñµÄ×÷Óá£

ΪÁ˼ò»¯ÎÊÌ⣬¸ÃÊý¾Ý¿âµÄ±íÖÐÖ»ÓÐÒ»¸öÃûΪImagesµÄOLE×ֶΣ¬ÎÒʹÓÃDAOÁ¬½Ó²Ù×÷Êý¾Ý¿â£¬¶ÁÈ¡µÄͼÏñÊý¾ÝÏÔʾÔÚÒ»¸ö¶Ô»°¿òÉÏ£¬ÖÁÓÚʹÓÃODBC¡¢DAO»¹ÊÇADO,ÕâÒª¸ù¾Ý¾ßÌåÇé¿ö¶ø¶¨£¬µ«ÎÞÂÛʹÓÃÄÄÒ»ÖÖ£¬¶ÔͼÏñµÄÏÔʾÀ´Ëµ£¬ÊµÏֵĹý³ÌÊÇ´óͬСÒìµÄ¡£ÓÉÓÚƪ·ùÓÐÏÞ£¬ÎÄÕÂÖжÔÈçºÎʵÏÖÊý¾Ý¿âµÄÁ¬½Ó²»ÔÙ×÷¾ßÌåµÄ˵Ã÷£¬ÓÐÐËȤµÄ¶ÁÕßÅóÓÑ¿ÉÒԲο¼VCÊý¾Ý¿â±à³ÌµÄ×ÊÁÏ¡£ÊµÏÖ¹ý³ÌÖУ¬Ê×Ïȶ¨ÒåÒ»¸öCDaoRecordsetµÄ×ÓÀà CimageDataÈçÏ£º
class CimageData : public CDaoRecordset
{
public:
CimageData £¨CDaoDatabase* pDatabase = NULL£©£»
DECLARE_DYNAMIC£¨CimageData£©
file://{{AFX_FIELD£¨CimageData, CDaoRecordset£©
CByteArray m_Images;//ÉùÃ÷×Ö½ÚÊý×éÓÃÀ´´æ·ÅͼÏñÊý¾Ý
file://}}AFX_FIELD
// Overrides
// ClassWizard generated virtual function overrides
file://{{AFX_VIRTUAL£¨CimageData£©
public:
virtual CString GetDefaultDBName£¨£©£»
virtual CString GetDefaultSQL£¨£©£»
virtual void DoFieldExchange£¨CDaoFieldExchange* pFX£©£»
file://}}AFX_VIRTUAL
¸ÃÀàµÄʵÏÖΪ£º
CimageData:: CimageData £¨CDaoDatabase* pdb£©
: CDaoRecordset£¨pdb£©
{
file://{{AFX_FIELD_INIT£¨CimageData£©
m_nFields = 1;//Êý¾Ý¿âµÄ±íÖнöÓÐÒ»¸ö×Ö¶Î
file://}}AFX_FIELD_INIT
m_nDefaultType = dbOpenDynaset;//ÒÔ¶¯Ì¬¼¯·½Ê½´ò¿ªÊý¾Ý¿â
}
CString CimageData::GetDefaultDBName£¨£©
{
return _T£¨"E:\\IMAGES.mdb"£©£»//ĬÈϵÄACESSÊý¾Ý¿âÔÚEÅÌ£¬ÃûΪIMAGES
}
CString CimageData::GetDefaultSQL£¨£©
{
return _T£¨"[Table]"£©£»//ĬÈÏ´ò¿ªÊý¾Ý¿âÖÐÃûΪ"Table"µÄ±í
}
void CimageData::DoFieldExchange£¨CDaoFieldExchange* pFX£©
{
file://{{AFX_FIELD_MAP£¨CimageData£©
pFX->SetFieldType£¨CDaoFieldExchange::outputColumn£©£»
DFX_Binary£¨pFX, _T£¨"[Images]"£©£¬ m_Images£©£»//ÒÔ¶þ½øÖÆ·½Ê½ÔÚImages×ֶκÍm_Images±äÁ¿¼ä½»»»Êý¾Ý
file://}}AFX_FIELD_MAP
}

ÓÐÁ˸ÃÀ࣬¾Í¿ÉÒÔ¶¨ÒåÏàÓ¦µÄ¶ÔÏóÀ´ÓëÊý¾Ý¿âÖеÄͼÏñ×ֶν»»»Êý¾Ý£¬ÏÂÃ涨ÒåµÄº¯ÊýGetImageData£¨£©ËµÃ÷ÁËÈçºÎ¸ù¾Ý¶ÁÈ¡µÄOLE×Ö¶ÎÊý¾ÝÉú³É´ýÏÔʾµÄͼÏñ£¬ÐèҪעÒâµÄÊǸú¯ÊýÖÐʹÓõÄCBitmapÀàµÄ±äÁ¿BitmapÊÇÔ¤¶¨ÒåµÄÒ»¸öÈ«¾Ö±äÁ¿£º
BOOL CImageDlg:: GetImageData£¨CByteArray & DBArray£©
{
CByteArray Array;
Array.Copy£¨ DBArray£©£»
int HeaderLen = 78 + sizeof£¨BITMAPFILEHEADER£©£» file://È·¶¨Í¼ÏñÍ·ÐÅÏ¢µÄÆðʼλÖÃ
Array.RemoveAt£¨ 0, HeaderLen £©£» // Òƶ¯µ½Í¼ÏñÍ·ÐÅÏ¢µÄÆðʼλÖÃ
BITMAPINFOHEADER &bmiHeader = *£¨LPBITMAPINFOHEADER£©Array.GetData£¨£© ;
BITMAPINFO &bmInfo = *£¨LPBITMAPINFO£©Array.GetData£¨£© ;
file://µÃµ½Í¼ÏñÊý¾ÝµÄÍ·ÐÅÏ¢
int nColors=bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1 ¡¶ bmiHeader.biBitCount;
file://È·¶¨Í¼ÏñµÄÑÕÉ«Êý
LPVOID lpDIBBits;
if£¨ bmInfo.bmiHeader.biBitCount > 8 £©
lpDIBBits=£¨LPVOID£©£¨£¨LPDWORD£©£¨bmInfo.bmiColors+bmInfo.bmiHeader.biClrUsed£©+
£¨£¨bmInfo.bmiHeader.biCompression == BI_BITFIELDS£© ? 3 : 0£©£©£»
else
lpDIBBits = £¨LPVOID£©£¨bmInfo.bmiColors + nColors£©£»
file://µÃµ½Í¼Ïñ¸÷¸öÏñËصľßÌåÊý¾Ý
CClientDC dc£¨NULL£©£»
HBITMAP hBmp = CreateDIBitmap£¨ dc.m_hDC,
&bmiHeader,
CBM_INIT,
lpDIBBits,
&bmInfo,
DIB_RGB_COLORS£©£»
file://Éú³Éλͼ¾ä±ú
Bitmap.Attach£¨ hBmp £©£»//½«¸Ã¾ä±úÓ붨ÒåµÄBitmap¶ÔÏóÁªÏµÔÚÒ»Æð
Array.RemoveAll£¨£©£» file://ÊÍ·ÅÄÚ´æ
return TRUE;
}
ÓÐÁËÉÏÃæµÄ×¼±¸¹¤×÷£¬ÏÖÔÚ¿ÉÒÔʵÏÖͼÏñµÄÏÔʾº¯ÊýÁË£¬ÆäʵÏÖÈçÏ£º
void CImageDlg::OnShowImage£¨£©
{
CimageData db;//¶¨Òå¼Ç¼¼¯¶ÔÏó
db.Open£¨£©£»´ò¿ªÊý¾Ý¿â
GetImageData£¨db.m_Images£©£»//¸ù¾Ý¼Ç¼¼¯¶ÔÏóµÄ³ÉÔ±±äÁ¿Éú³ÉͼÏñ¶ÔÏó
file://ÒÔÏÂÊÇÔÚ¶Ô»°¿òµÄ¹Ì¶¨ÇøÓòÏÔʾͼÏñ
CPaintDC dc£¨this£©£»
if £¨£¡£¨Bitmap.m_hObject == NULL£©£©
{ CDC dcMem;
dcMem.CreateCompatibleDC£¨ &dc £©£» file://create a Memory Image
CBitmap* pbmpOld ;
BITMAP BmpSize ;
Bitmap.GetBitmap£¨&BmpSize£©£» file://get Image Size
pbmpOld = dcMem.SelectObject£¨&Bitmap£©£»
dc.StretchBlt£¨ 20, 20, 200, 200, &dcMem, 0, 0, BmpSize.bmWidth, BmpSize.bmHeight, SRCCOPY£©£»
dcMem.SelectObject£¨ pbmpOld £©£»
}
ÒÔÉÏ´úÂëÖÐʹÓõÄÊý¾Ý¿âΪACESS97,³ÌÐòÔÚwindows98¡¢Visual C++6.0»·¾³Ï±àÒëͨ¹ý£¬ÔËÐÐÕý³£¡£

¹Ø¼ü´Ê£º
  • ÈÈÃÅÈí¼þ
  • ÈÈÃűêÇ©
·µ»Ø¶¥²¿