Transcript 05-Microsoft Foundation Classes
Microsoft Foundation Classes
What is MFC?
• • • Set of C++ classes written by MS Simplifies writing complex programs Covers many areas: – GUI – I/O – O/S interfaces – ActiveX • Framework for IE extensions • Component of Windows
Why Use MFC?
• • • • • Faster development More code is reusable Many common tasks are "built-in" – Winmain, WndProc Smaller executable Uses all the C++ paradigms – Inheritance, polymorphism, etc.
MFC class categories • • • • • • • • • • CObject – the root class Application architecture classes
Window, dialog, control Drawing, printing Datatypes
Array, list, map File & DB Internet & networking OLE Debugging Used in this course
Cobject • • • • • Think of it as the "master" class Serialization – Stream data to/from devices (disks) Runtime class info Debugging Some derived classes – Cmenu (menus & menu mgmt.) – CDC (device context & drawing) – CGdiObject (drawing devices – brushes, etc)
Related info • • • • MFC class hierarchy chart Macros & global variables WndProc (Win32API) buried in MFC library Message Maps – Names of events – Handler functions for those events – E.g.; ON_WM_MOVE for CMainFrame::OnMove – ON_WM_MOVE pre-defined constant – OnMove pre-defined fn in the CMainFrame class
Window gets moved WndProc() case WM_MOVE: movefn(); Win32API WIn32API vs MFC Message handling Window gets moved CMainFrame::OnMove MFC
Parts of a basic MFC Program - 1 MyWinApp.h
#include
Parts of a basic MFC Program – 2 MainFrame.h
#include
prototypes
for functions to handle window events CMainFrame(); // class constructor //
prototypes
for members named in the MESSAGE MAP // The MESSAGE MAP is implemented in MainFrame.cpp
// afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); // afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); afx_msg void OnMove(int x, int y); afx_msg void OnPaint(); // msg hndlr for WM_PAINT event void
common
(CWnd* wptr); DECLARE_MESSAGE_MAP(); }; // note: the " afx_msg " prefix is pre-VS 2005 and is #defined as empty
Parts of a basic MFC Program – 3 // Main.cpp
#include "MyWinApp.h" CMyWinApp MyApplication;
Parts of a basic MFC Program – 4 // MyWinApp.cpp
// create the window frame & display it #include "MyWinApp.h" #include "MainFrame.h" BOOL CMyWinApp::InitInstance() { CMainFrame *
pFrame
;
pFrame
= new CMainFrame; m_pMainWnd =
pFrame
;
pFrame-
>ShowWindow(SW_SHOW);
pFrame-
>UpdateWindow(); } return TRUE;
Parts of a basic MFC Program – 5a MainFrame.cpp
• This is where all the real work gets done #include "MainFrame.h" // Define the messages we will respond to and create the window BEGIN_MESSAGE_MAP (
CMainFrame
, CFrameWnd) // classname, base class //ON_WM_CREATE() //ON_WM_SHOWWINDOW() //ON_WM_ACTIVATE() ON_WM_MOVE() ON_WM_PAINT() END_MESSAGE_MAP()
} { Parts of a basic MFC Program – 5b MainFrame.cpp – part 2
CMainFrame
::
CMainFrame
()// Explicit constructor CString title = "DJ's WIndow"; Create (NULL /* classname*/, title, WS_OVERLAPPEDWINDOW, CRect (0, 0, 670, 300), NULL, /* parent window ptr*/ 0, /* ID */ NULL /* create context ptr - only if overriding the context */ );
Parts of a basic MFC Program – 5c void
CMainFrame
::OnPaint() {CPaintDC dc(this);// "this" is a handle for current window // dc is the "device context" for the window dc.TextOut(x, y, "hello"); // works for printers or displays common (this); // call common code and pass the context } void
CMainFrame
::OnMove() { } void
CMainFrame
:: common (CWnd * wptr) } { // have the window ptr (wptr), but not always using it
Window, Dialog & Control classes • • • • • Frame Window – CFrameWnd, CMenu View – – Represent client area of a frame – Show data, accept input • Cview, CScrollView, form & record, control Dialog box (modal, modeless) – Cdialog, CDataExchange Control – – Attached to CFrameWnd or CMiniFrameWnd – Static, text, number, button, list, toolbar, misc Control bar
CFrameWnd • • Framework for a single-document interface Usage – Derive a class using CFrameWnd::Create – Add member variables for your data – Implement message handlers – Define a message map • Specifies actions when the window gets a msg
Dialog boxes • • Modal – – Requires user interaction Blocks program operation until action completed – Mode errors can be caused by: • • Caps-lock or Insert key Focus stealing (user types but nothing happens) Modeless – No interaction required (e.g.; toolbar) • Note: this happens a lot in Unix/Linux editor, "vi", because mode indicator can be "off".
Views • • • • Represent the client area of a frame window Associated with document class & CFrameWnd 2 types of document views – Cview - base class for app-specific views – CScrollView - base class for scrollable data • CFormView, CRecordView, CHtmlEditView Control views – CCrtlView, CEditView, CCListView, CTreeView
GetWindowRect • Win32API version BOOL WINAPI GetWindowRect ( HWND hWnd, LPRECT lpRect ); note: TWO parameters, lpRect is a
struct
• MFC version: void GetWindowRect ( LPRECT lpRect ) const; note: one parameter, lpRect is a
class
(a Crect object)
Document/View Architecture • • • • • Display of data should be independent of the data May need to have different ways to look at the data CDocument class holds the data CView manages display and UI 2 kinds of apps: – Single Document Interface – Multiple Document Interface
View • • • • Display of the data & a way to display it Frame window: contains a view of the data Multiple views possible But only ONE doc per View
tips • • SDI application – One frame window derived from class CFrameWnd . • This window is both: – –
main frame window
and
document frame window.
MDI application, the main frame window is derived from class CMDIFrameWnd , and the document frame windows, which are MDI child windows, are derived from class CMDIChildWnd .