?? mainframe.cpp
字號(hào):
// MainFrame.cpp : implementation file
//
#include "stdafx.h"
#include "MainFrame.h"
#include "fun.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// MainFrame
IMPLEMENT_DYNCREATE(MainFrame, CFrameWnd)
MainFrame::MainFrame()
{
m_filepathname = "實(shí)驗(yàn)室信息管理.mdb";
m_datadlg = NULL;
x = NULL;
y = NULL;
m_preindex = -1;
m_button = -1;
m_length = 0;
listbox = NULL;
button1 = button2 = button3 = button4 = NULL;
querydlg = NULL;
RECT rect;
Create(NULL,"應(yīng)用軟件開發(fā)基礎(chǔ) [數(shù)據(jù)庫]");
CClientDC dc(this);
int width = dc.GetDeviceCaps(HORZRES);
int height = dc.GetDeviceCaps(VERTRES);
GetWindowRect( &rect );
width = ( width - ( rect.right - rect.left ))/2 ;
height = (height - (rect.bottom - rect.top ))/2 ;
MoveWindow( width ,
height ,
(rect.right - rect.left ) ,
(rect.bottom - rect.top ) ,
true );
}
MainFrame::~MainFrame()
{
if(m_datadlg != NULL)
delete m_datadlg;
m_datadlg = NULL;
if(x != NULL)
delete [] x;
if(y != NULL)
delete [] y;
x = NULL;
y = NULL;
if(listbox != NULL)
delete listbox;
if(button1 != NULL)
delete button1;
if(button2 != NULL)
delete button2;
if(button3 != NULL)
delete button3;
if(button4 != NULL)
delete button4;
listbox = NULL;
button1 = button2 = button3 = button4 = NULL;
if(querydlg != NULL)
delete querydlg;
querydlg = NULL;
}
BEGIN_MESSAGE_MAP(MainFrame, CFrameWnd)
//{{AFX_MSG_MAP(MainFrame)
ON_WM_PAINT()
ON_WM_CREATE()
ON_LBN_SELCHANGE(ID_LIST,OnSelChange)
ON_MESSAGE(WM_VIEWDATA_CLOSE,OnViewDataClose)
ON_MESSAGE(WM_QUERY_CLOSE,OnQueryClose)
ON_MESSAGE(WM_QUERY_OK,OnQueryOk)
ON_BN_CLICKED(ID_BUTTON1, OnQuery1)
ON_BN_CLICKED(ID_BUTTON2, OnQuery2)
ON_BN_CLICKED(ID_BUTTON3, OnQuery3)
ON_BN_CLICKED(ID_BUTTON4, OnQuery4)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// MainFrame message handlers
void MainFrame::OnPaint()
{
CPaintDC dc(this); // device context for painting
CPen pen(PS_SOLID, 0, RGB(0, 192, 192));
CPen *oldpen = dc.SelectObject(&pen);
DrawCoordinate(&dc, CPoint(200, 400), 350, 350);
Draw(&dc, CPoint(200, 400), CSize(300, 300), x, y, m_length);
dc.SelectObject(oldpen);
}
int MainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
listbox = new CListBox;
listbox->CreateEx( WS_EX_CLIENTEDGE,"ListBox",
NULL,LBS_STANDARD|WS_VISIBLE|WS_CHILD,
CRect(30,50,150,200),
this,
ID_LIST );
button1 = new CButton;
button1->Create("查詢客戶",WS_VISIBLE|WS_CHILD,
CRect(30,220,150, 250),
this,
ID_BUTTON1);
button2 = new CButton;
button2->Create("查詢樣品",WS_VISIBLE|WS_CHILD,
CRect(30,270,150, 300),
this,
ID_BUTTON2);
button3 = new CButton;
button3->Create("查詢儀器",WS_VISIBLE|WS_CHILD,
CRect(30,320,150, 350),
this,
ID_BUTTON3);
button4 = new CButton;
button4->Create("查詢數(shù)據(jù)",WS_VISIBLE|WS_CHILD,
CRect(30,370,150, 400),
this,
ID_BUTTON4);
CString tablename, fieldname;
if(!m_filepathname.IsEmpty ())
{
AfxGetModuleState()->m_dwVersion = 0x0601;
AfxDaoInit();
m_MyDatabase.Open (m_filepathname);
int nTableCount = m_MyDatabase.GetTableDefCount ();
for(int i=0; i<nTableCount; i++)
{
CDaoTableDefInfo TableInfo;
m_MyDatabase.GetTableDefInfo (i, TableInfo, AFX_DAO_ALL_INFO);
if(TableInfo.m_lAttributes != 0)
continue;
tablename = (char *)(LPCTSTR)TableInfo.m_strName ;
listbox->AddString(tablename);
if(tablename == "實(shí)驗(yàn)數(shù)據(jù)表")
{
CString str1 = "SELECT [實(shí)驗(yàn)數(shù)據(jù)表].[X], [實(shí)驗(yàn)數(shù)據(jù)表].[Y] FROM [實(shí)驗(yàn)數(shù)據(jù)表]";
CDaoRecordset m_MyRS(&m_MyDatabase);
m_MyRS.Open(dbOpenDynaset, str1);
m_length = 0;
m_MyRS.MoveFirst();
while(!m_MyRS.IsEOF())
{
m_length++;
m_MyRS.MoveNext();
}
if(x != NULL)
delete [] x;
if(y != NULL)
delete [] y;
x = new int [m_length];
y = new int [m_length];
m_MyRS.MoveFirst();
int index = -1;
while(!m_MyRS.IsEOF())
{
index++;
x[index] = atoi(strVARIANT(m_MyRS.GetFieldValue(0)));
y[index] = atoi(strVARIANT(m_MyRS.GetFieldValue(1)));
m_MyRS.MoveNext();
}
m_MyRS.Close();
}
}
}
return 0;
}
void MainFrame::OnSelChange()
{
int index;
CString tablename;
index = listbox->GetCurSel();
if(m_preindex == index)
{
m_datadlg->SetFocus();
return;
}
m_preindex = index;
listbox->GetText(index, tablename);
CString str1 = "Select * from [" + tablename + "]";
CDaoRecordset m_MyRS(&m_MyDatabase);
m_MyRS.Open(dbOpenDynaset, str1);
if(m_datadlg == NULL)
{
m_datadlg = new CViewData(this);
m_datadlg->m_record = &m_MyRS;
m_datadlg->m_caption = tablename;
m_datadlg->Create(IDD_DIALOG1);
m_datadlg->ShowWindow (SW_SHOW);
}
else
{
int nColumnCount = m_datadlg->m_list.GetHeaderCtrl ()->GetItemCount ();
for(int i=0; i<nColumnCount; i++)
m_datadlg->m_list.DeleteColumn(0);
m_datadlg->m_list.DeleteAllItems();
m_datadlg->m_caption = tablename;
m_datadlg->m_record = &m_MyRS;
m_datadlg->Init();
m_datadlg->Invalidate();
m_datadlg->SetFocus();
}
m_MyRS.Close();
}
LONG MainFrame::OnViewDataClose(WPARAM wP,LPARAM lP)
{
m_datadlg = NULL;
m_preindex = -1;
return 0;
}
LONG MainFrame::OnQueryClose(WPARAM wP,LPARAM lP)
{
querydlg = NULL;
m_button = -1;
return 0;
}
LONG MainFrame::OnQueryOk(WPARAM wP,LPARAM lP)
{
//AfxMessageBox("...");
m_preindex = -1;
CDaoRecordset m_MyRS(&m_MyDatabase);
CString temp, caption;
switch(m_button)
{
case 1:
{
int nCursel = querydlg->m_combo1.GetCurSel();
if(nCursel >= 0)
{
querydlg->m_combo1.GetLBText(nCursel, temp);
CString str1 = "SELECT [客戶表].[姓名] FROM [客戶表] WHERE (([單位]=\"" + temp + "\"))";
caption = temp + "的所有客戶姓名";
m_MyRS.Open(dbOpenDynaset, str1);
}
else
return 0;
}
break;
case 2:
{
int nCursel = querydlg->m_combo1.GetCurSel();
if(nCursel >= 0)
{
querydlg->m_combo1.GetLBText(nCursel, temp);
CString str1 = "SELECT [樣品表].[樣品編號(hào)], [樣品表].[樣品類型] FROM [客戶表] INNER JOIN [樣品表] ON [客戶表].[客戶ID]=[樣品表].[客戶ID] WHERE ((([客戶表].[姓名])=\"" + temp + "\"))";
caption = temp + "送來的全部樣品";
m_MyRS.Open(dbOpenDynaset, str1);
}
else
return 0;
}
break;
case 3:
{
int nCursel = querydlg->m_combo1.GetCurSel();
if(nCursel >= 0)
{
querydlg->m_combo1.GetLBText(nCursel, temp);
CString str1;
str1.Format("SELECT [儀器表].[儀器型號(hào)], [儀器表].[儀器類型] FROM [儀器表] INNER JOIN [實(shí)驗(yàn)數(shù)據(jù)表] ON [儀器表].[儀器型號(hào)] = [實(shí)驗(yàn)數(shù)據(jù)表].[儀器型號(hào)] WHERE ((([實(shí)驗(yàn)數(shù)據(jù)表].[樣品編號(hào)])=%d))",nCursel+1);
caption = "測(cè)試" + temp + "所用的各種儀器";
m_MyRS.Open(dbOpenDynaset, str1);
}
else
return 0;
}
break;
case 4:
{
int nCursel1 = querydlg->m_combo1.GetCurSel();
int nCursel2 = querydlg->m_combo2.GetCurSel();
if((nCursel1 >= 0) && (nCursel2 >= 0))
{
CString str1;
str1.Format("SELECT [實(shí)驗(yàn)數(shù)據(jù)表].[X], [實(shí)驗(yàn)數(shù)據(jù)表].[Y] FROM [實(shí)驗(yàn)數(shù)據(jù)表] WHERE ((([實(shí)驗(yàn)數(shù)據(jù)表].[樣品編號(hào)])=%d) AND (([實(shí)驗(yàn)數(shù)據(jù)表].[儀器型號(hào)])=%d))", nCursel1+1, nCursel2+1);
CDaoRecordset m_MyRS(&m_MyDatabase);
m_MyRS.Open(dbOpenDynaset, str1);
}
else
return 0;
}
break;
default:
AfxMessageBox("這是怎么回事?應(yīng)該是出錯(cuò)了?");
break;
}
if(m_datadlg == NULL)
{
m_datadlg = new CViewData(this);
m_datadlg->m_record = &m_MyRS;
m_datadlg->m_caption = caption;
m_datadlg->Create(IDD_DIALOG1);
m_datadlg->ShowWindow (SW_SHOW);
}
else
{
int nColumnCount = m_datadlg->m_list.GetHeaderCtrl ()->GetItemCount ();
for(int i=0; i<nColumnCount; i++)
m_datadlg->m_list.DeleteColumn(0);
m_datadlg->m_list.DeleteAllItems();
m_datadlg->m_caption = caption;
m_datadlg->m_record = &m_MyRS;
m_datadlg->Init();
m_datadlg->Invalidate();
m_datadlg->SetFocus();
}
m_MyRS.Close();
return 0;
}
BOOL MainFrame::Draw(CDC *pDC, CPoint O, CSize Range, int *x, int *y, int length)
{
int xBalance = FindBalance(x, length, 5);
int yBalance = FindBalance(y, length, 5);
pDC->MoveTo(O);
for(int i=0; i<length; i++)
pDC->LineTo(O.x + x[i], O.y - y[i]);
return TRUE;
}
int MainFrame::FindBalance(int *a, int length, int n)
{
int r, min, max;
min = max = a[0];
for(int i=1; i<length; i++)
{
if(a[i] > max)
max = a[i];
else if(a[i] < min)
min = a[i];
}
r = (int)((max - min)/n);
return r;
}
BOOL MainFrame::DrawCoordinate(CDC *pDC, CPoint O, int weight, int height)
{
CPen pen(PS_SOLID,0,RGB(255,0,0));
CPen *oldpen = pDC->SelectObject (&pen);
COLORREF oldcolor = pDC->SetTextColor (RGB(0,255,0));
UINT oldalign = pDC->SetTextAlign (TA_CENTER);
CString str;
int i, just;
just= 10;
pDC->MoveTo (O);
pDC->LineTo (O.x + height, O.y);
for(i=0; i<height;)
{
i += 10;
pDC->MoveTo (O.x + i, O.y);
pDC->LineTo (O.x + i, O.y + 4);
if(!(i%100))
{
pDC->LineTo (O.x + i, O.y + 8);
str.Format ("%d",i);
pDC->TextOut (O.x + i, O.y + 12, str);
}
}
pDC->SetTextAlign (TA_RIGHT);
pDC->MoveTo (O);
pDC->LineTo (O.x, O.y - weight);
for(i=0; i<weight;)
{
i += 10;
pDC->MoveTo (O.x, O.y - i);
pDC->LineTo (O.x - 4, O.y - i);
if(!(i%100))
{
pDC->LineTo (O.x - 8, O.y - i);
str.Format ("%d",i);
pDC->TextOut (O.x - 12, O.y - i - 8, str);
}
}
pDC->SetTextAlign (oldalign);
pDC->SelectObject (oldpen);
pDC->SetTextColor (oldcolor);
return TRUE;
}
void MainFrame::OnQuery1()
{
//AfxMessageBox("呵呵......query1");
m_button = 1;
CString str1 = "SELECT [客戶表].[單位] FROM 客戶表";
CDaoRecordset m_MyRS(&m_MyDatabase);
m_MyRS.Open(dbOpenDynaset, str1);
if(querydlg == NULL)
{
querydlg = new CQuery(this);
querydlg->m_str1 = "客戶單位:";
querydlg->m_record1 = &m_MyRS;
querydlg->m_str2 = "";
querydlg->m_record2 = NULL;
querydlg->button = 1;
querydlg->Create(IDD_DIALOG2);
querydlg->ShowWindow (SW_SHOW);
}
else
{
querydlg->m_str1 = "客戶單位:";
querydlg->m_record1 = &m_MyRS;
querydlg->m_str2 = "";
querydlg->m_record2 = NULL;
querydlg->button = 1;
querydlg->Init();
querydlg->UpdateData();
//querydlg->Invalidate();
querydlg->SetFocus();
}
m_MyRS.Close();
}
void MainFrame::OnQuery2()
{
//AfxMessageBox("呵呵......query2");
m_button = 2;
CString str1 = "SELECT [客戶表].[姓名] FROM 客戶表;";
CDaoRecordset m_MyRS(&m_MyDatabase);
m_MyRS.Open(dbOpenDynaset, str1);
if(querydlg == NULL)
{
querydlg = new CQuery(this);
querydlg->m_str1 = "客戶姓名:";
querydlg->m_record1 = &m_MyRS;
querydlg->m_str2 = "";
querydlg->m_record2 = NULL;
querydlg->button = 2;
querydlg->Create(IDD_DIALOG2);
querydlg->ShowWindow (SW_SHOW);
}
else
{
querydlg->m_str1 = "客戶姓名:";
querydlg->m_record1 = &m_MyRS;
querydlg->m_str2 = "";
querydlg->m_record2 = NULL;
querydlg->button = 2;
querydlg->Init();
querydlg->UpdateData();
//querydlg->Invalidate();
querydlg->SetFocus();
}
m_MyRS.Close();
}
void MainFrame::OnQuery3()
{
//AfxMessageBox("呵呵......query3");
m_button = 3;
CString str1 = "SELECT 樣品表.樣品編號(hào), 樣品表.樣品類型 FROM 樣品表";
CDaoRecordset m_MyRS(&m_MyDatabase);
m_MyRS.Open(dbOpenDynaset, str1);
if(querydlg == NULL)
{
querydlg = new CQuery(this);
querydlg->m_str1 = "樣品:";
querydlg->m_record1 = &m_MyRS;
querydlg->m_str2 = "";
querydlg->m_record2 = NULL;
querydlg->button = 3;
querydlg->Create(IDD_DIALOG2);
querydlg->ShowWindow (SW_SHOW);
}
else
{
querydlg->m_str1 = "樣品:";
querydlg->m_record1 = &m_MyRS;
querydlg->m_str2 = "";
querydlg->m_record2 = NULL;
querydlg->button = 3;
querydlg->Init();
querydlg->UpdateData();
//querydlg->Invalidate();
querydlg->SetFocus();
}
m_MyRS.Close();
}
void MainFrame::OnQuery4()
{
//AfxMessageBox("呵呵......query4");
m_button = 4;
CString str1 = "SELECT 樣品表.樣品編號(hào), 樣品表.樣品類型 FROM 樣品表";
CString str2 = "SELECT * FROM [儀器表]";
CDaoRecordset m_MyRS1(&m_MyDatabase);
CDaoRecordset m_MyRS2(&m_MyDatabase);
m_MyRS1.Open(dbOpenDynaset, str1);
m_MyRS2.Open(dbOpenDynaset, str2);
if(querydlg == NULL)
{
querydlg = new CQuery(this);
querydlg->m_str1 = "樣品:";
querydlg->m_record1 = &m_MyRS1;
querydlg->m_str2 = "儀器";
querydlg->m_record2 = &m_MyRS2;
querydlg->button = 4;
querydlg->Create(IDD_DIALOG2);
querydlg->ShowWindow (SW_SHOW);
}
else
{
querydlg->m_str1 = "樣品:";
querydlg->m_record1 = &m_MyRS1;
querydlg->m_str2 = "儀器";
querydlg->m_record2 = &m_MyRS2;
querydlg->button = 4;
querydlg->Init();
querydlg->UpdateData();
//querydlg->Invalidate();
querydlg->SetFocus();
}
m_MyRS1.Close();
m_MyRS2.Close();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -