Title: Windows Programming: Win32 / MFC
1Windows ProgrammingWin32 / MFC
2Presentation Goals
- How to create a basic Windows App
- Hungarian Notation
- How to use the Win32 / MFC APIs
- Windows Programming Model
- Messages
- Examples
3Windows Programming
- Where do I start?
- Use the Windows API (Win32 API)
- How do I use it?
- include ltwindows.hgt
- What about documentation?
- Google msdn win32 api
4http//msdn2.microsoft.com/en-us/library/aa383749(
VS.85).aspx
5What is MFC?
- Microsoft Foundation Class
- MFC is the C class library Microsoft provides
to place an object-oriented wrapper around the
Windows API. - How do I use it?
- include ltafxwin.hgt
- Do NOT include ltwindows.hgt afxwin.h already
includes it
6http//msdn2.microsoft.com/en-us/library/d06h2x6e(
VS.80).aspx
7I Dont Speak Hungarian!
- Hungarian Notation / Windows Data Types
- What is it?
- A variable naming convention
- Examples
- h handle
- n integer
- b boolean
- p pointer
8Hungarian Notation Continued...
- Its important because Windows uses this notation
thus most Windows/MFC programmers use it - Its also common to prefix member variables with
m_ so that its obvious whether a variable is a
member of a class.
9Hungarian Notation Pop Quiz
- What is nCount?
- What is pnCount
- What is bQuit
- Whats the difference? m_bQuit vs bQuit
-
10Hungarian Notation Pop Quiz
- What is nCount?
- Integer int Count
- What is pnCount
- Integer pointer int Count
- What is bQuit
- Boolean BOOL Quit
- Whats the difference? m_bQuit vs bQuit
- bQuit is local, m_bQuit is a member of a Class
11Out With The Old
12In With The New!
- New Hello World! Win32 API
- int MessageBoxA(
- HWND hWnd,
- LPCSTR lpText,
- LPCSTR lpCaption,
- UINT uType)
13In With The New!
- New Hello World! MFC API (Global)
- int AfxMessageBoxA(
- LPCTSTR lpszText,
- UINT nType MB_OK,
- UINT nIDHelp 0)
14In With The New!
- New Hello World! MFC API
- int MessageBoxA(
- LPCTSTR lpszText,
- LPCTSTR lpszCaption 0,
- UINT nType 0)
- MessageBoxA(Hello World!)
15A New Way (Win32 API)
16In With The New (MFC API)
17The WindowsProgrammingModel
- Not Procedural
- Event-Driven
- Processes messages sent by the operating system
18The WindowsProgrammingModel
- Not Procedural
- Event-Driven
- Processes messages sent by the operating system
19The WindowsProgrammingModel
- Not Procedural
- Event-Driven
- Processes messages sent by the operating system
20The WindowsProgrammingModel
- Not Procedural
- Event-Driven
- Processes messages sent by the operating system
21The WindowsProgrammingModel
- Not Procedural
- Event-Driven
- Processes messages sent by the operating system
22The WindowsProgrammingModel
- Not Procedural
- Event-Driven
- Processes messages sent by the operating system
23The WindowsProgrammingModel
- Not Procedural
- Event-Driven
- Processes messages sent by the operating system
24The WindowsProgrammingModel
- Not Procedural
- Event-Driven
- Processes messages sent by the operating system
25Messages, Messages, Messages
26Console vs. Windows Application
- Console applications entry point
- int main(void)
- Windows applications entry point
- int WINAPI WinMain(
- HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpszCmdLine,
- int nCmdShow)
- int main(int argc, char argv)
27No More Faking
- To this point weve used int main()
- Weve used the Win32/MFC APIs to display a
message box but we have not created a Window
nor a Windows application - Win32 App / Win32 Source
- MFC App / MFC Source
28Windows API or MFC API?
- Essentially equivalent in functionality
- Generally, MFC will allow the programmer to do
the same tasks more easily - MFC is an OO wrapper of Win32 API
- Maybe neither Win32 and MFC are being replaced
by newer frameworks (e.g. .NET) - Still lots of Win32/MFC application around, use
MFC if possible.
29Now What Can I Do?
- Make a Windows program
- Take simple programs, like your early CS
assignments and make it into a Windows app - This looks hard/complicated, why bother?
- Cant I just use Visual Basic or use GUI tools to
build my application (e.g. Windows Forms, VC) - Yes, but tools limit what you can do by hiding
the details, limiting your understanding
30The Road Less Traveled
- Knowing the more tedious details can have its
advantages and produce some more interesting
results - Want to control a program that you didnt write?
- Want to automate a process with program you
didnt write?
31A more interesting example
32Homework Questions
- What do global MFC function calls begin with
(i.e. what 3 letters)? - Where can you find Win32/MFC API documentation?
- True or False, MFC applications should include
ltwindows.hgt
33Works Cited
- Prosise, Jeff. Programming Windows with MFC
Second Edition. Redmond, Washington Microsoft
Press, 1999 - Microsoft Developer Network http//msdn2.microsof
t.com/en-us/library/default.aspx