gam666 – introduction to game programming you must use special libraries (aka apis – application...

13
GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a text-based program. The C++ choices are: The original Windows SDK (Software Development Kit), a C library MFC (Microsoft Foundation Classes), a sophisticated wrapper around the Windows SDK ATL (Active Template Library), Windows Programming in C++

Upload: phoebe-morton

Post on 29-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a

GAM666 – Introduction To Game Programming

You must use special libraries (aka APIs – application programming interfaces) to make something other than a text-based program. The C++ choices are:●The original Windows SDK (Software Development Kit), a C library●MFC (Microsoft Foundation Classes), a sophisticated wrapper around the Windows SDK●ATL (Active Template Library), a light-duty wrapper around the Windows SDK●.NET, Microsoft's new technology

Windows Programming in C++

Page 2: GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a

GAM666 – Introduction To Game Programming

●Games generally take over the whole screen●Windows SDK is the simplest route to getting to the point where the screen has been taken over●.NET not univerally installed yet●We cover MFC/ATL/.NET in other courses

Why Use the Windows SDK?

Page 3: GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a

GAM666 – Introduction To Game Programming

Basic Windows SDK Concepts

●Write a WinMain(), not a classical main()●#include <windows.h> and probably <windowsx.h>●Often #define WIN32_LEAN_AND_MEAN before those #includes to cut down on further #includes of rarely used header files●Use many #define- and typedef-created data types from those header files (e.g. BOOL, HWND)●Use MS-specific declaration modifiers (e.g. WINAPI, CALLBACK) for functions

Page 4: GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a

GAM666 – Introduction To Game Programming

Basic Windows SDK Concepts

Some Data Types are:●BOOL - a boolean value (TRUE or FALSE)●HWND - “handle” to a window●UINT - unsigned integer (32 bit)●WPARAM - “word” parameter (32 bit, originally 16, for passing an integer value, for example)●LPARAM - “long” parameter (32 bit, for passing an address, for example) ●LRESULT - 32 bit return code from a function●HINSTANCE - “handle” to a running instance of a program

Page 5: GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a

GAM666 – Introduction To Game Programming

Messages●MS Windows uses Messages to communicate with the windows in a program●Every window in a windows program (which includes Controls, which are preprogrammed sub-windows like buttons and list boxes) has a Window Procedure, which is the code to handle any message that may be sent to the window●A window is customized by writing a custom window procedure for it, and supplying that procedure's address to Windows, which will call the procedure when needed.

Page 6: GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a

GAM666 – Introduction To Game Programming

Messages

A window procedure is passed four things:●An HWND, identifying the window for whom the message is intended●A UINT, identifying which message it is●A WPARAM, containing a piece of data●An LPARAM, containing another piece of data (typically a pointer to more data, but not necessarily)

The WPARAM and LPARAM meaning and usage varies between different messages

Page 7: GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a

GAM666 – Introduction To Game Programming

Messages

Messages can come from:

●Windows, based on user interaction or some other operating system activity●Another window (in the same program or another)●The program code itself, using either SendMessage() (waits until message is handled) or PostMessage() (puts the message on a queue but doesn't wait for it to be handled)

Page 8: GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a

GAM666 – Introduction To Game Programming

Messages

●Controls (like buttons) have a window procedure that you don't see●Controls will send a WM_COMMAND message to the parent window when the user interacts with them, its WPARAM identifies the control and the operation●Macros LOWORD() and HIWORD() can extract the low- and high-order 16 bits of a WPARAM or LPARAM (or you can do the bit manipulation operations yourself)

Page 9: GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a

GAM666 – Introduction To Game Programming

Dialogs

●A Dialog is a pop-up window that typically contains a bunch of controls●A dialog can be laid out using a resource file (extension .rc) to describe the controls, rather than creating the controls from within the C++ code●A header file is typically used to interlink the C++ code with the resource code by using symbolic names for IDs, since both languages understand the #define and #include syntax

Page 10: GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a

GAM666 – Introduction To Game Programming

Dialogs

●A dialog is supplied the address of a Dialog Procedure, which is a window procedure specifically designed to handle a dialog (return value is BOOL rather than LRESULT)●Can get the HWND of a control on a dialog using GetDlgItem()●Can send a message to a control on a dialog using SendDlgItemMessage() or PostDlgItemMessage() [alternative to calling GetDlgItem() then Send/PostMessage()]

Page 11: GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a

GAM666 – Introduction To Game Programming

Dialogs

●WM_INITDIALOG is the ID of the message sent to a dialog just after it is first created, giving you a chance to initialize its controls and do other one-time setup●WM_COMMAND is the ID of the message sent to a window when (among other things) one of its controls (ID in low order 16 bits of WPARAM) has something to pass along●IDCANCEL is a predefined control ID that corresponds to a user request to close the window

Page 12: GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a

GAM666 – Introduction To Game Programming

Dialogs

●Each kind of control has different messages that can be sent to it●E.g. CB_GETCURSEL is the ID of the message you send to a ComboBox to get the index of the item in the combobox that is currently selected●E.g. LB_ADDSTRING is the ID of the message you send to a ListBox to add another string (passed in the LPARAM) to the listbox

Page 13: GAM666 – Introduction To Game Programming You must use special libraries (aka APIs – application programming interfaces) to make something other than a

GAM666 – Introduction To Game Programming

Dialogs

●Dialogs can be modal (application waits until dialog has been completed) or not (dialog and other application windows can be used at the same time)●Modal dialogs can be created by calling DialogBox()●Modal dialogs should be terminated by calling EndDialog()