设备描述表

设备描述表是一个定义一组图形对象及其属性、影响输出的图形方式(数据)结构。windows提供设备描述表,用于应用程序和物理设备之间进行交互,从而提供了应用程序设计的平台无关性。设备描述表又称为设备上下文,或者设备环境。

设备描述表是一种数据结构,它包括了一个设备(如显示器和打印机)的绘制属性相关的信息。所有的绘制操作通过设备描述表进行。设备描述表与大多 WIN32结构不同,应用程序不能直接访问设备描述表,只能由各种相关API函数通过设备描述表的句柄间接访问该结构。

设备描述表总是与某种系统硬件设备相关。比如屏幕设备描述表与显示设备相关,打印机设备描述表与打印设备相关等等。

屏幕设备描述表,一般我们简单地称其为设备描述表。它与显示设备具有一定的对应关系,在windows GDI界面下,它总是相关于某个窗口或这窗口上的某个显示区域。通常意义上窗口的设备描述表,一般指的是窗口的客户区,不包括标题栏、菜单栏所占有的区域,而对于整个窗口来说,其设备描述表严格意义上来讲应该称为窗口设备描述表,它包含窗口的全部显示区域。二者的操作方法完全一致,所不同的仅仅是可操作的范围不同而已。

简单来说设备描述表就是绘图和输出文字的区域,其默认坐标系,左上角为(0,0);

在C#这些语言里面此概念已经被封装了,可以不用管;

下面来分别在窗口客户区、标题栏、桌面上,输出文字,通过获取不同的设备描述表;

#include <windows.h>
#include "resource.h"LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);HINSTANCE hInst;
TCHAR szClassName[] = TEXT("dcDemo");int WINAPI
WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{HWND hwnd;MSG messages;WNDCLASSEX wincl;hInst = hThisInstance;wincl.hInstance = hThisInstance;wincl.lpszClassName = szClassName;wincl.lpfnWndProc = WindowProcedure;wincl.style = CS_DBLCLKS;wincl.cbSize = sizeof (WNDCLASSEX);wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);wincl.hCursor = LoadCursor (NULL, IDC_ARROW);wincl.lpszMenuName = MAKEINTRESOURCE (IDC_DCDEMO);wincl.cbClsExtra = 0;wincl.cbWndExtra = 0;wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);if (!RegisterClassEx (&wincl))return 0;hwnd = CreateWindowEx (0,szClassName,TEXT("设备描述表 Demo"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500,100,HWND_DESKTOP,NULL,hThisInstance,NULL);ShowWindow (hwnd, nFunsterStil);while (GetMessage (&messages, NULL, 0, 0)){TranslateMessage(&messages);DispatchMessage(&messages);}return messages.wParam;
}LRESULT CALLBACK
WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{PAINTSTRUCT ps;HDC hdc, hdcbt,hdcdesk;RECT rt; char szBuffer[100]; switch (message){case WM_COMMAND:switch (LOWORD(wParam)){case IDM_dc:       hdc=GetDC(hwnd);hdcbt=GetWindowDC(hwnd);hdcdesk=GetWindowDC(GetDesktopWindow());TextOut(hdc, 200,10,"在窗口客户区绘制",16);TextOut(hdcbt, 200,10,"在整个窗口绘制",14);TextOut(hdcdesk, 200,10,"在桌面绘制",10);break;case IDM_ABOUT:MessageBox (hwnd, TEXT ("dcDemo v1.0\nCopyright (C) 2020\n by bo"),TEXT ("设备描述表Demo"), MB_OK | MB_ICONINFORMATION);break;case IDM_EXIT:DestroyWindow(hwnd);break;default:return DefWindowProc(hwnd, message, wParam, lParam);              }break;case WM_CREATE:break;case WM_PAINT:hdc = BeginPaint(hwnd, &ps);                 GetClientRect(hwnd, &rt);               EndPaint(hwnd, &ps);break;case WM_DESTROY:PostQuitMessage (0);break;default:return DefWindowProc (hwnd, message, wParam, lParam);}return 0;
}

启动程序,在桌面上,如下;未执行绘制代码;

当执行了绘制代码之后,如下;分别在三个地方,窗口客户区、窗口标题栏、计算机桌面上,进行了绘制;

如果应用需要在计算机桌面输出内容,可考虑此功能;

下面三句分别是,获取窗口客户区设备描述表,获取整个窗口设备描述表,获取桌面设备描述表;

hdc=GetDC(hwnd);
hdcbt=GetWindowDC(hwnd);
hdcdesk=GetWindowDC(GetDesktopWindow());

工程;

资源和头文件;

#include "resource.h"
#include <windows.h>/
//
// Menu
//IDC_DCDEMO MENU
BEGINPOPUP "&File"BEGINMENUITEM "设备描述表 Demo",                   IDM_dcMENUITEM "E&xit",                   IDM_EXITENDPOPUP "&Help"BEGINMENUITEM "&About ...",             IDM_ABOUTEND
END
#define  IDM_EXIT        10001
#define     IDM_ABOUT       10002#define    IDC_DCDEMO      10101
#define     IDD_ABOUTBOX    10102
#define     IDM_dc         40001

Windows编程设备描述表的概念和在客户区绘制、在窗口标题栏绘制、在桌面绘制图解相关推荐

  1. Windows编程 第七回 绘图课(上)

    -----路过的朋友,若发现错误或有好的建议,欢迎在下面留言,谢谢!----- 之前讲了很多GDI和设备描述表的内容,想必大家对这么多枯燥晦涩的东西早就感到厌倦了吧.为了激发一下大家继续学习Windo ...

  2. WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标

    WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标 收藏 设置坐标映射 (1)Windows坐标系统 Windows坐标系分为逻辑坐标系和设备坐标系两种,GDI支持这两种坐标系.一般而言, GD ...

  3. Windows 中GDI、设备描述表和位图

    在Windows中,所有的图形和图像显示操作都是通过GDI(Graphic Device Interface)模块完成,,而GDI的显示都是由设备描述表(Context Device,简称DC)来完成 ...

  4. Windows编程 从消息窗口到基本窗口 游戏循环窗口框架的简单实现

    版本:VS2015 语言:C++ 本来想昨天写个消息窗口的内容,讲一些好玩的东西,不过没有时间了,就放到一起了. 今天正好把书的第二章看完了,感觉良好,Windows的编程确实难度要高,一下子会有一大 ...

  5. Windows编程 第四回 Windows程序的生与死(下)

    致歉 很抱歉,读者看到的这篇文章将是我写的最没什么条理的一篇了,由于这一块儿内容是所有Windows程序的核心与基础,所以我分了三回来写.我想讲 得既易懂有又丰富,无奈本人才疏学浅,每每一提笔就要查很 ...

  6. Windows编程初步

    Windows编程初步 目前来说Windows已经家喻户晓,它的历史是Microsoft历史上最辉煌的一页.人们现在已经基本上使用Windows操作系统,因此在编程方面我们有必要从DOS环境编程向Wi ...

  7. Windows编程---句柄

    句柄,是整个Windows编程的基础.一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动 ...

  8. 【Windows编程】windows窗口创建过程详解

    文章目录 前言 1 应用程序的分类 2 应用程序分类的对比 3 编译工具 4 windows库文件和头文件 5 WinMain函数和MessageBox函数初始 6 窗口类 7 窗口类的分类 8 注册 ...

  9. c语言windows编程句柄,HANDLE句柄(windows编程)

    首先什么是句柄?(理解了句柄,也就知道了句柄和指针的区别了) 所谓句柄实际上是一个数据,是一个Long (整长型)的数据. 句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WIND ...

最新文章

  1. 学习node js 之微信公众帐号接口开发 准备工作之三
  2. 让服务器接近最终用户能解决性能问题吗?——微云网络
  3. 降低 80% 的读写响应延迟!我们测评了 etcd 3.4 新特性(内含读写发展史)
  4. 倒序排序_排序算法(六):Counting Sort 计数排序
  5. 对于容斥原理反演的思考和总结
  6. windows中文字体_如何让 Windows 变「好看」?
  7. 2021年中宁中学高考成绩查询,2021宁夏中卫市重点高中排名
  8. Javascript-7对象:字符串、时间
  9. 图解 5 种 Join 连接及实战案例!(inner/ left/ right/ full/ cross)
  10. Oracle优化检查表
  11. jquery.zclip轻量级复制失效问题
  12. iOS开发网络篇—大文件的多线程断点下载
  13. linux中的shell脚本case,Shell编程之case语句与循环语句
  14. java和eova的关系_eova ,一套jfinal开发框架,方便学习与 Jsp/Servlet 262万源代码下载- www.pudn.com...
  15. 作业收集小程序推荐|视频作业收集、图片作业收集、文档作业收集
  16. android 市场 上传,安卓市场APP上传流程及审核要求
  17. aect17定义_【多选题】AECT关于教育技术的17定义认为,教育技术的目的是()? A. 提高绩效的 B. 促进知识理解 C. 调整改善学习及表现 D. 促进学习...
  18. Collectors.reducing总结
  19. java list最后一个元素_Java实现寻找列表List中最后一个元素
  20. Android Notification取消声音 取消弹出

热门文章

  1. 关于HTML下overflow-y:auto无效、清除HTML默认边距、解决去除手机访问网页时的左右多余空白的三个方法汇总
  2. Linux 环境运维 - 查看远程调试端口被占用的ip地址,设置连接处于空闲状态快速自动化断开方法,keepalive机制相关说明
  3. freeRtos学习笔(4)消息队列
  4. [YTU]_2477( C++习题 抽象基类)
  5. 2.1 基于文件读写图像数据
  6. interp3函数-----三维数据插值
  7. 图像中添加二项式分布噪声
  8. OpenCV学习--saturate_cast防止数据溢出
  9. 2转单通道 python_机器学习用Python—Python集成工具包Anaconda安装步骤
  10. 动态半导体ram依据什么存储信息_LPDDR4X和RAM两者有什么关系 它们有什么特点