赞
踩
Windows编程框架
- #include <windows.h>
- #include <windowsx.h>
-
- //函数声明
-
- BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );
-
- LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );
-
- //*******************************************************************
-
- //函数:WinMain()
-
- //功能:Win32应用程序入口函数。创建主窗口,处理消息循环
-
- //*******************************************************************
-
- int PASCAL WinMain( HINSTANCE hInstance, //当前实例句柄
-
- HINSTANCE hPrevInstance, //前一个实例句柄
-
- LPSTR lpCmdLine, //命令行字符
-
- int nCmdShow) //窗口显示方式
-
- {
-
- MSG msg;
-
- //创建主窗口
-
- if ( !InitWindow( hInstance, nCmdShow ) )
-
- return FALSE;
-
- //进入消息循环:
-
- //从该应用程序的消息队列中检取消息,送到消息处理过程,
-
- //当检取到WM_QUIT消息时,退出消息循环。
-
- while (GetMessage(&msg, NULL, 0, 0))
-
- {
-
- TranslateMessage(&msg);
-
- DispatchMessage(&msg);
-
- }
-
- //程序结束
-
- return msg.wParam;
-
- }
-
- //******************************************************************
-
- //函数:InitWindow()
-
- //功能:创建窗口。
-
- //******************************************************************
-
- static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )
-
- {
-
- HWND hwnd; //窗口句柄
-
- WNDCLASS wc; //窗口类结构
-
- //填充窗口类结构
-
- wc.style = CS_VREDRAW | CS_HREDRAW;
-
- wc.lpfnWndProc = (WNDPROC)WinProc;
-
- wc.cbClsExtra = 0;
-
- wc.cbWndExtra = 0;
-
- wc.hInstance = hInstance;
-
- wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );
-
- wc.hCursor = LoadCursor( NULL, IDC_ARROW );
-
- wc.hbrBackground = HBRUSH(GetStockObject(WHITE_BRUSH));
-
- wc.lpszMenuName = NULL;
-
- wc.lpszClassName = "EasyWin";
-
- //注册窗口类
-
- RegisterClass( &wc );
-
- //创建主窗口
-
- hwnd = CreateWindow(
-
- "EasyWin", //窗口类名称
-
- "一个基本的Win32程序", //窗口标题
-
- WS_OVERLAPPEDWINDOW, //窗口风格,定义为普通型
-
- 200, //窗口位置的x坐标
-
- 150, //窗口位置的y坐标
-
- 800, //窗口的宽度
-
- 600, //窗口的高度
-
- NULL, //父窗口句柄
-
- NULL, //菜单句柄
-
- hInstance, //应用程序实例句柄
-
- NULL ); //窗口创建数据指针
-
- if( !hwnd ) return FALSE;
-
- //显示并更新窗口
-
- ShowWindow( hwnd, nCmdShow );
-
- UpdateWindow( hwnd );
-
- return TRUE;
- }
-
- //******************************************************************
-
- //函数:WinProc()
-
- //功能:处理主窗口消息
-
- //******************************************************************
-
- LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
-
- {
-
- switch( message )
-
- {
-
- case WM_KEYDOWN://击键消息
-
- switch( wParam )
-
- {
-
- case VK_ESCAPE:
-
- MessageBox(hWnd,"ESC键按下了!","Keyboard",MB_OK);
-
- break;
-
- }
-
- break;
-
- case WM_RBUTTONDOWN://鼠标消息
-
- {
-
- MessageBox(hWnd,"鼠标右键按下了!","Mouse",MB_OK);
-
- break;
-
- }
-
- case WM_PAINT://窗口重画消息
-
- {
-
- char hello[]="你好,我是EasyWin !";
-
- HDC hdc;
-
- PAINTSTRUCT ps;
-
- hdc=BeginPaint( hWnd,&ps ); //取得设备环境句柄
-
- SetTextColor(hdc, 0xff0000ff); //设置文字颜色
-
- TextOut( hdc, 20, 10, hello, strlen(hello) );//输出文字
-
- EndPaint( hWnd, &ps ); //释放资源
-
- break;
-
- }
-
- case WM_DESTROY://退出消息
-
- PostQuitMessage( 0 );//调用退出函数
-
- break;
-
- }
-
- //调用缺省消息处理过程
-
- return DefWindowProc(hWnd, message, wParam, lParam);
-
- }
WinMain()函数
WinMain()函数是应用程序开始执行时的入口点,通常也是应用程序结束任务退出时的出口点。它与DOS程序的main()函数起同样的作用,有一点不同的是,WinMain()函数必须带有四个参数,它们是系统传递给它的。WinMain()函数的原型如下:
int PASCAL WinMain( HINSTANCE hInstance, //当前实例句柄 HINSTANCE hPrevInstance, //前一个实例句柄 LPSTR lpCmdLine, //命令行字符 int nCmdShow) //窗口显示方式 |
typedef struct _WNDCLASS { UINT style; //窗口的风格* WNDPROC lpfnWndProc; //指定窗口的消息处理函数的远指针* int cbClsExtra; //指定分配给窗口类结构之后的额外字节数* int cbWndExtra; //指定分配给窗口实例之后的额外字节数 HANDLE hInstance; //指定窗口过程所对应的实例句柄* HICON hIcon; //指定窗口的图标 HCURSOR hCursor; //指定窗口的鼠标 HBRUSH hbrBackground; //指定窗口的背景画刷 LPCTSTR lpszMenuName; //窗口的菜单资源名称 LPCTSTR lpszClassName; //该窗口类的名称* } WNDCLASS; |
typedef struct _WNDCLASSEX { UINT cbSize; //指定WNDCLASSEX结构的大小 UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; HICON hIconSm; //窗口的小图标 } WNDCLASSEX; |
风格 | 含义 |
CS_HREDRAW | 如果窗口客户区宽度发生改变,重绘整个窗口 |
CS_VREDRAW | 如果窗口客户区高度发生改变,重绘整个窗口 |
CS_DBLCLKS | 能感受用户在窗口中的双击消息 |
CS_NOCLOSE | 禁用系统菜单中的“关闭”命令 |
CS_OWNDC | 为该窗口类的各窗口分配各自独立的设备环境 |
CS_CLASSDC | 为该窗口类的各窗口分配一个共享的设备环境 |
CS_PARENTDC | 指定子窗口继承其父窗口的设备环境 |
CS_SAVEBITS | 把被窗口遮掩的屏幕图象部分作为位图保存起来。当该窗口被移动时,Windows使用被保存的位图来重建屏幕图象 |
wc.style = CS_VREDRAW | CS_HREDRAW; wc.lpfnWndProc = (WNDPROC)WinProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = "EasyWin"; |
ATOM RegisterClass( CONST WNDCLASS *lpWndClass ); ATOM RegisterClassEx( CONST WNDCLASSEX *lpwcx ); |
hwnd = CreateWindow( "EasyWin", //创建窗口所用的窗口类的名称* "一个基本的Win32程序", //窗口标题 WS_OVERLAPPEDWINDOW, //窗口风格,定义为普通型* 100, //窗口位置的x坐标 100, //窗口位置的y坐标 400, //窗口的宽度 300, //窗口的高度 NULL, //父窗口句柄 NULL, //菜单句柄 hInstance, //应用程序实例句柄* NULL ); //一般都为NULL |
风格 | 含义 |
WS_OVERLAPPEDWINDOW | 创建一个层叠式窗口,有边框、标题栏、系统菜单、最大最小化按钮,是以下几种风格的集合:WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX, WS_MAXIMIZEBOX |
WS_POPUPWINDOW | 创建一个弹出式窗口,是以下几种风格的集合: WS_BORDER,WS_POPUP,WS_SYSMENU。WS_CAPTION与WS_POPUPWINDOW风格必须一起使用才能使窗口菜单可见 |
WS_OVERLAPPED | 创建一个层叠式窗口,它有标题栏和边框,与WS_TILED风格一样 |
WS_POPUP | 该窗口为弹出式窗口,不能与WS_CHILD同时使用 |
WS_BORDER | 窗口有单线边框 |
WS_CAPTION | 窗口有标题栏 |
WS_CHILD | 该窗口为子窗口,不能与WS_POPUP同时使用 |
WS_DISABLED | 该窗口为无效,即对用户操作不产生任何反应 |
WS_HSCROLL | 窗口有水平滚动条 |
WS_ICONIC | 窗口初始化为最小化 |
WS_MAXIMIZE | 窗口初始化为最大化 |
WS_MAXIMIZEBOX | 窗口有最大化按钮 |
WS_MINIMIZE | 与WS_MAXIMIZE一样 |
WS_MINIMIZEBOX | 窗口有最小化按钮 |
WS_SIZEBOX | 边框可进行大小控制的窗口 |
WS_SYSMENU | 创建一个有系统菜单的窗口,必须与WS_CAPTION风格同时使用 |
WS_THICKFRAME | 创建一个大小可控制的窗口,与WS_SIZEBOX 风格一样. |
WS_TILED | 创建一个层叠式窗口,有标题栏 |
WS_VISIBLE | 窗口为可见 |
WS_VSCROLL | 窗口有垂直滚动条 |
BOOL ShowWindow( HWND hWnd, int nCmdShow ); |
BOOL UpdateWindow( HWND hWnd ); |
while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } |
BOOL GetMessage( LPMSG lpMsg, //指向一个MSG结构的指针,用来保存消息 HWND hWnd, //指定哪个窗口的消息将被获取 UINT wMsgFilterMin, //指定获取的主消息值的最小值 UINT wMsgFilterMax //指定获取的主消息值的最大值 ); |
typedef struct tagMSG { HWND hwnd; //接收消息的窗口句柄 UINT message; //主消息值 WPARAM wParam; //副消息值,其具体含义依赖于主消息值 LPARAM lParam; //副消息值,其具体含义依赖于主消息值 DWORD time; //消息被投递的时间 POINT pt; //鼠标的位置 } MSG; |
LRESULT CALLBACK WindowProc( HWND hwnd, //接收消息窗口的句柄 UINT uMsg, //主消息值 WPARAM wParam, //副消息值 LPARAM lParam //副消息值 ); |
调用PostQuitMessage()函数以结束消息循环
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。