您的位置:首页 > 产品设计 > UI/UE

GUI 剖析 之第一个windows程序

2012-11-14 10:31 162 查看
三)、第一个windows程序
现在进入正题,让我们与代码进行交流吧。
代码粘贴:
#include <windows.h>
#include <mmsystem.h> // 加上,不然PlaySound函数无法使用
#pragma comment(lib, "WINMM.LIB") // 加上,不然PlaySound函数无法使用

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.lpfnWndProc = WndProc ;//函数名就是函数的内存地址

wndclass.cbClsExtra = 0 ;

wndclass.cbWndExtra = 0 ;

wndclass.hInstance = hInstance ;//实例

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;//载入图标,你也可以这样定义自己的图标LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;//载入光标,你也可以这样定义自己的光标LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR1));

wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;//定义画刷,这里的WHITE_BRUSH还可以换为BLACK_BRUSH,仅此而已

wndclass.lpszMenuNam = NULL ;//无菜单,你也可以载入菜单MAKEINTRESOURCE(IDC_GDI);

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 ;
//定义一个设备上下文句柄,这个设备上下文句柄其实是内存块的标识,当我们要对某个设备进行操作时,首先都要打开该设备,让后确认在哪个设备上进行何种操作,一般地,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) ;//此API执行退出窗口,也可以用DestroyWindow(hWnd),此API内部调用PostQuitMessage (0)

return 0 ;
}
//缺省的消息处理过程,windows已经在内部做好了
return DefWindowProc (hwnd, message, wParam, lParam) ;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: