?? mainfrm.cpp
字號:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "NanjingHospital.h"
#include "MainFrm.h"
#include "LeftTreeView.h"
#include "RightPaneFrame.h"
#include "AddRelationInfo.h"
#include "RightListView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(ID_ADD_INFO, OnAddInfo)
ON_COMMAND(ID_DELETE_INFO, OnDeleteInfo)
ON_UPDATE_COMMAND_UI(ID_DELETE_INFO, OnUpdateDeleteInfo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
/*******************************************************************
函數名稱:OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
函數類型:BOOL
函數參數:lpcs pContext
功能描述:1.創建客戶區,并分割
*******************************************************************/
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
if (!m_wndSplitter.CreateStatic(this, 1, 2))
{
TRACE0("Failed to create splitter window\n");
return FALSE;
}
//獲取客戶區大小以便調整視圖的大小
CRect rect;
GetClientRect(&rect);
//首先創建左視圖
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftTreeView), CSize(rect.Width()/4, 0), pContext))
{
TRACE0("Failed to create left pane view\n");
return FALSE;
}
//左窗格是一個包含幾個具有不同視圖的輔助框架窗口
if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CRightPaneFrame), CSize(0, 0), pContext))
{
TRACE0("Failed to create right pane frame\n");
return FALSE;
}
CLeftTreeView* pLeftTreeView=(CLeftTreeView*)m_wndSplitter.GetPane(0,0);
pLeftTreeView->m_pRightPaneFrame=(CRightPaneFrame*)m_wndSplitter.GetPane(0,1);
return TRUE;
}
/*******************************************************************
函數名稱:OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
函數類型:BOOL
函數參數:nID, nCode, pExtra, pHandlerInfo
功能描述:1.重定向消息,以便輔助框架能夠處理來自主框架的命令消息
*******************************************************************/
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
// TODO: Add your specialized code here and/or call the base class
CRightPaneFrame* pRightPaneFrame=(CRightPaneFrame*)m_wndSplitter.GetPane(0,1);
if(pRightPaneFrame->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
return TRUE;
return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
/*******************************************************************
函數名稱:OnAddInfo()
函數類型:void
函數參數:無
功能描述:1.響應“添加”菜單,用于彈出添加對話框
*******************************************************************/
void CMainFrame::OnAddInfo()
{
// TODO: Add your command handler code here
//顯示對話框
CAddRelationInfo dlg;
dlg.m_strTitle="添加聯系人信息";
dlg.bEdit=FALSE;
dlg.DoModal();
}
/*******************************************************************
函數名稱:OnDeleteInfo()
函數類型:void
函數參數:無
功能描述:1.判斷想要刪除的內容,樹或者列表,然后刪除
*******************************************************************/
void CMainFrame::OnDeleteInfo()
{
// TODO: Add your command handler code here
if(bTreeSel)
{
DeleteTree();
bTreeSel=FALSE;
}
else if(bListSel)
{
DeleteList();
bListSel=FALSE;
}
else
{
AfxMessageBox("不能刪除任何項");
}
}
/*******************************************************************
函數名稱:OnUpdateDeleteInfo(CCmdUI* pCmdUI)
函數類型:void
函數參數:pCmdUI
功能描述:1.更新刪除過的信息
*******************************************************************/
void CMainFrame::OnUpdateDeleteInfo(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
//樹
bTreeSel=FALSE;
bListSel=FALSE;
CLeftTreeView* pLeftTreeView=(CLeftTreeView*)m_wndSplitter.GetPane(0,0);
CTreeCtrl& treeCtrl=pLeftTreeView->m_treeCtrl;
HTREEITEM hSelItem=treeCtrl.GetSelectedItem( );
if(hSelItem!=NULL)
{
bTreeSel=TRUE;
}
//列表控件
CRightPaneFrame* pRightPaneFrame=(CRightPaneFrame*)m_wndSplitter.GetPane(0,1);
CRightListView* pListView=(CRightListView*)pRightPaneFrame->m_wndSplitter.GetPane(0,0);
CListCtrl& listCtrl=pListView->m_listCtrl;
POSITION pos=listCtrl.GetFirstSelectedItemPosition();
if (pos!=NULL)
{
bListSel=TRUE;
}
//兩種情況下
pCmdUI->Enable(bTreeSel|bListSel);
}
/*******************************************************************
函數名稱:DeleteTree()
函數類型:void
函數參數:無
功能描述:1.從樹類刪除選中的數據庫信息
*******************************************************************/
void CMainFrame::DeleteTree()
{
CLeftTreeView* pLeftTreeView=(CLeftTreeView*)m_wndSplitter.GetPane(0,0);
CTreeCtrl& treeCtrl=pLeftTreeView->m_treeCtrl;
HTREEITEM hSelItem=treeCtrl.GetSelectedItem( );
if(hSelItem==NULL)
return;
HTREEITEM hParentItem=treeCtrl.GetParentItem(hSelItem);
CString strWhere,strField1,strField2,strSQL,strHint;
if(hParentItem==NULL&& hSelItem!=NULL)
{ //所有聯系人不允許一下子全部刪除
strHint="不允許一下子全部刪除所有聯系人!(";
AfxMessageBox(strHint);
return;
}
else if( hParentItem!=NULL&&treeCtrl.GetParentItem(hParentItem)==NULL )
{ //一級類別
CString strFirClass=treeCtrl.GetItemText(hSelItem);
//設置查詢條件
strWhere.Format("一級類別='%s'",strFirClass);
strSQL="select * from info where "+strWhere;
strHint.Format("您真的要刪除所有%s的個人信息嗎?",strFirClass);
}
else
{ //二級類別
CString strFirClass=treeCtrl.GetItemText(treeCtrl.GetParentItem(hSelItem));
CString strSecClass=treeCtrl.GetItemText(hSelItem);
//設置查詢條件
strWhere.Format("一級類別='%s' and 二級類別='%s'",\
strFirClass,strSecClass);
strSQL="select * from info where "+strWhere;
strHint.Format("您真的要刪除%s%s的所有個人信息嗎?",strSecClass,strFirClass);
}
if(MessageBox(strHint,"個人通訊信息管理系統",MB_YESNO)==IDNO)
{
return;
}
//刪除表
if(!pLeftTreeView->OpenRecordSet(pLeftTreeView->m_pRecordset,strSQL))
{
AfxMessageBox("信息表沒有成功打開");
return;
}
while(!pLeftTreeView->m_pRecordset->adoEOF)
{
pLeftTreeView->m_pRecordset->Delete(adAffectCurrent);
pLeftTreeView->m_pRecordset->MoveNext();
}
pLeftTreeView->m_pRecordset->Close();
pLeftTreeView->m_pRecordset=NULL;
//更新樹
pLeftTreeView->ShowTree();
}
/*******************************************************************
函數名稱:DeleteList()
函數類型:void
函數參數:無
功能描述:1.從列表項刪除選中的數據庫信息,每次刪除一個
*******************************************************************/
void CMainFrame::DeleteList()
{
//獲取列表控件
CRightPaneFrame* pRightPaneFrame=(CRightPaneFrame*)m_wndSplitter.GetPane(0,1);
CRightListView* pListView=(CRightListView*)pRightPaneFrame->m_wndSplitter.GetPane(0,0);
CListCtrl& listCtrl=pListView->m_listCtrl;
CString strName,strSQL;
//尋找當前選中的記錄的位置
POSITION pos=listCtrl.GetFirstSelectedItemPosition();
if (pos==NULL)
{
//如果沒有選擇記錄,則提示并退出
AfxMessageBox("請您選擇要刪除的信息!");
return;
}
int iIndex=listCtrl.GetNextSelectedItem(pos);
//表
CString strFirClass,strSecClass;
strName=listCtrl.GetItemText(iIndex,0);
strFirClass=listCtrl.GetItemText(iIndex,1);
strSecClass=listCtrl.GetItemText(iIndex,4);
//確認信息
CString strHint;
strHint.Format("是否刪除:%s的個人信息?",strName);
if (MessageBox(strHint,"刪除確認",MB_YESNO|MB_ICONQUESTION)==IDNO)
{
return;
}
//首先從列表中刪除
listCtrl.DeleteItem(iIndex);
strSQL.Format("select * from info where 姓名='%s' \
and 一級類別='%s' and 二級類別='%s'",\
strName,strFirClass,strSecClass);
if(!pListView->OpenRecordSet(pListView->m_pRecordset,strSQL))
{
AfxMessageBox("基本信息沒有成功打開");
return;
}
//其次從數據庫中刪除
pListView->m_pRecordset->Delete(adAffectCurrent);
pListView->m_pRecordset->Close();
pListView->m_pRecordset=NULL;
bListSel=FALSE;
//更新樹
CLeftTreeView* pLeftTreeView=(CLeftTreeView*)m_wndSplitter.GetPane(0,0);
pLeftTreeView->ShowTree();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -