Windows编程设备描述表的概念和在客户区绘制、在窗口标题栏绘制、在桌面绘制图解
设备描述表
设备描述表是一个定义一组图形对象及其属性、影响输出的图形方式(数据)结构。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编程设备描述表的概念和在客户区绘制、在窗口标题栏绘制、在桌面绘制图解相关推荐
- Windows编程 第七回 绘图课(上)
-----路过的朋友,若发现错误或有好的建议,欢迎在下面留言,谢谢!----- 之前讲了很多GDI和设备描述表的内容,想必大家对这么多枯燥晦涩的东西早就感到厌倦了吧.为了激发一下大家继续学习Windo ...
- WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标
WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标 收藏 设置坐标映射 (1)Windows坐标系统 Windows坐标系分为逻辑坐标系和设备坐标系两种,GDI支持这两种坐标系.一般而言, GD ...
- Windows 中GDI、设备描述表和位图
在Windows中,所有的图形和图像显示操作都是通过GDI(Graphic Device Interface)模块完成,,而GDI的显示都是由设备描述表(Context Device,简称DC)来完成 ...
- Windows编程 从消息窗口到基本窗口 游戏循环窗口框架的简单实现
版本:VS2015 语言:C++ 本来想昨天写个消息窗口的内容,讲一些好玩的东西,不过没有时间了,就放到一起了. 今天正好把书的第二章看完了,感觉良好,Windows的编程确实难度要高,一下子会有一大 ...
- Windows编程 第四回 Windows程序的生与死(下)
致歉 很抱歉,读者看到的这篇文章将是我写的最没什么条理的一篇了,由于这一块儿内容是所有Windows程序的核心与基础,所以我分了三回来写.我想讲 得既易懂有又丰富,无奈本人才疏学浅,每每一提笔就要查很 ...
- Windows编程初步
Windows编程初步 目前来说Windows已经家喻户晓,它的历史是Microsoft历史上最辉煌的一页.人们现在已经基本上使用Windows操作系统,因此在编程方面我们有必要从DOS环境编程向Wi ...
- Windows编程---句柄
句柄,是整个Windows编程的基础.一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动 ...
- 【Windows编程】windows窗口创建过程详解
文章目录 前言 1 应用程序的分类 2 应用程序分类的对比 3 编译工具 4 windows库文件和头文件 5 WinMain函数和MessageBox函数初始 6 窗口类 7 窗口类的分类 8 注册 ...
- c语言windows编程句柄,HANDLE句柄(windows编程)
首先什么是句柄?(理解了句柄,也就知道了句柄和指针的区别了) 所谓句柄实际上是一个数据,是一个Long (整长型)的数据. 句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WIND ...
最新文章
- 学习node js 之微信公众帐号接口开发 准备工作之三
- 让服务器接近最终用户能解决性能问题吗?——微云网络
- 降低 80% 的读写响应延迟!我们测评了 etcd 3.4 新特性(内含读写发展史)
- 倒序排序_排序算法(六):Counting Sort 计数排序
- 对于容斥原理反演的思考和总结
- windows中文字体_如何让 Windows 变「好看」?
- 2021年中宁中学高考成绩查询,2021宁夏中卫市重点高中排名
- Javascript-7对象:字符串、时间
- 图解 5 种 Join 连接及实战案例!(inner/ left/ right/ full/ cross)
- Oracle优化检查表
- jquery.zclip轻量级复制失效问题
- iOS开发网络篇—大文件的多线程断点下载
- linux中的shell脚本case,Shell编程之case语句与循环语句
- java和eova的关系_eova ,一套jfinal开发框架,方便学习与 Jsp/Servlet 262万源代码下载- www.pudn.com...
- 作业收集小程序推荐|视频作业收集、图片作业收集、文档作业收集
- android 市场 上传,安卓市场APP上传流程及审核要求
- aect17定义_【多选题】AECT关于教育技术的17定义认为,教育技术的目的是()?
A. 提高绩效的
B. 促进知识理解
C. 调整改善学习及表现
D. 促进学习...
- Collectors.reducing总结
- java list最后一个元素_Java实现寻找列表List中最后一个元素
- Android Notification取消声音 取消弹出
热门文章
- 关于HTML下overflow-y:auto无效、清除HTML默认边距、解决去除手机访问网页时的左右多余空白的三个方法汇总
- Linux 环境运维 - 查看远程调试端口被占用的ip地址,设置连接处于空闲状态快速自动化断开方法,keepalive机制相关说明
- freeRtos学习笔(4)消息队列
- [YTU]_2477( C++习题 抽象基类)
- 2.1 基于文件读写图像数据
- interp3函数-----三维数据插值
- 图像中添加二项式分布噪声
- OpenCV学习--saturate_cast防止数据溢出
- 2转单通道 python_机器学习用Python—Python集成工具包Anaconda安装步骤
- 动态半导体ram依据什么存储信息_LPDDR4X和RAM两者有什么关系 它们有什么特点