效果:
代码:
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("HelloMsg") ;
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 ("窗口标题示例"), // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT,// 初始x坐标
CW_USEDEFAULT,// 厨师y坐标
CW_USEDEFAULT,// 初始宽度
CW_USEDEFAULT,// 初始高度
NULL, // 父窗口句柄
NULL, // 窗口句柄
hInstance, // 当前实例
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:
//窗口创建后要执行的代码
return 0 ;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect (hwnd, &rect) ;
DrawText (hdc, TEXT ("这是第一个窗口应用"), -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) ;
}
解释:
Windows API编程,窗体创建的顺序是在WinMain()入口函数中创建窗口类,类中会设定窗口样式、标题、窗口位置、大小等信息。
Windows窗体应用使用消息机制工作,Windows应用程序之间以及操作系统和应用程序之间以消息的形式通信。
需要循环从消息队列中取出消息解析处理,WndProc()函数中使用switch语句对接收到的消息进行分类处理。
这么长的代码,写起来很费事,不好记住,也不用记住,没有人能真正记住此程序的全部写法;通常,Windows程序写作者在开始写一个新程序时总是会复制一个现有的程序,然后再做相应的修改。
奉劝开发人员(尤其是初学者)不要费力气去记忆Windows程序设计中的数值常数。实际上,Windows中使用的每个数值常数在表头文件中均有相应的标识符定义。目前市面上大部分关于Windows编程的书籍资料以及教学资料都没有对这些函数、结构及常数做过说明,导致初学者很难靠买来的书籍入门。