⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 能够在数据库中存取大的二进制块
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "UsingBlob.h"

#include "MainFrm.h"
#include "dbImages.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
	ON_WM_CREATE()
	ON_COMMAND_EX(CG_ID_VIEW_IMAGESINDB, OnBarCheck)
	ON_UPDATE_COMMAND_UI(CG_ID_VIEW_IMAGESINDB, OnUpdateControlBarMenu)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
	ON_COMMAND(ID_FILE_STORETODATABASE, OnFileStoretodatabase)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	
}

CMainFrame::~CMainFrame()
{
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CMDIFrameWnd::PreCreateWindow(cs) )
		return FALSE;

    cs.x  = cs.y = 0;
    cs.cx = GetSystemMetrics(SM_CXFULLSCREEN);
    cs.cy = GetSystemMetrics(SM_CYFULLSCREEN);

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CMDIFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CMDIFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers


int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)		return -1;	// TODO: Add a menu item that will toggle the visibility of the	// dialog bar named "ImagesInDB":	//   1. In ResourceView, open the menu resource that is used by	//      the CMainFrame class	//   2. Select the View submenu	//   3. Double-click on the blank item at the bottom of the submenu	//   4. Assign the new item an ID: CG_ID_VIEW_IMAGESINDB	//   5. Assign the item a Caption: ImagesInDB	// TODO: Change the value of CG_ID_VIEW_IMAGESINDB to an appropriate value:	//   1. Open the file resource.h	// CG: The following block was inserted by the 'Dialog Bar' component	{		// Initialize dialog bar m_wndImagesInDB		if (!m_wndImagesInDB.Create(this, CG_IDD_IMAGESINDB,			CBRS_LEFT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,			CG_ID_VIEW_IMAGESINDB))		{			TRACE0("Failed to create dialog bar m_wndImagesInDB\n");			return -1;		// fail to create		}		m_wndImagesInDB.EnableDocking(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);		EnableDocking(CBRS_ALIGN_ANY);		DockControlBar(&m_wndImagesInDB);	}


	CListCtrl*  pList = (CListCtrl*)m_wndImagesInDB.GetDlgItem(IDC_LIST1);
    VERIFY(pList);

    pList->SetExtendedStyle(LVS_EX_FLATSB | LVS_EX_FULLROWSELECT |LVS_EX_GRIDLINES);
    pList->InsertColumn(0,"Images in db",LVCFMT_LEFT,200);
    int         nIndex = 0;
    CdbImages   dbImages(&theApp.m_DB);
    dbImages.Open();
    while   (!dbImages.IsEOF())
    {
        pList->InsertItem(nIndex++,dbImages.m_BLOBName);
        dbImages.MoveNext();
    }

    dbImages.Close();
	return 0;
}

void CMainFrame::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	CListCtrl*  pList = (CListCtrl*)m_wndImagesInDB.GetDlgItem(IDC_LIST1);
    VERIFY(pList);

    int nIndex = pList->GetNextItem(-1,LVNI_SELECTED);
    if  (nIndex < 0)return;

    CdbImages   dbImages(&theApp.m_DB);
    CString     strFileName = pList->GetItemText(nIndex,0);
    dbImages.m_strFilter.Format("BLOBName = '%s'",strFileName);
    try
    {
        dbImages.Open();
        if  (dbImages.IsEOF())
            AfxMessageBox("Unable to get image from db");
        else
        {
            char    tmpPath[_MAX_PATH+1];
            GetTempPath(_MAX_PATH,tmpPath);

            strFileName.Insert(0,tmpPath);
            
            CFile	outFile(strFileName,CFile::modeCreate|CFile::modeWrite);
            LPSTR	buffer = (LPSTR)GlobalLock(dbImages.m_BLOBImage.m_hData);
            outFile.WriteHuge(buffer,dbImages.m_BLOBImage.m_dwDataLength);
            GlobalUnlock(dbImages.m_BLOBImage.m_hData);
            outFile.Close();

            theApp.OpenDocumentFile(strFileName);
        }

        dbImages.Close();
 
    }
    catch(CException* pE)
    {
        pE->ReportError();
        pE->Delete();
        return;
    }

	*pResult = 0;
}

void CMainFrame::OnFileStoretodatabase() 
{
static char BASED_CODE szFilter[] = "Bitmap Files (*.bmp)|*.bmp||";
 
    CdbImages       dbImages(&theApp.m_DB);
	CFileDialog     fd(TRUE,NULL,NULL,0,szFilter,this);
	CListCtrl*      pList = (CListCtrl*)m_wndImagesInDB.GetDlgItem(IDC_LIST1);

    VERIFY(pList);

    if  (IDOK != fd.DoModal())
        return;

    try
    {
        dbImages.Open();
        dbImages.AddNew();

        CFile		fileImage;
        CFileStatus	fileStatus;

        fileImage.Open(fd.GetPathName(), CFile::modeRead);
        fileImage.GetStatus(fileStatus);

        dbImages.m_BLOBName = fileImage.GetFileTitle();
        dbImages.m_BLOBImage.m_dwDataLength = fileStatus.m_size;

        HGLOBAL hGlobal		= GlobalAlloc(GPTR,fileStatus.m_size);
        dbImages.m_BLOBImage.m_hData = GlobalLock(hGlobal);

        fileImage.ReadHuge(dbImages.m_BLOBImage.m_hData,fileStatus.m_size);

        dbImages.SetFieldDirty(&dbImages.m_BLOBImage);
        dbImages.SetFieldNull(&dbImages.m_BLOBImage,FALSE);
        dbImages.Update();

        GlobalUnlock(hGlobal);

        dbImages.Close();

        pList->InsertItem(0,fileImage.GetFileTitle());
    }
    catch(CException* pE)
    {
        pE->ReportError();
        pE->Delete();
        return;
    }

	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -