20170824WindowsPrj02_01_GDI
来源:互联网 发布:php 手机号地区 编辑:程序博客网 时间:2024/06/07 03:31
GDI:
Win32编程:
1:在case WM_LBUTTONDOWN等类型的消息中,要获取点击处的XY坐标,那么可以用
x = LOWORD(lParam);
y = HIWORD(lParam);
来获取,但是,现在的电脑可能用的多屏幕,这样,就最好不要使用LOWORD和HIWORD了,而应该使用
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
来获取,在MSDN里面,就是用的这两个,需要包含头文件Winuser.h (include Windowsx.h)。
2:WM_PAINT:
1:HDC:设备上下文,针对某个窗口来做的,桌面就是一个窗口,桌面也有自己的DC。
2:可以使用GetDesktopWindow来获取到桌面的句柄,然后获取到桌面的DC,就可以直接在桌面上面绘图。
3:与WM_PAINT一样,Windows里面还有很多种消息,例如WM_CREATE,WM_CLOSE,WM_DESTROY,WM_LBUTTONDOWN……
注意:WM_CLOSE和WM_DESTROY是不一样的,在进程关闭之前,窗口关闭会执行WM_CLOSE,进程销毁之前会执行WM_DESTROY,因此,WM_CLOSE会先执行。
4:LoadIcon、LoadCursor、MAKEINTRESOURCE:
LoadIcon:是用于加载图标,可以是加载自己的ICON资源的ID,也可以是系统自带的图标资源。
LoadCursor:加载光标,一般为加载系统的光标,IDC_ARROW等。
MAKEINTRESOURCE:设置菜单使用的,传递参数未菜单的ID。
程序实例:
ATOM MyRegisterClass(HINSTANCE hInstance){WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style= CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc= WndProc;wcex.cbClsExtra= 0;wcex.cbWndExtra= 0;wcex.hInstance= hInstance;wcex.hIcon= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_POEDUNOTEPAD));wcex.hCursor= LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName= MAKEINTRESOURCE(IDC_POEDUNOTEPAD);wcex.lpszClassName= szWindowClass;wcex.hIconSm= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));return RegisterClassEx(&wcex);}
GDI基础:
1:TextOut:
用于向HDC输出文字。
BOOL TextOut( _In_ HDC hdc,//要绘制的设备上下文,handle of device context _In_ int nXStart,//绘制的起点x坐标 _In_ int nYStart,//y坐标 _In_ LPCTSTR lpString,//要绘制的文字,根据环境选择宽窄字符 _In_ int cchString//绘制文字的长度。);
2:InvalidateRect():
更新显示区域,传递参数为句柄(HWND),更新区域的rect,是否擦出背景。此API会调用WM_PAINT消息。
BOOL InvalidateRect( _In_ HWND hWnd, _In_ const RECT *lpRect, _In_ BOOL bErase);
3:HDC:
1:获取DC:可以使用GetDc和BeginPaint两个方法获取到DC,但是两者有一定的区别,BeginPaint获取的时候,会去掉颜色,全部为背景色,而GetDc只是获取到DC
2:还可以创建一个兼容DC,又名为内存DC。
3:上面三种获取到的DC都需要自己释放,使用ReleaseDc释放DC资源。
4:GDI对象:GDI有多种对象,用于记录当前的DC的状态,用什么样的方式画:
1:画笔:普通画,例如画线2,就是使用的画笔。
2:画刷:一般用于填充,例如背景色。
3:区域:一块区域。
4:字体:设置DC输出字体,当在DC上使用TextOut、DrawText等时,使用的字体。
5:位图:一定范围位图,图片。
我们可以使用这些对象和我们的DC联系起来,使用SelectObject(),联系起来后,在这个DC上面画就是使用这些联系起来的对象属性来画的。
注意: 在操作系统中,包含了很多现成的GDI对象,可以直接加载他们,这样,不用自己创建对象就可以直接使用这些对象了,他们一般是以宏的方式存在,只需要加载他们即可,例如:wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
- 20170824WindowsPrj02_01_GDI
- 20170824
- 20170824-BIN
- 牛客错题20170824(数据库)
- 牛客错题20170824(网络)
- 牛客错题20170824(操作系统)
- 20170824心情总结
- Python学习笔记——20170824
- 20170824 Java——序列化与反序列化
- Mark-20170824-Ubuntu 14.04 apt-get 安装 Ansible 为非最新版本
- CSDN日报20170824——《你为什么跳槽?真正原因找到了吗?》
- 20170824 Java——I/O,字节流与字符流,BufferedOutputStream,InputStream等(附相关练习代码)
- Vue购物车和地址选配
- python基础知识-笔记
- 第2章-数据质量
- 孤儿进程和僵尸进程
- WebView 简单使用
- 20170824WindowsPrj02_01_GDI
- Java基础
- 数据库事务,隔离级别
- 字符函数
- 二维数组中的查找java实现
- python解决最长回文子串问题
- NOIP2013 车站分级
- bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线 二分+spfa
- [HDU2588]GCD 欧拉函数