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

📄 cinsertdlg.cpp

📁 这是书上的代码
💻 CPP
字号:
// CInsertDlg.cpp : implementation file
//

#include "stdafx.h"
#include "OCIExample.h"
#include "CInsertDlg.h"
#include "GridCtrl.h"
//#include "ResizingDialog.h"

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

/////////////////////////////////////////////////////////////////////////////
// CCInsertDlg dialog


CCInsertDlg::CCInsertDlg(CWnd* pParent /*=NULL*/)
	: CResizingDialog(CCInsertDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCInsertDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	//
	  //m_GridCtrl=new CGridCtrl;
	m_GridCtrl==NULL;
	IsSize=0;
	//还是不能改变控件的大小,对话框倒可以改变大小了
	CDWordArray c_info;
	//IDC_LEFT_RESIZE,大小可以变化的对话框
	SetControlInfo(IDC_MYGRIDCTRL,ANCHORE_RIGHT | RESIZE_VER);
	//IDC_EDIT1,ANCHORE_RIGHT | RESIZE_VER
    SetControlInfo(IDC_EDIT1,RESIZE_HOR | RESIZE_VER);

}
//自己加入的InsertDlg对话框的析构函数
//在析构函数中释放在初始化函数中分配的指针
CCInsertDlg::~CCInsertDlg()
{
	//
	if(m_GridCtrl!=NULL)
		delete m_GridCtrl;

}


void CCInsertDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCInsertDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCInsertDlg, CDialog)
	//{{AFX_MSG_MAP(CCInsertDlg)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_BUT_SAVEDATE, OnButSavedate)
	ON_WM_KEYDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCInsertDlg message handlers

BOOL CCInsertDlg::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	//if(m_GridCtrl!=NULL)
		//delete m_GridCtrl;
	return CDialog::DestroyWindow();
}
//wm_getdlgcode 
//WM_GETDLGCODE
void CCInsertDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	//关闭插入对话框时,删除在主对话框中删除的InsertDlg
	//的对象指针,并把其置为空
	CDialog::OnClose();
    COCIExampleApp  *App=(COCIExampleApp  *)AfxGetApp();
	COCIExampleDlg *pMainDlg=(COCIExampleDlg *)App->m_pMainWnd;
	if((pMainDlg->InsertDlg)!=NULL)
	{
		delete pMainDlg->InsertDlg;
        pMainDlg->InsertDlg=NULL;
	}

}

BOOL CCInsertDlg::OnInitDialog() 
{

	//-------------------------------------------------
    m_GridCtrl=new CGridCtrl;
	/*/-----------------------

	CDialog::OnInitDialog();
	COCIExampleDlg *mainDlg=new COCIExampleDlg;
	// TODO: Add extra initialization here
	int ColumnNumbers=mainDlg->ColumnNumbers;

		CWnd *pViewBox_F;
	pViewBox_F= GetDlgItem(IDC_MYGRIDCTRL);
    CRect	rGridRect;			
	pViewBox_F->GetClientRect(&rGridRect);
	pViewBox_F->ClientToScreen(&rGridRect);
	pViewBox_F->ScreenToClient(&rGridRect);	
	//m_GridCtrl->	
    m_GridCtrl->Create(rGridRect, pViewBox_F, 100);
    //初始化GridCtrl
    //可以编辑项使能
	m_GridCtrl->SetEditable(TRUE);
	//可以拖动项使能
	m_GridCtrl->EnableDragAndDrop(TRUE);
	//
	int ColoumNum;
	if(ColumnNumbers==0)
	    ColoumNum = 10;//列数
	else
       ColoumNum=ColumnNumbers;

	int RowNumber = 10;//行数
	try 
	{
		m_GridCtrl->SetRowCount(RowNumber);
		m_GridCtrl->SetColumnCount(ColoumNum);
		m_GridCtrl->SetFixedRowCount(2);//两行灰色,一行为标题,另外一行为个数
		                                //为0时,没有灰色标题行
										//为1时,第一行成灰色标题;
										//为2时,从第一行开始生成两行灰色标题
		m_GridCtrl->SetFixedColumnCount(1);//为1时,生成左边灰色一行
		//
		GV_ITEM GV_Item,Item;
		GV_Item.mask = GVIF_TEXT|GVIF_FORMAT;
		GV_Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX;
	    //
       	Item.mask = GVIF_TEXT|GVIF_FORMAT;
		Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX;
		int i=0,j=0;
		//列的名称
        GV_Item.row=0;
        GV_Item.col=0;
		GV_Item.strText="ColName";		
        m_GridCtrl->SetItem(&GV_Item);
		//格式
		GV_Item.row=1;
		GV_Item.strText="ColFormat";
        m_GridCtrl->SetItem(&GV_Item);
		//ID
		for(i=2;i<=10;i++)
		{
			 GV_Item.row=i;
             GV_Item.col=0;
		     GV_Item.strText.Format("%d",i-1);
			 m_GridCtrl->SetItem(&GV_Item);
		}
		//写字段的名称到列表上
		for(i=0;i<ColumnNumbers;i++)
		{
			//SetColumnWidth(int nCol, int width),列的宽度
			GV_Item.row=0;
			GV_Item.col=i+1;//从第二列开始写标题,第一列作为ID好
            GV_Item.strText=ColName[i];
            m_GridCtrl->SetItem(&GV_Item);
		}
		//写输入数据的格式,一方面,可以在第二行中提示,
		//另一方面,可以在输入的时候限制
		CString strA="A",str9="9";
		CString ColFormat="";
		BOOL tempbool1=FALSE,tempbool2=FALSE;
		for(i=0;i<ColumnNumbers;i++)
		{
			//若字段类型为字符型,则以如“AAA”的
			//方式来描述表中字段可以接收的格式
            tempbool1=coltype[i]==SQLT_CHR||\
				      coltype[i]==SQLT_VCS||\
                      coltype[i]==SQLT_STR;
			  
			tempbool2=coltype[i]==SQLT_NUM||\
		              coltype[i]==SQLT_INT||\
                      coltype[i]==SQLT_FLT||\
                      coltype[i]==SQLT_LNG;
			if(tempbool1)
			{
               
				//for(j=0;j<collen[i];j++)
				   //strchar=strchar+strA;
			   //ColFormat=ColFormatstrA+;
               ColFormat.Format("%d*AOr%d*字",collen[i],collen[i]/2);
			}
			//若字段类型为数字型,则以如“99.9”的
			//方式来描述表中字段可以接收的格式
         	else if(tempbool2)
			{
		         for(j=0;j<iprecision[i]-iscale[i];j++)
				     ColFormat=ColFormat+str9;
				 if(iscale[i]!=0)
				 {
					 ColFormat+=".";
					 for(j=0;j<iscale[i];j++)
						  ColFormat+=str9;
				 }
			}
			//若为日期型,则
			else if(coltype[i]==SQLT_DAT)
			{
                ColFormat="OracleDate";
			}
			else
			{
                ColFormat="Others";
			}
			//
			GV_Item.row=1;
			GV_Item.col=i+1;//从第二列开始写
            GV_Item.strText=ColFormat;
            m_GridCtrl->SetItem(&GV_Item);
		    //清空
            ColFormat="";
	}



	
	}
	catch (CMemoryException* e)
	{
		e->ReportError();
		e->Delete();
		 ;
	}
	m_GridCtrl->Refresh();

	//-------------------------------------------------*/
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CCInsertDlg::OnButSavedate() 
{
	// TODO: Add your control notification handler code here
	//COCIExampleDlg *mainDlg=new COCIExampleDlg;
	//这样定义的话,会新生成一个主对话框的对象指针,再用这个
	//指针去调用对话框的成员时,原来的值将为空;因此用下面这种
	//方法,即首先获取一个App(CWinApp类型)的指针,而后用这个指针
	//去获取已经存在的主对话框的的对象指针。
    COCIExampleApp  *App=(COCIExampleApp  *)AfxGetApp();
	//COCIExampleDlg *MainDlg=(COCIExampleDlg *)App->
    COCIExampleDlg *pMainDlg=(COCIExampleDlg *)App->m_pMainWnd;
	int shi=pMainDlg->ColumnNumbers;
    //mainDlg->SaveInsertData();
	//获取所输入的准备添加的记录
	int i=0,j;
	GV_ITEM GV_Item[20*20];
	for(i=0;i<40;i++)
	{
		GV_Item[i].mask = GVIF_TEXT|GVIF_FORMAT|GVIF_STATE;
		GV_Item[i].nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX;
	}

	CString strColValues[20][20];
	CString strColVal_one[20*20];
    int ColumnNumbers;
	if(pMainDlg->ColumnNumbers==0)
        ColumnNumbers=2;
	else
        ColumnNumbers=pMainDlg->ColumnNumbers;
	int row=m_GridCtrl->GetRowCount()-m_GridCtrl->GetFixedRowCount();
	//获取的是两行数据
	//int RowCount=m_GridCtrl->GetFixedRowCount();
    for(i=0;i<row;i++)
	{
		//加上1的原因是,我们有一列是用来显示其它东西的
		for(j=0;j<ColumnNumbers+1;j++)
		{
			//
			strColValues[i][j]=m_GridCtrl->GetItemText(i+2,j+1);
			strColVal_one[i*ColumnNumbers+j]=m_GridCtrl->GetItemText(i+2,j+1);
            GV_Item[i*ColumnNumbers+j].row=i+2;
			GV_Item[i*ColumnNumbers+j].col=j+1;
            m_GridCtrl->GetItem(&GV_Item[i*ColumnNumbers+j]);
			//若没有数值了,则跳出循环
			//if(m_GridCtrl->GetItemText(i+2,j+1)=="")
				//break;
		}
		//if(m_GridCtrl->GetItemText(i+2,j+1)=="")
				//break;
		//i=i+1;
	}
	//存在问题,怎么判断我所输入的记录的数目;
	//先往下作罢,细节问题,回过头在说
	int col=ColumnNumbers;
    pMainDlg->SaveInsertData(row,col,strColVal_one);
	//if(mainDlg!=NULL)
		//delete mainDlg;

}


//DEL void CCInsertDlg::OnSize(UINT nType, int cx, int cy) 
//DEL {
//DEL 	CDialog::OnSize(nType, cx, cy);
//DEL 	
//DEL 	// TODO: Add your message handler code here
//DEL 	//可以移动,但是这个开关不对;在主对话框中并没有改变
//DEL 	//IsSiz;
//DEL 
//DEL      COCIExampleApp  *App=(COCIExampleApp  *)AfxGetApp();
//DEL 	 //COCIExampleDlg *MainDlg=(COCIExampleDlg *)App->
//DEL      COCIExampleDlg *pMainDlg=(COCIExampleDlg *)App->m_pMainWnd;
//DEL 
//DEL 
//DEL 	if(pMainDlg->IsSizeInsertDlg!=0)
//DEL 	{
//DEL 
//DEL 	if(!::IsWindow(m_GridCtrl->GetSafeHwnd()))
//DEL 		return;
//DEL 	
//DEL     const cH = 25, d = 5;
//DEL 	CRect rcClient,rcListCtrl,rcQueryCap,rcQueryEdit;
//DEL 	rcClient.DeflateRect(d,35,d,d);
//DEL 	GetClientRect(rcClient);
//DEL     //rcClient.top=120;
//DEL 	m_GridCtrl->MoveWindow(rcClient);
//DEL 	//Invalidate();
//DEL 	}
//DEL 	
//DEL 
//DEL }

void CCInsertDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	
	CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}

  
UINT CCInsertDlg::OnGetDlgCode()
{
	UINT result = OnGetDlgCode();
	result = result | DLGC_WANTALLKEYS;//,dlgc_wantallkeys
	return result;

}

⌨️ 快捷键说明

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