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) ;
}
现在进入正题,让我们与代码进行交流吧。
代码粘贴:
#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) ;
}
相关文章推荐
- Eclipse + PyDev + wxPython开发Windows GUI程序
- C/C++_log2000_windows编程之第一个控制台程序项目part2
- 消息队列(1):windows10+eclipse+cygwin编写第一个消息队列程序
- Windows7下JavaEE(jsp开发环境)快速搭建+第一个jsp程序 超详细教程
- Windows Via C/C++ Part Ⅰ Chapter4: 进程—第一个Windows程序(4)
- 编写你的第一个Windows程序
- Windows桌面应用程序(1-2-4-4th) 您的第一个Direct2D程序
- 深入剖析WTL——如何封装Windows界面程序
- 第一个GUI程序:“Hello World”
- 第一个带界面的Windows程序
- Windows程序设计:编写第一个Windows程序Helllo World!
- 第一部分 记事本搞定第一个C#程序和编译过程剖析
- SDL2.0 学习笔记-1 windows下的第一个测试程序
- putty和Xming server 结合完美在windows下显示linux GUI程序
- Windows的第一个程序
- GNUstep Gorm第一个视窗程序,第一个图形界面,第一个helloworld gui(转)
- 使用PyQt来编写第一个Python GUI程序
- Windows下安装QT并运行第一个程序
- Windows下C#的GUI窗口程序中实现调用Google Map的实例
- Sliverlight for Windows Phone 7 开发系列(2): 第一个Sliverlight程序