380 likes | 976 Views
Windows Programming: Win32 / MFC. James Adkison 04/17/2008. Presentation Goals. How to create a basic Windows App Hungarian Notation How to use the Win32 / MFC APIs Windows Programming Model Messages Examples. Windows Programming. Where do I start? Use the Windows API (Win32 API)
E N D
Windows Programming:Win32 / MFC James Adkison 04/17/2008
Presentation Goals • How to create a basic Windows App • Hungarian Notation • How to use the Win32 / MFC APIs • Windows Programming Model • Messages • Examples
Windows Programming • Where do I start? • Use the Windows API (Win32 API) • How do I use it? • #include <windows.h> • What about documentation? • Google: msdn win32 api
http://msdn2.microsoft.com/en-us/library/aa383749(VS.85).aspxhttp://msdn2.microsoft.com/en-us/library/aa383749(VS.85).aspx
What 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 <afxwin.h> • Do NOT #include <windows.h> afxwin.h already includes it
http://msdn2.microsoft.com/en-us/library/d06h2x6e(VS.80).aspxhttp://msdn2.microsoft.com/en-us/library/d06h2x6e(VS.80).aspx
I Don’t Speak Hungarian! • Hungarian Notation / Windows Data Types • What is it? • A variable naming convention • Examples • h: handle • n: integer • b: boolean • p: pointer
Hungarian Notation Continued... • It’s important because Windows uses this notation thus most Windows/MFC programmers use it • “It’s also common to prefix member variables with m_ so that it’s obvious whether a variable is a member of a class.”
Hungarian Notation Pop Quiz • What is: nCount? • What is: pnCount • What is: bQuit • What’s the difference? m_bQuit vs bQuit
Hungarian Notation Pop Quiz • What is: nCount? • Integer: int Count • What is: pnCount • Integer pointer: int* Count • What is: bQuit • Boolean: BOOL Quit • What’s the difference? m_bQuit vs bQuit • bQuit is local, m_bQuit is a member of a Class
In With The New! • New “Hello World!” – Win32 API int MessageBoxA( HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
In With The New! • New “Hello World!” – MFC API (Global) intAfxMessageBoxA( LPCTSTR lpszText, UINTnType = MB_OK, UINT nIDHelp = 0);
In With The New! • New “Hello World!” – MFC API int MessageBoxA( LPCTSTR lpszText, LPCTSTR lpszCaption = 0, UINT nType = 0); MessageBoxA(“Hello World!”);
The WindowsProgrammingModel • Not Procedural • Event-Driven • Processes messages sent by the operating system
The WindowsProgrammingModel • Not Procedural • Event-Driven • Processes messages sent by the operating system
The WindowsProgrammingModel • Not Procedural • Event-Driven • Processes messages sent by the operating system
The WindowsProgrammingModel • Not Procedural • Event-Driven • Processes messages sent by the operating system
The WindowsProgrammingModel • Not Procedural • Event-Driven • Processes messages sent by the operating system
The WindowsProgrammingModel • Not Procedural • Event-Driven • Processes messages sent by the operating system
The WindowsProgrammingModel • Not Procedural • Event-Driven • Processes messages sent by the operating system
The WindowsProgrammingModel • Not Procedural • Event-Driven • Processes messages sent by the operating system
Console vs. Windows Application • Console application’s entry point int main(void) • Windows application’s entry point int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) • int main(int argc, char **argv)
No More Faking • To this point we’ve used int main() • We’ve 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
Windows 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.
Now 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? • Can’t 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
The 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 didn’t write? • Want to automate a process with program you didn’t write?
A more interesting example… • Final Example
Homework 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 <windows.h>
Works Cited • Prosise, Jeff. Programming Windows with MFC Second Edition. Redmond, Washington: Microsoft Press, 1999 • Microsoft Developer Network: http://msdn2.microsoft.com/en-us/library/default.aspx