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

📄 gearview.cpp

📁 应用visual c++ 6.0的UG二次开发外部模式演示程序。VC创建MFC菜单项目
💻 CPP
字号:
// gearView.cpp : implementation of the CGearView class
//

#include "stdafx.h"
#include "gear.h"

#include "gearDoc.h"
#include "gearView.h"
#include "InsertDialog.h"
#include "DataAsk.h"

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

/////////////////////////////////////////////////////////////////////////////
// CGearView

IMPLEMENT_DYNCREATE(CGearView, CListView)

BEGIN_MESSAGE_MAP(CGearView, CListView)
	//{{AFX_MSG_MAP(CGearView)
	ON_COMMAND(ID_SHOW, OnShow)
	ON_COMMAND(ID_DEL, OnDel)
	ON_COMMAND(ID_ADD, OnAdd)
	ON_COMMAND(ID_EDIT, OnEdit)
	ON_WM_DESTROY()
	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
	ON_COMMAND(ID_ASK, OnAsk)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGearView construction/destruction

CGearView::CGearView()
{
	// TODO: add construction code here

}

CGearView::~CGearView()
{
}

BOOL CGearView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
    cs.style|=LVS_REPORT;
	return CListView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CGearView drawing

void CGearView::OnDraw(CDC* pDC)
{
	CGearDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

void CGearView::OnInitialUpdate()
{
	CListView::OnInitialUpdate();
	try{	
	m_pdatabase=new CDatabase;
    m_pdatabase->Open(_T("gear"),FALSE,FALSE,_T("ODBC;DSN=gear"),FALSE);
	m_pset=new CRecordset();
	m_pset->m_pDatabase=m_pdatabase;
	}
	catch(CDBException* e){
		e->ReportError();
		delete m_pdatabase;
		delete m_pset;
		m_pdatabase=NULL;
		m_pset=NULL;
        e->Delete();
		return;
	}


	// TODO: You may populate your ListView with items by directly accessing
	//  its list control through a call to GetListCtrl().
}

/////////////////////////////////////////////////////////////////////////////
// CGearView printing

BOOL CGearView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CGearView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CGearView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CGearView diagnostics

#ifdef _DEBUG
void CGearView::AssertValid() const
{
	CListView::AssertValid();
}

void CGearView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}

CGearDoc* CGearView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGearDoc)));
	return (CGearDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CGearView message handlers
BOOL CGearView::ShowInformation(CString strSQL)
{
  	CListCtrl& ctrlList=(CListCtrl&)GetListCtrl();
	if(!m_pdatabase->IsOpen()) return FALSE;
	if(!m_pset) return FALSE;
	try{
		BeginWaitCursor();
		if(m_pset->IsOpen()) m_pset->Close();//如果打开一条记录,这关闭
		m_pset->Open(CRecordset::dynaset,strSQL);//按照strSQL重新打开一条记录,数据源和用户操作同步,
		if(!m_pset->IsEOF())
		{m_pset->MoveLast();
		m_pset->MoveFirst();}//移动到第一条记录
		int nFieldCount=m_pset->GetODBCFieldCount();//记下记录的数目
		CODBCFieldInfo fieldinfo;
		for(int n=0;n<nFieldCount;n++){
			m_pset->GetODBCFieldInfo(n,fieldinfo);
			int nWidth=ctrlList.GetStringWidth(fieldinfo.m_strName)+70;
			ctrlList.InsertColumn(n,fieldinfo.m_strName,LVCFMT_CENTER,nWidth);
		}
		CString strValue;
		m_pset->MoveFirst();
		int nCount=0;
		while(!m_pset->IsEOF()){
			ctrlList.InsertItem(nCount,strValue);
			for(int j=0;j<nFieldCount;j++){
				m_pset->GetFieldValue(j,strValue);
				ctrlList.SetItemText(nCount,j,strValue);
			}
			m_pset->MoveNext();
			nCount++;
		}
		EndWaitCursor();
	}
	catch(CDBException *e){
		e->ReportError();
		e->Delete();
        EndWaitCursor();
		return FALSE;
	}
	return TRUE;
}

void CGearView::OnShow() 
{
	// TODO: Add your command handler code here
	CListCtrl& ctrlList=(CListCtrl&)GetListCtrl();
	ctrlList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
	ctrlList.DeleteAllItems();
	while(ctrlList.DeleteColumn(0));
	UpdateWindow();

	CString strSQL;
	strSQL=_T("select * from gear;");
	ShowInformation(strSQL);
}

void CGearView::OnDel() 
{
	// TODO: Add your command handler code here
	CListCtrl& ctrlList=(CListCtrl&)GetListCtrl();
	UINT i,uSelectedCount=ctrlList.GetSelectedCount();
	if(uSelectedCount==0) {MessageBox("要选择一条记录!","提示",MB_ICONWARNING+MB_OK);return;}
	if(MessageBox("是否真的要删除这条记录!","提示",MB_ICONQUESTION+MB_OKCANCEL)!=IDOK)
	return;
	if(!m_pdatabase->IsOpen()) {MessageBox("数据获取失败!","提示",MB_ICONWARNING+MB_OK);return;}
	if(!m_pset) {MessageBox("数据获取失败!","提示",MB_ICONWARNING+MB_OK);return;}
	if(m_pset->IsOpen()) m_pset->Close();
	int nItemSel=0;
	if(uSelectedCount>0)
	{
		for(i=0;i<uSelectedCount;i++)
		{
			nItemSel=ctrlList.GetNextItem(nItemSel-1,LVNI_SELECTED);
			CString str("");
			str=ctrlList.GetItemText(nItemSel,0);
			CString strSQL;
			strSQL="delete from gear where 齿轮号='"+str+"'";
			try
			{
				m_pdatabase->ExecuteSQL(strSQL);
			}
			catch(CDBException* e)
			{
				e->ReportError();
				e->Delete();
				return;
			}
			ctrlList.DeleteItem(nItemSel);
			UpdateWindow();
		}
	}
}

void CGearView::OnAdd() 
{
	// TODO: Add your command handler code here
	if(!m_pdatabase->IsOpen()) {MessageBox("数据获取失败!","提示",MB_ICONWARNING+MB_OK);return;}
	CInsertDialog AddDlg;
    AddDlg.mark=0;
	if(AddDlg.DoModal()==IDOK)
	{
		CString strnum=AddDlg.num; 
		float m=AddDlg.m;
		int z=AddDlg.z;
		float a=AddDlg.a;
		float b=AddDlg.b;
		float w=AddDlg.w;

		if(strnum=="") {MessageBox("齿轮号不能为空!","提示",MB_ICONWARNING+MB_OK);AddDlg.m_num.SetFocus();return;}
        CString strsql;
		strsql.Format("insert into gear(齿轮号,模数,齿数,压力角,螺旋角,齿宽) values('%s',%f,%d,%f,%f,%f)",strnum,m,z,a,b,w);
		try
		{
			if(m_pdatabase->CanUpdate())
                m_pdatabase->ExecuteSQL(strsql);
		}
		catch(CDBException* e)
		{
			e->ReportError();
			e->Delete();
			return;
		}
	OnShow();
	}
}

void CGearView::OnEdit() 
{
	// TODO: Add your command handler code here
	CListCtrl& ctrlList=(CListCtrl&)GetListCtrl();
	if(!m_pdatabase->IsOpen()) {MessageBox("数据获取失败!","提示",MB_ICONWARNING+MB_OK);return;}
	if(!m_pset) {MessageBox("数据获取失败!","提示",MB_ICONWARNING+MB_OK);return;}
	UINT i,uSelectedCount=ctrlList.GetSelectedCount();
	if(uSelectedCount>1||uSelectedCount==0)
	{
	  if(uSelectedCount==0)
	  {
		  MessageBox("要选择一条记录!","提示",MB_ICONWARNING+MB_OK);
		  //AfxMessageBox("要选择一条记录!");
		  return;
	  }
      if(uSelectedCount>1)
	  {   
		  MessageBox("只能选择一条记录!","提示",MB_ICONWARNING+MB_OK);
		  //AfxMessageBox("只能选择一条记录!");
		  return;
	  }
	}
	else
	{
		int nItemSel=0;
        nItemSel=ctrlList.GetNextItem(nItemSel-1,LVNI_SELECTED);
        CString strID,strSQL;
		strID=ctrlList.GetItemText(nItemSel,0);
	    strSQL="select * from gear where 齿轮号='"+strID+"'";
		
			try
			{ 
				m_pset1.m_pDatabase=m_pdatabase;
				if(m_pset1.IsOpen()) m_pset1.Close();
	        	m_pset1.Open(CRecordset::dynaset,strSQL);
			}
			catch(CDBException* e)
			{
				e->ReportError();
				e->Delete();
                MessageBox("数据获取失败!","提示",MB_ICONWARNING+MB_OK);
				return;
			}
	}
	
	   CInsertDialog DialogEdit;
	   i=0;
	   DialogEdit.mark=1;
	   for(i=0;i<6;i++)
	    m_pset1.GetFieldValue(i,DialogEdit.str[i]);
        
	   if(DialogEdit.DoModal()==IDOK)
	   {
		CString strnum=DialogEdit.num; 
		float m=DialogEdit.m;
		int z=DialogEdit.z;
		float a=DialogEdit.a;
		float b=DialogEdit.b;
		float w=DialogEdit.w;
		
        CString strsql;
		strsql.Format("update gear set 齿轮号='%s',模数=%f,齿数=%d,压力角=%f,螺旋角=%f,齿宽=%f where 齿轮号='%s'",strnum,m,z,a,b,w,strnum);
		try
		{
			if(m_pdatabase->CanUpdate())
                m_pdatabase->ExecuteSQL(strsql);
		}
		catch(CDBException* e)
		{
			e->ReportError();
			e->Delete();
			return;
		}
	OnShow();
	}	
}

void CGearView::OnDestroy() 
{
	CListView::OnDestroy();
	
	// TODO: Add your message handler code here
	delete m_pset;
	delete m_pdatabase;
}

void CGearView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	OnEdit();
	*pResult = 0;
}

void CGearView::OnAsk() 
{
	// TODO: Add your command handler code here
	
	CString table_name="gear";
    CString strSQL;	
	CDataAsk DataAskDialog;
	strSQL="select * from "+table_name;
    try
	 {  
		if(m_pset->IsOpen()) m_pset->Close();
		m_pset->Open(CRecordset::dynaset,strSQL);
		if(!m_pset->IsEOF())
		{m_pset->MoveLast();
		m_pset->MoveFirst();}
		int nFieldCount=m_pset->GetODBCFieldCount();
		DataAskDialog.nF=nFieldCount;
		CODBCFieldInfo fieldinfo;
		for(int n=0;n<nFieldCount;n++){
		m_pset->GetODBCFieldInfo(n,fieldinfo);
		DataAskDialog.sF[n]=fieldinfo.m_strName;
		}
	 }
		catch(CDBException *e)
		{
	    e->ReportError();
		delete m_pdatabase;
		delete m_pset;
		m_pdatabase=NULL;
		m_pset=NULL;
        e->Delete();
		}
	
	int r=DataAskDialog.DoModal();
	if(r==0)
	{ 
		CListCtrl& ctrlList=(CListCtrl&)GetListCtrl();
	    ctrlList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
	    ctrlList.DeleteAllItems();
	    while(ctrlList.DeleteColumn(0));
	    UpdateWindow();
	    CString strSQL;
	    CString attri,rela,sV;
        attri=DataAskDialog.attri;
	    rela=DataAskDialog.rela;
		sV=DataAskDialog.sV;
		if(attri==""||rela==""||sV=="")
		{
			MessageBox("请输入完整的查询条件!","提示",MB_ICONWARNING+MB_OK);
			return;
		}

	    if(attri=="齿轮号")
	    strSQL="select * from "+table_name+" where "+attri+rela+"'"+sV+"'";
	    else
 	    strSQL="select * from "+table_name+" where "+attri+rela+sV;
		if(!ShowInformation(strSQL)) MessageBox("对不起,没有您所需要的数据!","提示",MB_ICONWARNING+MB_OK);
	}
	else if(r==1)
	{
		OnShow();
	}
}

⌨️ 快捷键说明

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