MFC文档感悟代码
1 // sd.h : main header file for the SD application 2 // 3 4 #if !defined(AFX_SD_H__DB621B01_7480_4661_A977_D2FC564CCA3C__INCLUDED_) 5 #define AFX_SD_H__DB621B01_7480_4661_A977_D2FC564CCA3C__INCLUDED_ 6 7 #if _MSC_VER > 1000 8 #pragma once 9 #endif // _MSC_VER > 1000 10 11 #ifndef __AFXWIN_H__ 12 #error include 'stdafx.h' before including this file for PCH 13 #endif 14 15 #include "resource.h" // main symbols 16 17 ///////////////////////////////////////////////////////////////////////////// 18 // CSdApp: 19 // See sd.cpp for the implementation of this class 20 // 21 22 class CSdApp : public CWinApp 23 { 24 public: 25 CSdApp(); 26 27 // Overrides 28 // ClassWizard generated virtual function overrides 29 //{{AFX_VIRTUAL(CSdApp) 30 public: 31 virtual BOOL InitInstance(); 32 //}}AFX_VIRTUAL 33 34 // Implementation 35 36 public: 37 //{{AFX_MSG(CSdApp) 38 afx_msg void OnAppAbout(); 39 // NOTE - the ClassWizard will add and remove member functions here. 40 // DO NOT EDIT what you see in these blocks of generated code ! 41 //}}AFX_MSG 42 DECLARE_MESSAGE_MAP() 43 }; 44 45 46 ///////////////////////////////////////////////////////////////////////////// 47 48 //{{AFX_INSERT_LOCATION}} 49 // Microsoft Visual C++ will insert additional declarations immediately before the previous line. 50 51 #endif // !defined(AFX_SD_H__DB621B01_7480_4661_A977_D2FC564CCA3C__INCLUDED_)
1 // sd.cpp : Defines the class behaviors for the application. 2 // 3 4 #include "stdafx.h" 5 #include "sd.h" 6 7 #include "MainFrm.h" 8 9 #ifdef _DEBUG 10 #define new DEBUG_NEW 11 #undef THIS_FILE 12 static char THIS_FILE[] = __FILE__; 13 #endif 14 15 ///////////////////////////////////////////////////////////////////////////// 16 // CSdApp 17 18 BEGIN_MESSAGE_MAP(CSdApp, CWinApp) 19 //{{AFX_MSG_MAP(CSdApp) 20 ON_COMMAND(ID_APP_ABOUT, OnAppAbout) 21 // NOTE - the ClassWizard will add and remove mapping macros here. 22 // DO NOT EDIT what you see in these blocks of generated code! 23 //}}AFX_MSG_MAP 24 END_MESSAGE_MAP() 25 26 ///////////////////////////////////////////////////////////////////////////// 27 // CSdApp construction 28 29 CSdApp::CSdApp() 30 { 31 // TODO: add construction code here, 32 // Place all significant initialization in InitInstance 33 } 34 35 ///////////////////////////////////////////////////////////////////////////// 36 // The one and only CSdApp object 37 38 CSdApp theApp; 39 40 ///////////////////////////////////////////////////////////////////////////// 41 // CSdApp initialization 42 43 BOOL CSdApp::InitInstance() 44 { 45 CMainFrame* pFrame = new CMainFrame; 46 m_pMainWnd = pFrame;//主窗口地址必须记录 47 //CWnd::CreateEx(...) 48 pFrame->LoadFrame(IDR_MAINFRAME, 49 WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, 50 NULL); 51 52 pFrame->ShowWindow(SW_MAXIMIZE); 53 pFrame->UpdateWindow(); 54 55 return TRUE;//必须返回TRUE; 56 } 57 58 ///////////////////////////////////////////////////////////////////////////// 59 // CSdApp message handlers 60 61 62 63 64 65 ///////////////////////////////////////////////////////////////////////////// 66 // CAboutDlg dialog used for App About 67 68 class CAboutDlg : public CDialog 69 { 70 public: 71 CAboutDlg(); 72 73 // Dialog Data 74 //{{AFX_DATA(CAboutDlg) 75 enum { IDD = IDD_ABOUTBOX }; 76 //}}AFX_DATA 77 78 // ClassWizard generated virtual function overrides 79 //{{AFX_VIRTUAL(CAboutDlg) 80 protected: 81 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 82 //}}AFX_VIRTUAL 83 84 // Implementation 85 protected: 86 //{{AFX_MSG(CAboutDlg) 87 // No message handlers 88 //}}AFX_MSG 89 DECLARE_MESSAGE_MAP() 90 }; 91 92 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 93 { 94 //{{AFX_DATA_INIT(CAboutDlg) 95 //}}AFX_DATA_INIT 96 } 97 98 void CAboutDlg::DoDataExchange(CDataExchange* pDX) 99 { 100 CDialog::DoDataExchange(pDX); 101 //{{AFX_DATA_MAP(CAboutDlg) 102 //}}AFX_DATA_MAP 103 } 104 105 BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 106 //{{AFX_MSG_MAP(CAboutDlg) 107 // No message handlers 108 //}}AFX_MSG_MAP 109 END_MESSAGE_MAP() 110 111 // App command to run the dialog 112 void CSdApp::OnAppAbout() 113 { 114 CAboutDlg aboutDlg; 115 aboutDlg.DoModal(); 116 } 117 118 ///////////////////////////////////////////////////////////////////////////// 119 // CSdApp message handlers
1 #if !defined(AFX_MAINVIEW_H__A232082F_2230_4E08_97EA_73538F012DBE__INCLUDED_) 2 #define AFX_MAINVIEW_H__A232082F_2230_4E08_97EA_73538F012DBE__INCLUDED_ 3 4 #if _MSC_VER > 1000 5 #pragma once 6 #endif // _MSC_VER > 1000 7 // MainView.h : header file 8 // 9 10 ///////////////////////////////////////////////////////////////////////////// 11 // CMainView view 12 #include <afxcview.h> 13 class CMainView : public CListView 14 { 15 protected: 16 CMainView(); // protected constructor used by dynamic creation 17 DECLARE_DYNCREATE(CMainView) 18 19 // Attributes 20 public: 21 22 // Operations 23 public: 24 25 // Overrides 26 // ClassWizard generated virtual function overrides 27 //{{AFX_VIRTUAL(CMainView) 28 public: 29 virtual void OnInitialUpdate(); 30 protected: 31 virtual void OnDraw(CDC* pDC); // overridden to draw this view 32 //}}AFX_VIRTUAL 33 34 // Implementation 35 protected: 36 virtual ~CMainView(); 37 #ifdef _DEBUG 38 virtual void AssertValid() const; 39 virtual void Dump(CDumpContext& dc) const; 40 #endif 41 42 // Generated message map functions 43 protected: 44 //{{AFX_MSG(CMainView) 45 afx_msg void OnEditAdd(); 46 afx_msg void OnEditDel(); 47 afx_msg void OnEditMod(); 48 //}}AFX_MSG 49 DECLARE_MESSAGE_MAP() 50 }; 51 52 ///////////////////////////////////////////////////////////////////////////// 53 54 //{{AFX_INSERT_LOCATION}} 55 // Microsoft Visual C++ will insert additional declarations immediately before the previous line. 56 57 #endif // !defined(AFX_MAINVIEW_H__A232082F_2230_4E08_97EA_73538F012DBE__INCLUDED_)
1 // MainView.cpp : implementation file 2 // 3 4 #include "stdafx.h" 5 #include "sd.h" 6 #include "MainView.h" 7 8 #ifdef _DEBUG 9 #define new DEBUG_NEW 10 #undef THIS_FILE 11 static char THIS_FILE[] = __FILE__; 12 #endif 13 14 ///////////////////////////////////////////////////////////////////////////// 15 // CMainView 16 17 IMPLEMENT_DYNCREATE(CMainView, CListView) 18 19 CMainView::CMainView() 20 { 21 } 22 23 CMainView::~CMainView() 24 { 25 } 26 27 28 BEGIN_MESSAGE_MAP(CMainView, CListView) 29 //{{AFX_MSG_MAP(CMainView) 30 ON_COMMAND(ID_EDIT_ADD, OnEditAdd) 31 ON_COMMAND(ID_EDIT_DEL, OnEditDel) 32 ON_COMMAND(ID_EDIT_MOD, OnEditMod) 33 //}}AFX_MSG_MAP 34 END_MESSAGE_MAP() 35 36 ///////////////////////////////////////////////////////////////////////////// 37 // CMainView drawing 38 39 void CMainView::OnDraw(CDC* pDC) 40 { 41 CDocument* pDoc = GetDocument(); 42 // TODO: add draw code here 43 } 44 45 ///////////////////////////////////////////////////////////////////////////// 46 // CMainView diagnostics 47 48 #ifdef _DEBUG 49 void CMainView::AssertValid() const 50 { 51 CListView::AssertValid(); 52 } 53 54 void CMainView::Dump(CDumpContext& dc) const 55 { 56 CListView::Dump(dc); 57 } 58 #endif //_DEBUG 59 60 ///////////////////////////////////////////////////////////////////////////// 61 // CMainView message handlers 62 63 void CMainView::OnInitialUpdate() 64 {//类似于对话框的OnInitDialog,在没有显示之前 65 CListView::OnInitialUpdate(); 66 67 CListCtrl &list = this->GetListCtrl(); 68 list.ModifyStyle(0,LVS_REPORT); 69 list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); 70 list.InsertColumn(0,"工号",0,180); 71 list.InsertColumn(1,"姓名",0,180); 72 list.InsertColumn(2,"部门",0,180); 73 74 } 75 #include "AddDlg.h" 76 void CMainView::OnEditAdd() 77 { 78 // TODO: Add your command handler code here 79 CAddDlg dlg; 80 if(dlg.DoModal() == IDCANCEL) 81 return; 82 CListCtrl &list = this->GetListCtrl(); 83 int i = list.GetItemCount(); 84 list.InsertItem(i,dlg.m_szNumb); 85 list.SetItemText(i,1,dlg.m_szName); 86 list.SetItemText(i,2,dlg.m_szDept); 87 88 89 } 90 91 void CMainView::OnEditDel() 92 { 93 // TODO: Add your command handler code here 94 95 } 96 97 void CMainView::OnEditMod() 98 { 99 // TODO: Add your command handler code here 100 101 }
1 // MainFrm.h : interface of the CMainFrame class 2 // 3 ///////////////////////////////////////////////////////////////////////////// 4 5 #if !defined(AFX_MAINFRM_H__9ECFA6B6_6F97_4C85_9DD5_396FF8608530__INCLUDED_) 6 #define AFX_MAINFRM_H__9ECFA6B6_6F97_4C85_9DD5_396FF8608530__INCLUDED_ 7 8 #if _MSC_VER > 1000 9 #pragma once 10 #endif // _MSC_VER > 1000 11 12 #include "ChildView.h" 13 #include "MainView.h" 14 class CMainFrame : public CFrameWnd//SDI外框架 15 { 16 17 public: 18 CMainFrame(); 19 protected: 20 DECLARE_DYNAMIC(CMainFrame) 21 22 // Attributes 23 public: 24 25 // Operations 26 public: 27 28 // Overrides 29 // ClassWizard generated virtual function overrides 30 //{{AFX_VIRTUAL(CMainFrame) 31 virtual BOOL PreCreateWindow(CREATESTRUCT& cs); 32 virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo); 33 //}}AFX_VIRTUAL 34 35 // Implementation 36 public: 37 virtual ~CMainFrame(); 38 #ifdef _DEBUG 39 virtual void AssertValid() const; 40 virtual void Dump(CDumpContext& dc) const; 41 #endif 42 43 protected: // control bar embedded members 44 CStatusBar m_wndStatusBar; 45 CToolBar m_wndToolBar; 46 //CChildView m_wndView; 47 CMainView *m_pMainView; 48 49 // Generated message map functions 50 protected: 51 //{{AFX_MSG(CMainFrame) 52 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 53 afx_msg void OnSetFocus(CWnd *pOldWnd); 54 afx_msg BOOL OnEraseBkgnd(CDC* pDC); 55 //}}AFX_MSG 56 DECLARE_MESSAGE_MAP() 57 }; 58 59 ///////////////////////////////////////////////////////////////////////////// 60 61 //{{AFX_INSERT_LOCATION}} 62 // Microsoft Visual C++ will insert additional declarations immediately before the previous line. 63 64 #endif // !defined(AFX_MAINFRM_H__9ECFA6B6_6F97_4C85_9DD5_396FF8608530__INCLUDED_)
1 // MainFrm.cpp : implementation of the CMainFrame class 2 // 3 4 #include "stdafx.h" 5 #include "sd.h" 6 7 #include "MainFrm.h" 8 9 #ifdef _DEBUG 10 #define new DEBUG_NEW 11 #undef THIS_FILE 12 static char THIS_FILE[] = __FILE__; 13 #endif 14 15 ///////////////////////////////////////////////////////////////////////////// 16 // CMainFrame 17 18 IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd) 19 20 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 21 //{{AFX_MSG_MAP(CMainFrame) 22 ON_WM_CREATE() 23 ON_WM_SETFOCUS() 24 ON_WM_ERASEBKGND() 25 //}}AFX_MSG_MAP 26 END_MESSAGE_MAP() 27 28 static UINT indicators[] = 29 { 30 ID_SEPARATOR, // status line indicator 31 ID_INDICATOR_CAPS, 32 ID_INDICATOR_NUM, 33 ID_INDICATOR_SCRL, 34 }; 35 36 ///////////////////////////////////////////////////////////////////////////// 37 // CMainFrame construction/destruction 38 39 CMainFrame::CMainFrame() 40 { 41 // TODO: add member initialization code here 42 m_pMainView = NULL; 43 44 } 45 46 CMainFrame::~CMainFrame() 47 { 48 } 49 #include "MainView.h" 50 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 51 { 52 if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 53 return -1; 54 // create a view to occupy the client area of the frame 55 /* 56 if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, 57 CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)) 58 { 59 TRACE0("Failed to create view window\n"); 60 return -1; 61 }//内部视图 62 */ 63 64 //将VIEW和FRAME紧密联系在一起 65 CCreateContext cc; 66 cc.m_pNewViewClass =RUNTIME_CLASS(CMainView); 67 68 m_pMainView = ( CMainView* )CreateView(&cc); 69 70 71 72 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP 73 | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || 74 !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) 75 { 76 TRACE0("Failed to create toolbar\n"); 77 return -1; // fail to create 78 }//工具栏创建 79 80 if (!m_wndStatusBar.Create(this) || 81 !m_wndStatusBar.SetIndicators(indicators, 82 sizeof(indicators)/sizeof(UINT))) 83 { 84 TRACE0("Failed to create status bar\n"); 85 return -1; // fail to create 86 }//状态栏支持 87 m_wndToolBar.SetWindowText("标准工具栏");//在浮动之前设置标题 88 // TODO: Delete these three lines if you don't want the toolbar to 89 // be dockable 90 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); 91 EnableDocking(CBRS_ALIGN_ANY); 92 DockControlBar(&m_wndToolBar);//工具栏停靠 93 //FloatControlBar(&m_wndToolBar,CPoint(200,200));//工具栏飘起来 94 95 return 0; 96 } 97 98 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 99 { 100 if( !CFrameWnd::PreCreateWindow(cs) ) 101 return FALSE; 102 // TODO: Modify the Window class or styles here by modifying 103 // the CREATESTRUCT cs 104 105 cs.dwExStyle &= ~WS_EX_CLIENTEDGE; 106 cs.lpszClass = AfxRegisterWndClass(0); 107 return TRUE; 108 } 109 110 ///////////////////////////////////////////////////////////////////////////// 111 // CMainFrame diagnostics 112 113 #ifdef _DEBUG 114 void CMainFrame::AssertValid() const 115 { 116 CFrameWnd::AssertValid(); 117 } 118 119 void CMainFrame::Dump(CDumpContext& dc) const 120 { 121 CFrameWnd::Dump(dc); 122 } 123 124 #endif //_DEBUG 125 126 ///////////////////////////////////////////////////////////////////////////// 127 // CMainFrame message handlers 128 void CMainFrame::OnSetFocus(CWnd* pOldWnd) 129 { 130 // forward focus to the view window 131 // m_wndView.SetFocus();//当框架得到焦点的时候,立即把焦点给视图 132 } 133 134 BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 135 { 136 // let the view have first crack at the command 137 // if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))//命令转发 138 // return TRUE; 139 if (m_pMainView->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))//消息分发机制 140 return TRUE; 141 // otherwise, do default handling 142 return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); 143 } 144 145 146 BOOL CMainFrame::OnEraseBkgnd(CDC* pDC) 147 { 148 // TODO: Add your message handler code here and/or call default 149 150 //return CFrameWnd::OnEraseBkgnd(pDC); 151 //CRect rect; 152 //GetClientRect(rect);//获取客户区域 153 154 //pDC ->FillSolidRect(rect,GetSysColor(COLOR_BTNSHADOW)); 155 return TRUE; 156 }
1 #if !defined(AFX_ADDDLG_H__CDC10284_A9B4_4155_904F_F0C87E1A0A9D__INCLUDED_) 2 #define AFX_ADDDLG_H__CDC10284_A9B4_4155_904F_F0C87E1A0A9D__INCLUDED_ 3 4 #if _MSC_VER > 1000 5 #pragma once 6 #endif // _MSC_VER > 1000 7 // AddDlg.h : header file 8 // 9 10 ///////////////////////////////////////////////////////////////////////////// 11 // CAddDlg dialog 12 13 class CAddDlg : public CDialog 14 { 15 // Construction 16 public: 17 CAddDlg(CWnd* pParent = NULL); // standard constructor 18 19 // Dialog Data 20 //{{AFX_DATA(CAddDlg) 21 enum { IDD = IDD_ADD_DLG }; 22 CString m_szDept; 23 CString m_szName; 24 CString m_szNumb; 25 //}}AFX_DATA 26 27 28 // Overrides 29 // ClassWizard generated virtual function overrides 30 //{{AFX_VIRTUAL(CAddDlg) 31 protected: 32 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 33 //}}AFX_VIRTUAL 34 35 // Implementation 36 protected: 37 38 // Generated message map functions 39 //{{AFX_MSG(CAddDlg) 40 // NOTE: the ClassWizard will add member functions here 41 //}}AFX_MSG 42 DECLARE_MESSAGE_MAP() 43 }; 44 45 //{{AFX_INSERT_LOCATION}} 46 // Microsoft Visual C++ will insert additional declarations immediately before the previous line. 47 48 #endif // !defined(AFX_ADDDLG_H__CDC10284_A9B4_4155_904F_F0C87E1A0A9D__INCLUDED_)
1 // AddDlg.cpp : implementation file 2 // 3 4 #include "stdafx.h" 5 #include "sd.h" 6 #include "AddDlg.h" 7 8 #ifdef _DEBUG 9 #define new DEBUG_NEW 10 #undef THIS_FILE 11 static char THIS_FILE[] = __FILE__; 12 #endif 13 14 ///////////////////////////////////////////////////////////////////////////// 15 // CAddDlg dialog 16 17 18 CAddDlg::CAddDlg(CWnd* pParent /*=NULL*/) 19 : CDialog(CAddDlg::IDD, pParent) 20 { 21 //{{AFX_DATA_INIT(CAddDlg) 22 m_szDept = _T(""); 23 m_szName = _T(""); 24 m_szNumb = _T(""); 25 //}}AFX_DATA_INIT 26 } 27 28 29 void CAddDlg::DoDataExchange(CDataExchange* pDX) 30 { 31 CDialog::DoDataExchange(pDX); 32 //{{AFX_DATA_MAP(CAddDlg) 33 DDX_Text(pDX, IDC_DEPT, m_szDept); 34 DDX_Text(pDX, IDC_NAME, m_szName); 35 DDX_Text(pDX, IDC_NUMB, m_szNumb); 36 //}}AFX_DATA_MAP 37 } 38 39 40 BEGIN_MESSAGE_MAP(CAddDlg, CDialog) 41 //{{AFX_MSG_MAP(CAddDlg) 42 // NOTE: the ClassWizard will add message map macros here 43 //}}AFX_MSG_MAP 44 END_MESSAGE_MAP() 45 46 ///////////////////////////////////////////////////////////////////////////// 47 // CAddDlg message handlers