📄 lxyview.cpp
字号:
// LXYView.cpp : implementation of the CLXYView class
//
#include "stdafx.h"
#include "LXY.h"
#include "AADDLG.h"
#include "FINDDLG.h"
#include "LXYDoc.h"
#include "SCDLG.h"
#include "USERDLG.h"
#include "LXYView.h"
#include "odbcinst.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CString users,powers,pass;
/////////////////////////////////////////////////////////////////////////////
// CLXYView
IMPLEMENT_DYNCREATE(CLXYView, CFormView)
BEGIN_MESSAGE_MAP(CLXYView, CFormView)
//{{AFX_MSG_MAP(CLXYView)
ON_BN_CLICKED(IDC_add, Onadd)
ON_BN_CLICKED(IDC_del, Ondel)
ON_BN_CLICKED(IDC_next, Onnext)
ON_BN_CLICKED(IDC_pre, Onpre)
ON_BN_CLICKED(IDC_find, Onfind)
ON_BN_CLICKED(IDC_sort, Onsort)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_BN_CLICKED(IDC_guanli, Onguanli)
ON_BN_CLICKED(IDC_loadout, Onloadout)
ON_BN_CLICKED(IDC_GOGOUT, OnGogout)
ON_BN_CLICKED(IDC_BUTTON2, Onpicture)
ON_WM_PAINT()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLXYView construction/destruction
CLXYView::CLXYView()
: CFormView(CLXYView::IDD)
{
//{{AFX_DATA_INIT(CLXYView)
m_sno = _T("");
m_sname = _T("");
m_sage = 0;
m_ssex = _T("");
m_semail = _T("");
m_sdept = _T("");
m_text = _T("");
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CLXYView::~CLXYView()
{
}
void CLXYView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLXYView)
DDX_Control(pDX, IDC_next, m_next);
DDX_Control(pDX, IDC_pre, m_prev);
DDX_Control(pDX, IDC_RADIO1, m_radio);
DDX_Control(pDX, IDC_CHECK1, m_check);
DDX_Text(pDX, IDC_EDIT1, m_sno);
DDX_Text(pDX, IDC_EDIT2, m_sname);
DDX_Text(pDX, IDC_EDIT3, m_sage);
DDX_Text(pDX, IDC_EDIT04, m_ssex);
DDX_Text(pDX, IDC_EDIT05, m_semail);
DDX_Text(pDX, IDC_EDIT06, m_sdept);
DDX_Text(pDX, IDC_SHOWTEXT, m_text);
//}}AFX_DATA_MAP
}
BOOL CLXYView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
void CLXYView::OnInitialUpdate()
{CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
m_ctp.CreateInstance(_uuidof(Connection));
try
{
m_ctp->Open("Driver=SQL Server;Server=127.0.0.1;Database=xxx;UID=sa;PWD=;","","",adModeUnknown);
}
catch(...)
{
MessageBox("连接失败!");
}
//////////////////////////////////////////////////////添加图片与按钮相关联,实现数据浏览
CBitmap bitmap1,bitmap2;
bitmap1.LoadBitmap(IDB_BITMAP1);
bitmap2.LoadBitmap(IDB_BITMAP2);
HBITMAP hbitmap1=(HBITMAP)bitmap1.Detach();
HBITMAP hbitmap2=(HBITMAP)bitmap2.Detach();
m_prev.SetBitmap(hbitmap1);
m_next.SetBitmap(hbitmap2);
///////////////
pdb=new CDatabase;
m_pSet=new StudentSet(pdb);
m_pSet1=new SCSet(pdb);
m_pSet->Open();
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
m_radio.SetCheck(1);
if(powers=="录入员")
{ GetDlgItem(IDC_add)->EnableWindow(false);
GetDlgItem(IDC_del)->EnableWindow(false);
GetDlgItem(IDC_BUTTON2)->EnableWindow(false);
}
Show();EjzPic();
}
/////////////////////////////////////////////////////////////////////////////
// CLXYView printing
BOOL CLXYView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CLXYView::Show()
{
m_sno=m_pSet->m_sno;
m_sname=m_pSet->m_sname;
m_sage=m_pSet->m_sage;
m_ssex=m_pSet->m_ssex;
m_semail=m_pSet->m_semail;
m_sdept=m_pSet->m_sdept;
UpdateData(false);
}
void CLXYView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CLXYView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
void CLXYView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
// TODO: add customized printing code here
}
/////////////////////////////////////////////////////////////////////////////
// CLXYView diagnostics
#ifdef _DEBUG
void CLXYView::AssertValid() const
{
CFormView::AssertValid();
}
void CLXYView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CLXYDoc* CLXYView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLXYDoc)));
return (CLXYDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CLXYView message handlers
void CLXYView::Onadd()
{
AADDLG mydlg;
if(mydlg.DoModal()==IDOK)
{
try
{
sqlstr.Format("insert into student values ('%s','%s',%d,'%s','%s','%s','')",
mydlg.m_sno,mydlg.m_sname,mydlg.m_sage,mydlg.m_ssex,mydlg.m_semail,mydlg.m_sdept);
pdb->ExecuteSQL(sqlstr);
m_pSet->Requery();
m_pSet->MoveLast();
Show();
}
catch(...)
{
AfxMessageBox("添加失败!");
}
AfxMessageBox("添加信息完成,请添加图片!");
Onpicture();
}
}
void CLXYView::Ondel()
{if(AfxMessageBox("是否删除?",MB_YESNO) == IDYES)
{
sqlstr.Format("delete from student where sno='%s'",m_sno);
pdb->ExecuteSQL(sqlstr);
m_pSet->Requery();
Show();
AfxMessageBox("删除成功!");
}
}
void CLXYView::Onnext()
{GetDlgItem(IDC_pre)->EnableWindow(TRUE);
if(!m_pSet->IsEOF())
m_pSet->MoveNext();
else
GetDlgItem(IDC_next)->EnableWindow(FALSE);
Show();
EjzPic();
Invalidate();
}
void CLXYView::Onpre()
{GetDlgItem(IDC_next)->EnableWindow(TRUE);
if(!m_pSet->IsBOF())
m_pSet->MovePrev();
else
GetDlgItem(IDC_pre)->EnableWindow(FALSE);
Show();
EjzPic();Invalidate();
}
void CLXYView::Onfind()
{
FINDDLG mydlg;
mydlg.DoModal();
}
void CLXYView::Onsort()
{
FINDDLG mydlg;
mydlg.sortflag=true;
mydlg.DoModal();// TODO: Add your control notification handler code here
}
void CLXYView::OnButton3()
{SCDLG mydlg;
if(m_check.GetCheck())
mydlg.showflag=true;
mydlg.sno=m_sno;
mydlg.DoModal();
}
void CLXYView::Onguanli()
{USERDLG mydlg;
mydlg.DoModal();
}
void CLXYView::Onloadout()
{
CString filename,str;
CFileDialog filedlg(!m_radio.GetCheck(),"",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"*.*");
if(filedlg.DoModal()==IDOK)
{ filename=filedlg.GetPathName();
if(filename!="")
{
if(m_radio.GetCheck())
{ DeleteFile(filename);
str.Format("backup database XXX to Disk ='%s'",filename);
pdb->ExecuteSQL(str);
AfxMessageBox("数据备份成功!"+filename);
}
else
{
str.Format("restore database XXX from Disk ='%s'",filename);
pdb->ExecuteSQL(str);
AfxMessageBox("数据还原成功!");
}
}
}
}
void CLXYView::OnGogout()
{
CString filename;
CFileDialog filedlg(false,".txt",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt");
CFile infile;CString str;
if(filedlg.DoModal()==IDOK)
{
filename=filedlg.GetPathName();
if(filename!="")
{infile.Open(filename,CFile::modeCreate|CFile::modeWrite);
{
str="学号 课程号 成绩\r\n";
m_pSet1->Open();
while(!m_pSet1->IsEOF())
{str+=m_pSet1->m_sno+" ";
str+=m_pSet1->m_cno+" ";
CString str1;
str1.Format("%.2f",m_pSet1->m_grade);
str+=str1+"\r\n";
m_pSet1->MoveNext();
}
m_pSet1->Close();
infile.Write(str,str.GetLength());
}
}
}
}
void CLXYView::Onpicture()
{
_RecordsetPtr record1;
record1.CreateInstance(_uuidof(Recordset));
CString filepath;
CFile file;
char *m_buffer;
CFileDialog myfiledlg(TRUE,"BMP",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"*.bmp|*.bmp|");
if(myfiledlg.DoModal()==IDOK)
{
filepath=myfiledlg.GetPathName();
}
else return;
if(!file.Open(filepath,CFile::modeRead))
{
MessageBox("无法打开BMP文件");
return ;
}
DWORD m_filelen;
m_filelen=file.GetLength();
m_buffer=new char[m_filelen+1];
if(!m_buffer)
{
MessageBox("无法分配足够的空间!");
return ;
}
if(file.ReadHuge(m_buffer,m_filelen)!=m_filelen)
{
MessageBox("读取BMP文件错误!");
return ;
}
LPSTR hdib;
LPVOID lpdibbit;
BITMAPFILEHEADER bmpheader;
DWORD bmpheadlen;
bmpheadlen=sizeof(bmpheader);
strncpy((LPSTR)&bmpheader,(LPSTR)m_buffer,bmpheadlen);
if(bmpheader.bfType!=(*(DWORD*)"BM"))
{
MessageBox("BMP文件格式不对!");
return ;
}
hdib=m_buffer+bmpheadlen;
BITMAPINFOHEADER &bmiheader=*(LPBITMAPINFOHEADER)hdib;
BITMAPINFO &bminfo=*(LPBITMAPINFO)hdib;
lpdibbit=(m_buffer)+((BITMAPFILEHEADER *)m_buffer)->bfOffBits;
CClientDC dc(this);
m_bitmap=CreateDIBitmap(dc.m_hDC,&bmiheader,CBM_INIT,lpdibbit,&bminfo,DIB_RGB_COLORS);
ShowPic();
strform="select * from student where sno="+m_sno;
try{
record1->Open(strform,m_ctp.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(...)
{
MessageBox("数据库打开失败!");
}
VARIANT varblob;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound=0;
rgsabound[0].cElements=m_filelen;
psa=SafeArrayCreate(VT_UI1,1,rgsabound);
for(long i=0;i<(long)m_filelen;i++)
SafeArrayPutElement(psa,&i,m_buffer++);
varblob.vt= VT_ARRAY | VT_UI1;
varblob.parray=psa;
record1->GetFields()->GetItem("sphoto")->AppendChunk(varblob);
record1->Update();
record1->Close();
}
/////////////////在屏幕上显示图像///////////////////
void CLXYView::ShowPic()
{
CStatic *pStaic;
pStaic=(CStatic*)GetDlgItem(IDC_picture);
if(m_bitmap)
pStaic->SetBitmap(m_bitmap);
else
{
CBitmap bitmap4;
bitmap4.LoadBitmap(IDB_BITMAP4);
HBITMAP hbitmap4=(HBITMAP)bitmap4.Detach();
pStaic->SetBitmap(hbitmap4);
}
}
////////////////////////////////////////////////////////////////////////////将图片转化成二进制放入数据库中
void CLXYView::EjzPic()
{
_RecordsetPtr record;
record.CreateInstance(_uuidof(Recordset));
if(m_bitmap)
{
DeleteObject(m_bitmap);
m_bitmap=NULL;
}
strform="select * from student where sno='"+m_sno+"'";
try
{
record->Open(strform,m_ctp.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(...)
{
MessageBox("数据库打开失败!");
}
long ldatasize=record->GetFields()->GetItem("sphoto")->ActualSize;
char *m_buffer1;
if(ldatasize>0)
{
_variant_t varbolb;
varbolb=record->GetFields()->GetItem("sphoto")->GetChunk(ldatasize);
if(varbolb.vt==(VT_ARRAY | VT_UI1))
{
if(m_buffer1=new char[ldatasize+1])
{
char *m_buffer2=NULL;
SafeArrayAccessData(varbolb.parray,(void **)&m_buffer2);
memcpy(m_buffer1,m_buffer2,ldatasize);
SafeArrayUnaccessData(varbolb.parray);
LPSTR Hdib;
LPVOID lpdibbit;
BITMAPFILEHEADER bmpheader;
DWORD bmpheaderlen;
bmpheaderlen=sizeof(bmpheader);
strncpy((LPSTR)&bmpheader,(LPSTR)m_buffer1,bmpheaderlen);
if(bmpheader.bfType!=(*(WORD*)"BM"))
{
MessageBox("BMP文件格式不准确!");
return ;
}
Hdib=m_buffer1+bmpheaderlen;
BITMAPINFOHEADER &bmiheader=*(LPBITMAPINFOHEADER)Hdib;
BITMAPINFO &bminfo=*(LPBITMAPINFO)Hdib;
lpdibbit=(m_buffer1)+((BITMAPFILEHEADER *)m_buffer1)->bfOffBits;
CClientDC dc(this);
m_bitmap=CreateDIBitmap(dc.m_hDC,&bmiheader,CBM_INIT,lpdibbit,&bminfo,DIB_RGB_COLORS);
record->Close();
}
}
}
else
{
//delete m_buffer1;
//m_buffer1= NULL;
}
ShowPic();
}
void CLXYView::OnPaint()
{
//CPaintDC dc(this); // device context for painting
CPaintDC dc(this); // device context for painting
HBITMAP bitmap;
bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle (),"2.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
ASSERT(bitmap);
HBITMAP OldBitmap;
CDC MemDC;
MemDC.CreateCompatibleDC(&dc);
OldBitmap=(HBITMAP)MemDC.SelectObject(bitmap);
///显示它
CRect rect;
GetClientRect(&rect);
dc.BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(OldBitmap);
// Do not call CFormView::OnPaint() for painting messages
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -