Windows02.写一个窗口
来源:互联网 发布:数据分析ppt图片 编辑:程序博客网 时间:2024/05/16 00:56
大致流程:
1. 写WinMain函数,即入口函数。
2. 创建一个窗口类,创建窗口,设置刷新等等。
3. 进行消息循环。
4. 编写窗口过程函数。
先看看WinMain函数:
int WINAPI WinMain( HINSTANCE hInstance, // 当前实例句柄 HINSTANCE hPrevInstance, // 前一个实例句柄 LPSTR lpCmdLine, // 命令行参数 int nCmdShow // 如何显示 )
再看看怎么创建窗口:
说在前面:关于样式之类的请查看MSDN或者百度。
1. 设计窗口类:
typedef struct _WNDCLASS { UINT style;// 窗口样式 WNDPROC lpfnWndProc;//函数指针,指向窗口处理函数 int cbClsExtra;//附加内存,一般为0 int cbWndExtra;//窗口附加内存,一般也为0 HINSTANCE hInstance;//实例句柄 HICON hIcon;//窗口的图标句柄 HCURSOR hCursor;//窗口鼠标光标 HBRUSH hbrBackground;//窗口背景色 LPCTSTR lpszMenuName;//窗口菜单名 LPCTSTR lpszClassName;// 窗口类名} WNDCLASS, *LPWNDCLASS;
2.注册窗口类
RegisterClass(&窗口类);//注册窗口类
3.创建窗口
HWND CreateWindow( LPCTSTR lpClassName,//类名 LPCTSTR lpWindowName,//窗口名 DWORD dwStyle,//样式 int x,//初始x坐标 int y,//初始y坐标 int nWidth,//窗口宽度 int nHeight,//窗口高度 HWND hWndParent,//父窗口句柄 HMENU hMenu,//菜单句柄 HANDLE hlnstance,//实例句柄 LPVOID lpParam//数据指针,指向CLIENTCREATESTRUCT结构体,一般指向NULL );
4.显示和刷新窗口
ShowWindow(hwnd,SW_SHOWNORMAL);//激活并显示UpdateWindow(hwnd);
进入消息循环:
MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
也就是第一章说的那个卖冰淇淋的,不断接受消息,查看对应事件,并处理,处理的过程在窗口过程函数。
编写窗口处理函数:
其实就是个回调函数,当消息进来的时候,判断属于哪个消息,然后进行对应操作。
LRESULT CALLBACK WinSunProc( HWND hwnd, //句柄 UINT uMsg, //消息 WPARAM wParam, //附加参数1 LPARAM lParam //附加参数2 ){ switch(uMsg) { case WM_CHAR: char szChar[200]; sprintf(szChar,"char is %d",wParam); MessageBox(hwnd,szChar,"HappyTeemo",0); break; case XXX: ........ } return 0;}
下面是整体代码:所有是HappyTeemo的都是可以自由修改的
#include <Windows.h>#include <stdio.h>//声明窗口过程函数LRESULT CALLBACK WinSunProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );//主函数int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state ){ const char* ClassName = "HappyTeemo"; //设计窗口类 WNDCLASS wndcls; wndcls.cbClsExtra = 0; wndcls.cbWndExtra = 0; wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wndcls.hCursor = LoadCursor(NULL,IDC_CROSS); wndcls.hIcon = LoadIcon(NULL,IDI_ERROR); wndcls.hInstance = hInstance; wndcls.lpfnWndProc = WinSunProc; wndcls.lpszClassName = ClassName; wndcls.lpszMenuName = NULL; wndcls.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndcls);//注册窗口类 //创建窗口 HWND hwnd; hwnd = CreateWindow(ClassName,"HappyTeemoFirstWindow",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL); //显示和刷新窗口 ShowWindow(hwnd,SW_SHOWNORMAL); UpdateWindow(hwnd); //定义消息结构体,开始消息循环 MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam;}//窗口过程函数LRESULT CALLBACK WinSunProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){ switch(uMsg) { case WM_CHAR: //按下字符键 char szChar[200]; sprintf(szChar,"char is %d",wParam); MessageBox(hwnd,szChar,"HappyTeemo",0); break; case WM_LBUTTONDOWN://鼠标左键 MessageBox(hwnd,"mouse clicked","HappyTeemo",0); HDC hdc; hdc=GetDC(hwnd); TextOut(hdc,0,50,"HappyTeemo",strlen("HappyTeemo")); ReleaseDC(hwnd,hdc); break; case WM_PAINT: //重绘 HDC hDC; PAINTSTRUCT ps; hDC=BeginPaint(hwnd,&ps); TextOut(hDC,0,0,"HappyTeemo",strlen("HappyTeemo")); EndPaint(hwnd,&ps); break; case WM_CLOSE://关闭 if(IDYES==MessageBox(hwnd,"Close?","HappyTeemo",MB_YESNO)) { DestroyWindow(hwnd); } break; case WM_DESTROY://销毁 PostQuitMessage(0); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); } return 0;}
0 0
- Windows02.写一个窗口
- WIN32 API写一个窗口
- 自学QT之自己写一个窗口
- Qt中写一个小窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 在项目中写一个 JavaScript 弹出窗口 通用类
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 今天下午写了一个批量更换材质的编辑器窗口
- 前段构建工具各自的优缺点
- 【bzoj 2705】[SDOI2012]Longge的问题
- springmvc一个跳转jsp页面被过滤器过滤好几次的问题
- iOS
- retrofit 上传文件, 新方式 传的是数组 或者文件
- Windows02.写一个窗口
- 正确的mysql写入语句要指定字段
- Python 获取命令行参数
- LintCode 最长公共子序列
- 如何在apache官网下载旧版本的maven
- JS访问器(getter和setter)
- 【Leetcode】two sum
- MySql常用语句汇总 --持续更新
- android6.0 源码 系统应用之Music代码之类逻辑分析