/*------------------------------------------------------------------------
HELLOWIN.C -- Displays "Hello, Windows 98!" in client area
(c) Charles Petzold, 1998
-----------------------------------------------------------------------*/
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM , LPARAM) ;
//Defoe.Tu tyysoft@yahoo.com.cn Windows 程序设计 PDF 美化版
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.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 ;
wndclass.lpszClassName = szAppName ;
if (! RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("This program requires Windows NT!" ),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow( szAppName, // window class name
TEXT ("The Hello Program"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT ,// initial x position
CW_USEDEFAULT ,// initial y position
CW_USEDEFAULT ,// initial x size
CW_USEDEFAULT ,// initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow ) ;
UpdateWindow (hwnd) ;
while (GetMessage (& msg , NULL, 0, 0))
{
TranslateMessage (& msg ) ;
DispatchMessage (& msg ) ;
}
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 = BeginPaint (hwnd, & ps) ;
GetClientRect (hwnd, & rect) ;
DrawText (hdc , TEXT ("Hello, Windows 98!" ), -1, & rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER ) ;
EndPaint (hwnd, & ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam , lParam ) ;
//Defoe.Tu tyysoft@yahoo.com.cn Windows 程序设计 PDF 美化版
HELLOWIN.C -- Displays "Hello, Windows 98!" in client area
(c) Charles Petzold, 1998
-----------------------------------------------------------------------*/
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM , LPARAM) ;
//Defoe.Tu tyysoft@yahoo.com.cn Windows 程序设计 PDF 美化版
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.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 ;
wndclass.lpszClassName = szAppName ;
if (! RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("This program requires Windows NT!" ),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow( szAppName, // window class name
TEXT ("The Hello Program"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT ,// initial x position
CW_USEDEFAULT ,// initial y position
CW_USEDEFAULT ,// initial x size
CW_USEDEFAULT ,// initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow ) ;
UpdateWindow (hwnd) ;
while (GetMessage (& msg , NULL, 0, 0))
{
TranslateMessage (& msg ) ;
DispatchMessage (& msg ) ;
}
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 = BeginPaint (hwnd, & ps) ;
GetClientRect (hwnd, & rect) ;
DrawText (hdc , TEXT ("Hello, Windows 98!" ), -1, & rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER ) ;
EndPaint (hwnd, & ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam , lParam ) ;
//Defoe.Tu tyysoft@yahoo.com.cn Windows 程序设计 PDF 美化版
}
HELLOWIN至少呼叫了18个Windows函数。下面以它们在HELLOWIN中出现的次序列出这些函
数以及各自的简明描述:
LoadIcon 加载图标供程序使用。
LoadCursor 加载鼠标光标供程序使用。
GetStockObject 取得一个图形对象(在这个例子中,是取得绘制窗口背景的画刷对象)。
RegisterClass 为程序窗口注册窗口类别。
MessageBox 显示消息框。
CreateWindow 根据窗口类别建立一个窗口。
ShowWindow 在屏幕上显示窗口。
UpdateWindow 指示窗口自我更新。
GetMessage 从消息队列中取得消息。
TranslateMessage 转译某些键盘消息。
DispatchMessage 将消息发送给窗口消息处理程序。
PlaySound 播放一个声音文件。
BeginPaint 开始绘制窗口。
GetClientRect 取得窗口显示区域的大小。
DrawText 显示字符串。
EndPaint 结束绘制窗口。
PostQuitMessage 在消息队列中插入一个「退出程序」消息。
DefWindowProc 执行内定的消息处理。