MFC学习笔记——GDI绘图

来源:互联网 发布:人工智能 时时彩 编辑:程序博客网 时间:2024/06/05 13:33

MFC学习笔记——GDI绘图

一、GDI绘图技术简介:

GDI(Geaphics Device Interface)图形设备接口,也是API应用程序编程接口的一种
它是专门负责窗口显示以及绘制图形的编程接口,包括显示器和打印机上显示图形

二、绘图专用句柄HDC

HWND和HDC是Windows中最常用的句柄之一
HDC(Handle of DC)设备环境句柄,专门用于绘图的句柄,被MFC封装咋CDC类中
DC(Device Context)翻译为:设备上下文,设备环境以及设备描述表等。在windows操作系统中,通过对驱动程序统一管理,讲设备接口细节隐藏于操作系统内部。程序员在编写图形程序时,只需要调用一个公共的虚拟设备即可,这个虚拟设备环境也就是DC.

三、通过HDC句柄绘图有三种方式: 标准客户区绘图、临时客户区绘图和非客户区绘图

a)标准客户区绘图:
必须是在WM_PAINt消息回调时才能执行,调用BeginPaint函数获取标准客户区绘图句柄,最后调用EndPaint函数释放

b)临时客户区绘图:
在任何消息回调时都可以执行,调用GetDC函数获取临时客户区绘图句柄进行绘图,最后调用RealeaseDC进行释放

c)非客户区绘图:
必须在WM_NCPAINT消息回调时才能执行,调用GetWindowDC函数获取非客户区绘图句柄进行绘图,最后调用RealeaseDC释放

注:调用Invalidate函数强制客户区标准绘图更新,临时客户区的绘图会被强制清除

BOOL CALLBACK WinProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch(uMsg){ case WM_COMMAND: { case IDCANCEL: EndDialog(hwndDlg,0); return TRUE; } //标准绘图case WM_PAINT: { PAINTSTRUCT ps; HDC hdc=BeginPaint(hwndDlg,&ps);//Rectangle(hdc,0,0,40,40); MoveToEx(hdc,20,20,NULL); LineTo(hdc,40,40); EndPaint(hwndDlg,&ps);// } return TRUE; //临时客户区绘图case WM_LBUTTONDOWN: { int x=LOWORD(lParam); int y=HIWORD(lParam); HDC hdc=::GetDC(hwndDlg);// Ellipse(hdc,x-10,y-10,x+10,y+10); ReleaseDC(hwndDlg,hdc);// } return TRUE; //非客户区绘图case WM_NCPAINT: HDC hdc=GetWindowDC(hwndDlg); RECT rect; GetWindowRect(hwndDlg,&rect); Rectangle(hdc,0,0,rect.right-rect.left,rect.bottom-rect.top); ReleaseDC(hwndDlg,hdc); return TRUE; } return FALSE; }
原创粉丝点击