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

📄 page_gear.cpp

📁 C# 教学示例程序
💻 CPP
字号:
// Page_Gear.cpp : implementation file
//

#include "stdafx.h"
#include "gear_cutter_database.h"
#include "Page_Gear.h"

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

/////////////////////////////////////////////////////////////////////////////
// CPage_Gear property page

IMPLEMENT_DYNCREATE(CPage_Gear, CPropertyPage)

CPage_Gear::CPage_Gear() : CPropertyPage(CPage_Gear::IDD)
{
	//{{AFX_DATA_INIT(CPage_Gear)
	// NOTE: the ClassWizard will add member initialization here
	m_angle_gear_v = 0.0f;
	m_bottom_dia_v = 0.0f;
	m_helic_gear_v = 0.0f;
	m_margin_gear_v = 0.0f;
	m_mn_gear_v = 0.0f;
	m_nthick_gear_v = 0.0f;
	m_coefficient_gear_v = 0.0f;
	m_num_gear_v = _T("");
	m_thick_gear_v = 0.0f;
	m_top_dia_gear_v = 0.0f;
	m_zn_gear_v = 0;
	//}}AFX_DATA_INIT
}

CPage_Gear::~CPage_Gear()
{
}

void CPage_Gear::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPage_Gear)
	DDX_Control(pDX, IDC_LIST_gear, m_gear_list);
	DDX_Control(pDX, IDC_EDIT_zn_gear, m_zn_gear);
	DDX_Control(pDX, IDC_EDIT_top_dia_gear, m_top_dia_gear);
	DDX_Control(pDX, IDC_EDIT_thick_gear, m_thick_gear);
	DDX_Control(pDX, IDC_EDIT_num_gear, m_num_gear);
	DDX_Control(pDX, IDC_EDIT_coefficient_gear, m_coefficient_gear);
	DDX_Control(pDX, IDC_EDIT_nthick_gear, m_nthick_gear);
	DDX_Control(pDX, IDC_EDIT_mn_gear, m_mn_gear);
	DDX_Control(pDX, IDC_EDIT_margin_gear, m_margin_gear);
	DDX_Control(pDX, IDC_EDIT_helic_gear, m_helic_gear);
	DDX_Control(pDX, IDC_EDIT_bottom_dia_gear, m_bottom_dia);
	DDX_Control(pDX, IDC_EDIT_angle_gear, m_angle_gear);

	DDX_Text(pDX, IDC_EDIT_num_gear, m_num_gear_v);
	DDX_Text(pDX, IDC_EDIT_mn_gear, m_mn_gear_v);
    DDX_Text(pDX, IDC_EDIT_zn_gear, m_zn_gear_v);
   	DDX_Text(pDX, IDC_EDIT_angle_gear, m_angle_gear_v);
    DDX_Text(pDX, IDC_EDIT_helic_gear, m_helic_gear_v);
	DDX_Text(pDX, IDC_EDIT_nthick_gear, m_nthick_gear_v);
	DDX_Text(pDX, IDC_EDIT_top_dia_gear, m_top_dia_gear_v);
	DDX_Text(pDX, IDC_EDIT_bottom_dia_gear, m_bottom_dia_v);
	DDX_Text(pDX, IDC_EDIT_thick_gear, m_thick_gear_v);
	DDX_Text(pDX, IDC_EDIT_margin_gear, m_margin_gear_v);
	DDX_Text(pDX, IDC_EDIT_coefficient_gear, m_coefficient_gear_v);	
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CPage_Gear, CPropertyPage)
	//{{AFX_MSG_MAP(CPage_Gear)
	ON_BN_CLICKED(IDC_BTN_append, OnBTNappend)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_BTN_delete, OnBTNdelete)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPage_Gear message handlers

BOOL CPage_Gear::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	extern int symbol_gear;
	if(symbol_gear==1)
	{
    GetDlgItem(IDC_STATIC_1)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_BTN_append)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_BTN_delete)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_LIST_gear)->ShowWindow(SW_HIDE);
	}
	else
	{
	GetDlgItem(IDC_STATIC_1)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_BTN_append)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_BTN_delete)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_LIST_gear)->ShowWindow(SW_SHOW);
	}
    try{	
	m_pdatabase=new CDatabase();
	m_pset=new CRecordset();
    m_pdatabase->Open(_T("gear_cutter_database"),FALSE,FALSE,_T("ODBC;DSN=gear_cutter_database"),FALSE);
	m_pset->m_pDatabase=m_pdatabase;	
	}
	catch(CDBException* e){
		e->ReportError();
	    e->Delete();
	    delete m_pset;
		delete m_pdatabase;
		return TRUE;}

	extern int symbol_gear;
	if(symbol_gear==0) 
	{   
		m_num_gear.EnableWindow(TRUE);
		ClearAll();
		clear_list();
		nCount=0;
		CString str;
	    CString column[]={"齿轮零件号","齿轮模数","齿轮齿数","齿轮压力角","齿轮螺旋角","齿轮分度圆法向齿厚","齿顶圆直径","齿根圆直径","齿轮厚度","齿厚留剃余量","滚刀齿根与齿轮齿顶的径向间隙系数"};
        int nWidth;
	    for(int i=0;i<11;i++)
		{
        nWidth=column[i].GetLength()+100;
        m_gear_list.InsertColumn(i,column[i],LVCFMT_RIGHT,nWidth);
		}
	}
	else
	{
        m_num_gear.EnableWindow(FALSE);
		IniData();
	}
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CPage_Gear::ClearAll()
{
    this->m_num_gear.SetWindowText("");
	this->m_mn_gear.SetWindowText("");
	this->m_zn_gear.SetWindowText("");
	this->m_angle_gear.SetWindowText("");
	this->m_helic_gear.SetWindowText("");
	this->m_nthick_gear.SetWindowText("");
	this->m_top_dia_gear.SetWindowText("");
	this->m_bottom_dia.SetWindowText("");
	this->m_thick_gear.SetWindowText("");
	this->m_margin_gear.SetWindowText("");
	this->m_coefficient_gear.SetWindowText("");
}

void CPage_Gear::IniData()
{
    extern CRecordset m_pset_gear1;
    CString str[11];
	for(int i=0;i<11;i++)
      m_pset_gear1.GetFieldValue(i,str[i]);
    this->m_num_gear.SetWindowText(str[0]);
	this->m_mn_gear.SetWindowText(str[1]);
	this->m_zn_gear.SetWindowText(str[2]);
	this->m_angle_gear.SetWindowText(str[3]);
	this->m_helic_gear.SetWindowText(str[4]);
	this->m_nthick_gear.SetWindowText(str[5]);
	this->m_top_dia_gear.SetWindowText(str[6]);
	this->m_bottom_dia.SetWindowText(str[7]);
	this->m_thick_gear.SetWindowText(str[8]);
	this->m_margin_gear.SetWindowText(str[9]);
	this->m_coefficient_gear.SetWindowText(str[10]);
}

void CPage_Gear::OnOK()
{
	// TODO: Add your specialized code here and/or call the base class
	extern int symb;
	extern int symbol_gear;
	if(symbol_gear==1)
	{
	symb=1;
	if(MessageBox("修改齿轮参数将导致与之对应的刀具参数被删除,是否继续?","提示",MB_ICONQUESTION+MB_OKCANCEL)==IDCANCEL)
	    symb=0;	
	}
	else
	{
	
	}
	CPropertyPage::OnOK();
}

void CPage_Gear::checkdata()
{
  gear_check_symbol=0;
  int i;
  CString str[11];
 
    this->m_num_gear.GetWindowText(str[0]);
	this->m_mn_gear.GetWindowText(str[1]);
	this->m_zn_gear.GetWindowText(str[2]);
	this->m_angle_gear.GetWindowText(str[3]);
	this->m_helic_gear.GetWindowText(str[4]);
	this->m_nthick_gear.GetWindowText(str[5]);
	this->m_top_dia_gear.GetWindowText(str[6]);
	this->m_bottom_dia.GetWindowText(str[7]);
	this->m_thick_gear.GetWindowText(str[8]);
	this->m_margin_gear.GetWindowText(str[9]);
	this->m_coefficient_gear.GetWindowText(str[10]);
  
  for(i=0;i<11;i++)
  {
  if(str[i]=="") 
  {
  gear_check_symbol=1;
  switch(i)
  {
  case 0:
      strName="齿轮零件号";m_num_gear.SetFocus();return;
  case 1:
	  strName="齿轮模数";m_mn_gear.SetFocus();return;
  case 2:
	  strName="齿轮齿数";m_zn_gear.SetFocus();return;
  case 3:
	  strName="齿轮压力角";m_angle_gear.SetFocus();return;
  case 4:
	  strName="齿轮螺旋角";m_helic_gear.SetFocus();return;
  case 5:
	  strName="齿轮分度圆法向齿厚";m_nthick_gear.SetFocus();return;
  case 6:
	  strName="齿顶圆直径";m_top_dia_gear.SetFocus();return;
  case 7:
	  strName="齿根圆直径 ";m_bottom_dia.SetFocus();return;
  case 8:
	  strName="齿轮厚度";m_thick_gear.SetFocus();return;
  case 9:
	  strName="齿厚留剃余量";m_margin_gear.SetFocus();return;
  case 10:
	  strName="滚刀齿根与齿轮齿顶的径向间隙系数";m_coefficient_gear.SetFocus();return;
  }
  }
  }
}

void CPage_Gear::OnBTNappend() 
{
	// TODO: Add your control notification handler code here
	CString strValue[11];
	checkdata();
	if(gear_check_symbol==1) {MessageBox(strName+"不能为空!","警告",MB_ICONWARNING+MB_OK);return;}
	this->UpdateData();
	strValue[0].Format("%s",m_num_gear_v);
    strValue[1].Format("%f",m_mn_gear_v);
	strValue[2].Format("%d",m_zn_gear_v);
    strValue[3].Format("%f",m_angle_gear_v);
	strValue[4].Format("%f",m_helic_gear_v);
	strValue[5].Format("%f",m_nthick_gear_v);
	strValue[6].Format("%f",m_top_dia_gear_v);
	strValue[7].Format("%f",m_bottom_dia_v);
	strValue[8].Format("%f",m_thick_gear_v);
	strValue[9].Format("%f",m_margin_gear_v);
	strValue[10].Format("%f",m_coefficient_gear_v);
    if(strValue[0]=="") {return;}
	int j=1;
	m_gear_list.InsertItem(nCount,strValue[0]);
	while(j<11)
	{
	m_gear_list.SetItemText(nCount,j,strValue[j]);
	j++;
	}
	nCount++;
	ClearAll();
}

void CPage_Gear::clear_list()
{
    //m_list_control.SetExtendedStyle(LVS_EX_GRIDLINES);
	m_gear_list.DeleteAllItems();
	while(m_gear_list.DeleteColumn(0));
    UpdateWindow();
}

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

void CPage_Gear::OnCancel() 
{
	// TODO: Add your specialized code here and/or call the base class
	extern int symbol_gear;
	if(symbol_gear==0)
	{
	int count;
	count=m_gear_list.GetItemCount();

	if(count==0)
	{
     return;
	}
    
    m_pdatabase->BeginTrans();
	try
	{
    for(int j=0;j<count;j++)
    {
	CString str[20];
	for(int i=0;i<11;i++)
	{
	str[i]=m_gear_list.GetItemText(j,i);
	}
    float strValue[10];
    CString num=str[0];
    
	for(int m=0;m<10;m++)
	{
    strValue[m]=atof(str[m+1].GetBuffer(0));
	}
    CString strsql;
	strsql.Format("insert into gear_table(齿轮零件号,齿轮模数,齿轮齿数,齿轮压力角,齿轮螺旋角,齿轮分度圆法向齿厚,齿顶圆直径,齿根圆直径,齿轮厚度,齿厚留剃余量,滚刀齿根与齿轮齿顶的径向间隙系数) values('%s',%f,%d,%f,%f,%f,%f,%f,%f,%f,%f)",num,strValue[0],(int)strValue[1],strValue[2],strValue[3],strValue[4],strValue[5],strValue[6],strValue[7],strValue[8],strValue[9]);	
		if(m_pdatabase->CanUpdate())
               m_pdatabase->ExecuteSQL(strsql);
	}
	m_pdatabase->CommitTrans();
	MessageBox("操作成功!","提示",MB_ICONINFORMATION+MB_OK);
	}
	catch(CDBException* e)
	{		
		e->Delete();
	    m_pdatabase->Rollback();
		MessageBox("操作失败,可能齿轮零件号重复!","警告",MB_ICONERROR+MB_OK);
		return;
	}
	}	
	CPropertyPage::OnCancel();
}

void CPage_Gear::OnBTNdelete() 
{
	// TODO: Add your control notification handler code here
	if(m_gear_list.GetSelectedCount()==0)
	{
	MessageBox("请先选择齿轮参数!","提示",MB_ICONWARNING+MB_OK);
	return;
	}
    if(MessageBox("是否真的要删除这条齿轮参数!","提示",MB_ICONQUESTION+MB_OKCANCEL)!=IDOK)
	return;
	UINT i,uSelectedCount=m_gear_list.GetSelectedCount();
	int nItemSel=0;
	if(uSelectedCount>0)
	{
		for(i=0;i<uSelectedCount;i++)
		{
			nItemSel=m_gear_list.GetNextItem(nItemSel-1,LVNI_SELECTED);
			m_gear_list.DeleteItem(nItemSel);
			nCount--;
			UpdateWindow();
		}
	}	
}

⌨️ 快捷键说明

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