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);




原创粉丝点击