1、chap01/*-HelloMsg.c - Displays “Hello, Windows 98!“ in a message box(c) Charles Petzold, 1998-*/#include int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)MessageBox (NULL, TEXT (“Hello, Windows 98!“), TEXT (“HelloMsg“), 0) ;return 0 ;chap02/*-SCRNSIZE.C -
2、 Displays screen size in a message box(c) Charles Petzold, 1998-*/#include #include #include int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, .)TCHAR szBuffer 1024 ;va_list pArgList ;/ The va_start macro (defined in STDARG.H) is usually equivalent to:/ pArgList = (char *) va_start (p
3、ArgList, szFormat) ;/ The last argument to wvsprintf points to the arguments_vsntprintf (szBuffer, sizeof (szBuffer) / sizeof (TCHAR), szFormat, pArgList) ;/ The va_end macro just zeroes out pArgList for no good reasonva_end (pArgList) ;return MessageBox (NULL, szBuffer, szCaption, 0) ;int WINAPI Wi
4、nMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) int cxScreen, cyScreen ;cxScreen = GetSystemMetrics (SM_CXSCREEN) ;cyScreen = GetSystemMetrics (SM_CYSCREEN) ;MessageBoxPrintf (TEXT (“ScrnSize“), TEXT (“The screen is %i pixels wide by %i pixels high.“),cxScreen, cySc
5、reen) ;return 0 ;chap03/*-HELLOWIN.C - Displays “Hello, Windows 98!“ in client area(c) Charles Petzold, 1998-*/#include LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)static TCHAR szAppName = TEXT (
6、“HelloWin“) ;HWND hwnd ;MSG msg ;WNDCLASS wndclass ;wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc = WndProc ;wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_
7、ARROW) ;wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName = szAppName ;if (!RegisterClass (return 0 ;hwnd = CreateWindow (szAppName, / window class nameTEXT (“The Hello Program“), / window captionWS_OVERLAPPEDWINDOW, / window styleCW
8、_USEDEFAULT, / initial x positionCW_USEDEFAULT, / initial y positionCW_USEDEFAULT, / initial x sizeCW_USEDEFAULT, / initial y sizeNULL, / parent window handleNULL, / window menu handlehInstance, / program instance handleNULL) ; / creation parametersShowWindow (hwnd, iCmdShow) ;UpdateWindow (hwnd) ;w
9、hile (GetMessage (DispatchMessage (return msg.wParam ;LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)HDC hdc ;PAINTSTRUCT ps ;RECT rect ;switch (message)case WM_CREATE:PlaySound (TEXT (“hellowin.wav“), NULL, SND_FILENAME | SND_ASYNC) ;return 0 ;case WM_PAINT:hdc = Be
10、ginPaint (hwnd, GetClientRect (hwnd, DrawText (hdc, TEXT (“Hello, Windows 98!“), -1, EndPaint (hwnd, return 0 ;case WM_DESTROY:PostQuitMessage (0) ;return 0 ;return DefWindowProc (hwnd, message, wParam, lParam) ;chap04-1/*-HELLOWIN.C - Displays “Hello, Windows 98!“ in client area(c) Charles Petzold,
11、 1998-*/#include LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)static TCHAR szAppName = TEXT (“HelloWin“) ;HWND hwnd ;MSG msg ;WNDCLASS wndclass ;wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.
12、lpfnWndProc = WndProc ;wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;wndclass.lpszMenuName = NULL ;w
13、ndclass.lpszClassName = szAppName ;if (!RegisterClass (return 0 ;hwnd = CreateWindow (szAppName, / window class nameTEXT (“The Hello Program“), / window captionWS_OVERLAPPEDWINDOW, / window styleCW_USEDEFAULT, / initial x positionCW_USEDEFAULT, / initial y positionCW_USEDEFAULT, / initial x sizeCW_U
14、SEDEFAULT, / initial y sizeNULL, / parent window handleNULL, / window menu handlehInstance, / program instance handleNULL) ; / creation parametersShowWindow (hwnd, iCmdShow) ;UpdateWindow (hwnd) ;while (GetMessage (DispatchMessage (return msg.wParam ;LRESULT CALLBACK WndProc (HWND hwnd, UINT message
15、, WPARAM wParam, LPARAM lParam)HDC hdc ;PAINTSTRUCT ps ;RECT rect ;switch (message)case WM_CREATE:PlaySound (TEXT (“hellowin.wav“), NULL, SND_FILENAME | SND_ASYNC) ;return 0 ;case WM_PAINT:hdc = BeginPaint (hwnd, GetClientRect (hwnd, DrawText (hdc, TEXT (“Hello, Windows 98!“), -1, EndPaint (hwnd, re
16、turn 0 ;case WM_DESTROY:PostQuitMessage (0) ;return 0 ;return DefWindowProc (hwnd, message, wParam, lParam) ;chap04-1/*-SYSMETS.H - System metrics display structure-*/#define NUMLINES (int) (sizeof sysmetrics / sizeof sysmetrics 0)structint iIndex ;TCHAR * szLabel ;TCHAR * szDesc ;sysmetrics =SM_CXS
17、CREEN, TEXT (“SM_CXSCREEN“), TEXT (“Screen width in pixels“),SM_CYSCREEN, TEXT (“SM_CYSCREEN“), TEXT (“Screen height in pixels“),SM_CXVSCROLL, TEXT (“SM_CXVSCROLL“), TEXT (“Vertical scroll width“),SM_CYHSCROLL, TEXT (“SM_CYHSCROLL“), TEXT (“Horizontal scroll height“),SM_CYCAPTION, TEXT (“SM_CYCAPTIO
18、N“), TEXT (“Caption bar height“),SM_CXBORDER, TEXT (“SM_CXBORDER“), TEXT (“Window border width“),SM_CYBORDER, TEXT (“SM_CYBORDER“), TEXT (“Window border height“),SM_CXFIXEDFRAME, TEXT (“SM_CXFIXEDFRAME“), TEXT (“Dialog window frame width“),SM_CYFIXEDFRAME, TEXT (“SM_CYFIXEDFRAME“), TEXT (“Dialog win
19、dow frame height“),SM_CYVTHUMB, TEXT (“SM_CYVTHUMB“), TEXT (“Vertical scroll thumb height“),SM_CXHTHUMB, TEXT (“SM_CXHTHUMB“), TEXT (“Horizontal scroll thumb width“),SM_CXICON, TEXT (“SM_CXICON“), TEXT (“Icon width“),SM_CYICON, TEXT (“SM_CYICON“), TEXT (“Icon height“),SM_CXCURSOR, TEXT (“SM_CXCURSOR
20、“), TEXT (“Cursor width“),SM_CYCURSOR, TEXT (“SM_CYCURSOR“), TEXT (“Cursor height“),SM_CYMENU, TEXT (“SM_CYMENU“), TEXT (“Menu bar height“),SM_CXFULLSCREEN, TEXT (“SM_CXFULLSCREEN“), TEXT (“Full screen client area width“),SM_CYFULLSCREEN, TEXT (“SM_CYFULLSCREEN“), TEXT (“Full screen client area heig
21、ht“),SM_CYKANJIWINDOW, TEXT (“SM_CYKANJIWINDOW“), TEXT (“Kanji window height“),SM_MOUSEPRESENT, TEXT (“SM_MOUSEPRESENT“), TEXT (“Mouse present flag“),SM_CYVSCROLL, TEXT (“SM_CYVSCROLL“), TEXT (“Vertical scroll arrow height“),SM_CXHSCROLL, TEXT (“SM_CXHSCROLL“), TEXT (“Horizontal scroll arrow width“)
22、,SM_DEBUG, TEXT (“SM_DEBUG“), TEXT (“Debug version flag“),SM_SWAPBUTTON, TEXT (“SM_SWAPBUTTON“), TEXT (“Mouse buttons swapped flag“),SM_CXMIN, TEXT (“SM_CXMIN“), TEXT (“Minimum window width“),SM_CYMIN, TEXT (“SM_CYMIN“), TEXT (“Minimum window height“),SM_CXSIZE, TEXT (“SM_CXSIZE“), TEXT (“Min/Max/Cl
23、ose button width“),SM_CYSIZE, TEXT (“SM_CYSIZE“), TEXT (“Min/Max/Close button height“),SM_CXSIZEFRAME, TEXT (“SM_CXSIZEFRAME“), TEXT (“Window sizing frame width“),SM_CYSIZEFRAME, TEXT (“SM_CYSIZEFRAME“), TEXT (“Window sizing frame height“),SM_CXMINTRACK, TEXT (“SM_CXMINTRACK“), TEXT (“Minimum window
24、 tracking width“),SM_CYMINTRACK, TEXT (“SM_CYMINTRACK“), TEXT (“Minimum window tracking height“),SM_CXDOUBLECLK, TEXT (“SM_CXDOUBLECLK“), TEXT (“Double click x tolerance“),SM_CYDOUBLECLK, TEXT (“SM_CYDOUBLECLK“), TEXT (“Double click y tolerance“),SM_CXICONSPACING, TEXT (“SM_CXICONSPACING“), TEXT (“H
25、orizontal icon spacing“),SM_CYICONSPACING, TEXT (“SM_CYICONSPACING“), TEXT (“Vertical icon spacing“),SM_MENUDROPALIGNMENT, TEXT (“SM_MENUDROPALIGNMENT“), TEXT (“Left or right menu drop“),SM_PENWINDOWS, TEXT (“SM_PENWINDOWS“), TEXT (“Pen extensions installed“),SM_DBCSENABLED, TEXT (“SM_DBCSENABLED“),
26、 TEXT (“Double-Byte Char Set enabled“),SM_CMOUSEBUTTONS, TEXT (“SM_CMOUSEBUTTONS“), TEXT (“Number of mouse buttons“),SM_SECURE, TEXT (“SM_SECURE“), TEXT (“Security present flag“),SM_CXEDGE, TEXT (“SM_CXEDGE“), TEXT (“3-D border width“),SM_CYEDGE, TEXT (“SM_CYEDGE“), TEXT (“3-D border height“),SM_CXM
27、INSPACING, TEXT (“SM_CXMINSPACING“), TEXT (“Minimized window spacing width“),SM_CYMINSPACING, TEXT (“SM_CYMINSPACING“), TEXT (“Minimized window spacing height“),SM_CXSMICON, TEXT (“SM_CXSMICON“), TEXT (“Small icon width“),SM_CYSMICON, TEXT (“SM_CYSMICON“), TEXT (“Small icon height“),SM_CYSMCAPTION,
28、TEXT (“SM_CYSMCAPTION“), TEXT (“Small caption height“),SM_CXSMSIZE, TEXT (“SM_CXSMSIZE“), TEXT (“Small caption button width“),SM_CYSMSIZE, TEXT (“SM_CYSMSIZE“), TEXT (“Small caption button height“),SM_CXMENUSIZE, TEXT (“SM_CXMENUSIZE“), TEXT (“Menu bar button width“),SM_CYMENUSIZE, TEXT (“SM_CYMENUS
29、IZE“), TEXT (“Menu bar button height“),SM_ARRANGE, TEXT (“SM_ARRANGE“), TEXT (“How minimized windows arranged“),SM_CXMINIMIZED, TEXT (“SM_CXMINIMIZED“), TEXT (“Minimized window width“),SM_CYMINIMIZED, TEXT (“SM_CYMINIMIZED“), TEXT (“Minimized window height“),SM_CXMAXTRACK, TEXT (“SM_CXMAXTRACK“), TE
30、XT (“Maximum draggable width“),SM_CYMAXTRACK, TEXT (“SM_CYMAXTRACK“), TEXT (“Maximum draggable height“),SM_CXMAXIMIZED, TEXT (“SM_CXMAXIMIZED“), TEXT (“Width of maximized window“),SM_CYMAXIMIZED, TEXT (“SM_CYMAXIMIZED“), TEXT (“Height of maximized window“),SM_NETWORK, TEXT (“SM_NETWORK“), TEXT (“Net
31、work present flag“),SM_CLEANBOOT, TEXT (“SM_CLEANBOOT“), TEXT (“How system was booted“),SM_CXDRAG, TEXT (“SM_CXDRAG“), TEXT (“Avoid drag x tolerance“),SM_CYDRAG, TEXT (“SM_CYDRAG“), TEXT (“Avoid drag y tolerance“),SM_SHOWSOUNDS, TEXT (“SM_SHOWSOUNDS“), TEXT (“Present sounds visually“),SM_CXMENUCHECK
32、, TEXT (“SM_CXMENUCHECK“), TEXT (“Menu check-mark width“),SM_CYMENUCHECK, TEXT (“SM_CYMENUCHECK“), TEXT (“Menu check-mark height“),SM_SLOWMACHINE, TEXT (“SM_SLOWMACHINE“), TEXT (“Slow processor flag“),SM_MIDEASTENABLED, TEXT (“SM_MIDEASTENABLED“), TEXT (“Hebrew and Arabic enabled flag“),SM_MOUSEWHEE
33、LPRESENT, TEXT (“SM_MOUSEWHEELPRESENT“), TEXT (“Mouse wheel present flag“),SM_XVIRTUALSCREEN, TEXT (“SM_XVIRTUALSCREEN“), TEXT (“Virtual screen x origin“),SM_YVIRTUALSCREEN, TEXT (“SM_YVIRTUALSCREEN“), TEXT (“Virtual screen y origin“),SM_CXVIRTUALSCREEN, TEXT (“SM_CXVIRTUALSCREEN“), TEXT (“Virtual s
34、creen width“),SM_CYVIRTUALSCREEN, TEXT (“SM_CYVIRTUALSCREEN“), TEXT (“Virtual screen height“),SM_CMONITORS, TEXT (“SM_CMONITORS“), TEXT (“Number of monitors“),SM_SAMEDISPLAYFORMAT, TEXT (“SM_SAMEDISPLAYFORMAT“), TEXT (“Same color format flag“) ;chap04-2/*-SYSMETS.H - System metrics display structure
35、-*/#define NUMLINES (int) (sizeof sysmetrics / sizeof sysmetrics 0)structint iIndex ;TCHAR * szLabel ;TCHAR * szDesc ;sysmetrics =SM_CXSCREEN, TEXT (“SM_CXSCREEN“), TEXT (“Screen width in pixels“),SM_CYSCREEN, TEXT (“SM_CYSCREEN“), TEXT (“Screen height in pixels“),SM_CXVSCROLL, TEXT (“SM_CXVSCROLL“)
36、, TEXT (“Vertical scroll width“),SM_CYHSCROLL, TEXT (“SM_CYHSCROLL“), TEXT (“Horizontal scroll height“),SM_CYCAPTION, TEXT (“SM_CYCAPTION“), TEXT (“Caption bar height“),SM_CXBORDER, TEXT (“SM_CXBORDER“), TEXT (“Window border width“),SM_CYBORDER, TEXT (“SM_CYBORDER“), TEXT (“Window border height“),SM
37、_CXFIXEDFRAME, TEXT (“SM_CXFIXEDFRAME“), TEXT (“Dialog window frame width“),SM_CYFIXEDFRAME, TEXT (“SM_CYFIXEDFRAME“), TEXT (“Dialog window frame height“),SM_CYVTHUMB, TEXT (“SM_CYVTHUMB“), TEXT (“Vertical scroll thumb height“),SM_CXHTHUMB, TEXT (“SM_CXHTHUMB“), TEXT (“Horizontal scroll thumb width“
38、),SM_CXICON, TEXT (“SM_CXICON“), TEXT (“Icon width“),SM_CYICON, TEXT (“SM_CYICON“), TEXT (“Icon height“),SM_CXCURSOR, TEXT (“SM_CXCURSOR“), TEXT (“Cursor width“),SM_CYCURSOR, TEXT (“SM_CYCURSOR“), TEXT (“Cursor height“),SM_CYMENU, TEXT (“SM_CYMENU“), TEXT (“Menu bar height“),SM_CXFULLSCREEN, TEXT (“
39、SM_CXFULLSCREEN“), TEXT (“Full screen client area width“),SM_CYFULLSCREEN, TEXT (“SM_CYFULLSCREEN“), TEXT (“Full screen client area height“),SM_CYKANJIWINDOW, TEXT (“SM_CYKANJIWINDOW“), TEXT (“Kanji window height“),SM_MOUSEPRESENT, TEXT (“SM_MOUSEPRESENT“), TEXT (“Mouse present flag“),SM_CYVSCROLL,
40、TEXT (“SM_CYVSCROLL“), TEXT (“Vertical scroll arrow height“),SM_CXHSCROLL, TEXT (“SM_CXHSCROLL“), TEXT (“Horizontal scroll arrow width“),SM_DEBUG, TEXT (“SM_DEBUG“), TEXT (“Debug version flag“),SM_SWAPBUTTON, TEXT (“SM_SWAPBUTTON“), TEXT (“Mouse buttons swapped flag“),SM_CXMIN, TEXT (“SM_CXMIN“), TE
41、XT (“Minimum window width“),SM_CYMIN, TEXT (“SM_CYMIN“), TEXT (“Minimum window height“),SM_CXSIZE, TEXT (“SM_CXSIZE“), TEXT (“Min/Max/Close button width“),SM_CYSIZE, TEXT (“SM_CYSIZE“), TEXT (“Min/Max/Close button height“),SM_CXSIZEFRAME, TEXT (“SM_CXSIZEFRAME“), TEXT (“Window sizing frame width“),S
42、M_CYSIZEFRAME, TEXT (“SM_CYSIZEFRAME“), TEXT (“Window sizing frame height“),SM_CXMINTRACK, TEXT (“SM_CXMINTRACK“), TEXT (“Minimum window tracking width“),SM_CYMINTRACK, TEXT (“SM_CYMINTRACK“), TEXT (“Minimum window tracking height“),SM_CXDOUBLECLK, TEXT (“SM_CXDOUBLECLK“), TEXT (“Double click x tolerance“),SM_CYDOUBLECLK, TEXT (“SM_CYDOUBLECLK“), TEXT (“Double click y tolerance“),SM_CXICONSPACING, TEXT (“SM_CXICONSPACING“), TEXT (“Horizontal icon spacing“),SM_CYICONSPACING, TEXT (“SM_CYICONSPACING“), TEXT (“Vertical icon spacing“),SM_MENUDROPALIGNMENT, TEXT (“SM_MENUDROPALIGNMENT“)