📄 cinsertdlg.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 + -