MFC里的DC是什么意思?怎么使用DC?最好能举个例子说明一下?

MFC里的DC是什么意思?怎么使用DC?最好能举个例子说明一下?,第1张

DC(device context)叫设备环境或者设备描述表,它其实是GDI内部保存数据的一种数据结构。此结构中的属性内容与特定的输出设备(显示器、打印机等)相关,属性定义了GDI函数的工作细节。 总之,你要使用GDI绘图函数,就需要一个DC句柄。MFC中把和DC相关的都封装成类。CDC是一个抽象基类,可以访问整个显示器和打印机等。CClientDC类和窗口客户区关联,能用于显示客户区相关内容。

设备描述表(DC)是Windows中的一种数据结构,它包含GDI需要的所有关于显示界面情况的描述字段,包括相连的物理设备和各种各样的状态信息。

图形显示功能是由显卡来完成的,你想要利用显卡的图形显示功能来完成你的图形输出,怎么办,给你一块硬件能用吗?好,现在厂商给你提供一个驱动程序,给你一些调用的接口,你就可以访问了吧。但这种访问是在驱动层,很麻烦,更麻烦的是,每个厂商给自己显卡提供的驱动程序还不一样,那我们写的图形输出程序岂不是换台机器(不一样的显卡)就得修改,一个字:累,两个字:麻烦。现在一个救世主出现了,Bill兄,他让他的兄弟们在驱动之上实现一个抽象层,当然也可以认为是一个中间层的软件代码(我们管他叫设备上下文如何,也叫设备描述表DC),由这些代码和驱动打交道(当然,这些驱动得支持Windows平台)。然后,他将这种实现封装到动态链接库中提供给我们使用,我们能通过动态链接库暴露的API函数(相关概念见VC下半部分),得到一个这种实现(可以说是一种资源)的句柄,设备上下文的句柄(HDC),利用的这个句柄,就好像有了访问这中实现的钥匙了,以后就可以,剩下的参照VC上半部分的内容。

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

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

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

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

windows 窗口一旦创建,它就自动地产生了与之相对应的设备描述表数据结构,用户可运用该结构,实现对窗口显示区域的GDI操作,如划线、写文本、绘制位图、填充等,并且所有这些操作均要通过设备描述表句柄了进行。

要说设备描述表就必须先说GDI(图形设备接口)。我们要在程序窗口上显示图形或文本等,就可以使用这些GDI函数在程序上“画画”、“写字”。设备描述表(DC)实际上是GDI内部保存的数据结构。设备描述表中的有些值是图形化的“属性”,这些属性定义了一些GDI函数工作的情况,如:文本颜色、图形填充的情况等。HDC是设备描述表句柄类型,句柄可以简单的理解为指针,被定义为32位的无符号整数。

以上内容转自:http://longzxrblogsohucom/187934817html

DC(设备描述表):Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备描述表(Device Context, DC)在DC表示的逻辑意义的“画布”上进行图形的绘制。DC是一种包含设备信息的数据结构,它包含了物理设备所需的各种状态信息。Win32程序在绘制图形之前需要获取DC的句柄HDC,并在不继续使用时释放掉。

在c++ 编程中常会见到HDC,CDC,CClientDC,CPaintDC,CWindowDC这样的类。

HDC是DC的句柄,API中的一个类似指针的数据类型。

CDC是MFC的DC的一个类。

CDC等设备上下分类,都含有一个类的成员变量:m_nHdc;即HDC类型的句柄。

CDC及其派生类的继承视图:

CObject

public |------CDC

public |------|------CClientDC

public |------|------CPaintDC

public |------|------CWindowDC

public |------|------CMetaFileDC

(注意: 除CMetaFileDC以外的三个派生类用于图形绘制)

CDC类定义了一个设备描述表相关的类,其对象提供成员函数操作设备描述表进行工作,如显示器,打印机,以及显示器描述

表相关的窗口客户区域。

通过CDC的成员函数可进行一切绘图操作。CDC提供成员函数进行设备描述表的基本操作,使用绘图工具,选择类型安全的图形设备结构(GDI),以及色彩,调色板。除此之外还提供成员函数获取和设置绘图属性,映射,控制视口,窗体范围,转换坐标,区域操作,裁减,划线以及绘制简单图形(椭圆,多边形等)。成员函数也提供绘制文本,设置字体,打印机换码,滚动,处理元文件。

其派生类:

1CPaintDC:封装BeginPaint和EndPaint两个API的调用。

(1)用于响应窗口重绘消息(WM_PAINT)的绘图输出。

(2)CPaintDC在构造函数中调用BeginPaint()取得设备上下文,在析构函数中调用EndPaint()释放设备上下文。 EndPaint()除了释放设备上下文外,还负责从消息队列中清除WM_PAINT消息。因此,在处理窗口重画时,必须使用CPaintDC,否则 WM_PAINT消息无法从消息队列中清除,将引起不断的窗口重画。

(3)CPaintDC也只能用在WM_PAINT消息处理之中。

2CClientDC(客户区设备上下文): 处理显示器描述表的相关的窗体客户区域。

构造时自动调用GetDC函数,析构时自动调用ReleaseDC函数一般应用于客户区窗口的绘制。

当需要处理一个鼠标的单击,然后马上画出一个圆,你不能等到下一个WM_PAINT的消息到来才画图,而是马上,这是就需要CclientDC了。它可以在OnPaint的外面创建一个客户区域DC

void CMainWindow::OnLButtonDown (UINT nFlags, CPoint point)

{

CRect rect;

GetClientRect (&rect);

CClientDC dc (this);

dcMoveTo (rectleft, recttop);

dcLineTo (rectright, rectbottom);

dcMoveTo (rectright, recttop);

dcLineTo (rectleft, rectbottom);

}

3CWindowDC: 处理显示器描述表相关的整个窗体区域,包括了框架和控 件(子窗体)。

(1)可在非客户区绘制图形,而CClientDC,CPaintDC只能在客户区绘制图形。

(2)坐标原点是在屏幕的左上角,CClientDC,CPaintDC下坐标原点是在客户区的左上角。

(3)关联一特定窗口,允许开发者在目标窗口的任何一部分进行绘图,包含边界与标题,这种DC同WM_NCPAINT消息一起发送。

4CMetaFileDC:与元文件相关的设备描述表关联。

下面说下一些细点的知识点

1、CClientDC,CWindowDC 区别不大, 可以说 CWindowDC包含了CClientDC。 就拿记事本来说,CClientDC 就只是我们可以编辑文字的那个区域,是客户区,CWindowDC 除了上面说的区域, 还包括菜单栏和工具栏等。

2、CClientDC和CWindowDC与 CPaintDC 的区别大点,在DC的获取方面 CClientDC和CWindowDC 使用的是并只能是GetDC 和 ReleaseDC。CPaintDC 使用的是并只能是 BeginPaint 和 EndPaint。

3、CPaintDC只能用在响应 WM_PAINT 事件CClientDC,CWindowDC 只能用在响应非WM_PAINT 事件

4、关于 WM_PAINT事件

系统会在多个不同的时机发送WM_PAINT消息:当第一次创建一个窗口时,当改变窗口的大小时,当把窗口从另一个窗口背后移出时,当最大化或最小化窗口时,等等,这些动作都是由系统管理的,应用只是被动地接收该消息,在消息处理函数中进行绘制操作;大多数的时候应用也需要能够主动引发窗口中的绘制操作,比如当窗口显示的数据改变的时候,这一般是通过InvalidateRect和InvalidateRgn函数来完成的。InvalidateRect和 InvalidateRgn把指定的区域加到窗口的Update Region中,当应用的消息队列没有其他消息时,如果窗口的Update Region不为空时,系统就会自动产生WM_PAINT消息。

系统为什么不在调用Invalidate时发送WM_PAINT消息呢?又为什么非要等应用消息队列为空时才发送WM_PAINT消息呢?这是因为系统把在窗口中的绘制操作当作一种低优先级的操作,于是尽可能地推后做。不过这样也有利于提高绘制的效率:两个WM_PAINT消息之间通过 InvalidateRect和InvaliateRgn使之失效的区域就会被累加起来,然后在一个WM_PAINT消息中一次得到更新,不仅能避免多次重复地更新同一区域,也优化了应用的更新操作。像这种通过InvalidateRect和InvalidateRgn来使窗口区域无效,依赖于系统在合适的时机发送WM_PAINT消息的机制实际上是一种异步工作方式,也就是说,在无效化窗口区域和发送WM_PAINT消息之间是有延迟的;有时候这种延迟并不是我们希望的,这时我们当然可以在无效化窗口区域后利用SendMessage 发送一条WM_PAINT消息来强制立即重画,但不如使用Windows GDI为我们提供的更方便和强大的函数:UpdateWindow和RedrawWindow。UpdateWindow会检查窗口的Update Region,当其不为空时才发送WM_PAINT消息;RedrawWindow则给我们更多的控制:是否重画非客户区和背景,是否总是发送 WM_PAINT消息而不管Update Region是否为空等。

5、HDC和CDC相互转换:

(1)、HDC到CDC的转换:

方法一: 此方法在设备结束时不会销毁原来的资源(即:hDC,hBitmap)

CDC pDC = CDC::FromHandle(hDC);

方法二:此方法在设备结束时会销毁原来的资源(即:hDC,hBitmap)

CDC dc;

dcAttach(hDC);

(2)、CDC到HDC的转换:

CDC dc;

HDC hDC;

hDC = dcGetSafeHdc();

6、首先:CDC 不可以释放。 FromHandle 是通过 HDC 来创建了一个CDC 对象,以方便操作,释放 DC 的操作应该针对于HDC 而非此CDC , 如果释放了它 pDC->ReleaseDC,就会造成隐患。

HDC hDC = GetDC(hWnd);

CDC pDC = CDC::FromHandle(hDC);

这两者是指向的一个DC对象,只能释放一次,而这个释放应该针对 hDC 而非 pDC。

然后:GetDC和ReleaseDC的调用匹配,CreateDC和DeleteDC的调用匹配。GetDC是从窗口获取现有的DC,而CreateDC是创建DC,所以ReleaseDC和DeleteDC的作用一个是释放,一个是销毁。

K40DC调光代码

调光技术在LED照明中越来越受重视,因为它能够在任何时间和任何情况下为人们提供正确的光照亮度。在这份文章中,我们将讨论K40DC调光代码,它是一种基于PWM(脉宽调制)调光技术的完美解决方案。

什么是 PWM 技术?

PWM调光,也就是脉宽调制调光技术,是LED照明中调整亮度的最常用方法。通过改变幅度或占空比来控制电流的大小,从而达到调节亮度的目的。在PWM调光技术中,LED光源的光输出是以一定的周期重复的高低电平信号形式出现,低电平信号的时间为T1,高电平信号的时间为T2。周期T1+T2的时间为定值。

通过调节占空比,可以改变低电平和高电平信号的时长,从而控制电流的大小和LED的亮度。例如,当占空比为50%时,LED将会在平均50%的电流下运行,亮度也会明显变暗。

什么是 K40DC 调光代码?

K40DC是一种使用PWM技术的软件调光方案,专门针对具有高效低压降特性的LED驱动器。该方案适用于不同电流和电压的LED照明,包括家居和商业照明。

与其他软件方案相比,K40DC调光代码具有更高的效率和更稳定的调光性能。此外,它可以输出更好的调光范围,从0%到100%。这种软件方案可以使用针对不同应用场景的不同调光曲线,以满足不同用户需求。

如何使用 K40DC 调光代码?

首先,您需要准备一个HIDFLASH工具。这种工具可以将K40DC调光代码固件刷到一个8258芯片(或其他相似的芯片)上。在刷固件之后,您只需要按照以下步骤使用它:

首先,连接您的LED照明系统,并在PWM调光输出上连接一个电压表。

接下来,使用HIDFLASH和K40DC调光代码将8258芯片刷写好,然后将它连接到LED驱动器上。

在调光测试之前,请确保您的电源输出电压和电流已经准确设置。

在您的测试中,使用输入调光信号CTL,将其连接到您的PWM信号输入。

在调光测试期间,您可以使用电压表的读数来验证LED的实际亮度,以确保调光范围和稳定性。

K40DC 调光代码的优缺点

使用K40DC调光代码有很多优点,其中最主要的是:

高效:K40DC调光代码的效率比其他方案高得多。

稳定:K40DC调光代码可以提供更稳定的亮度和色温。

精密:该方案可以提供更准确的亮度和颜色控制。

可编程:您可以根据您的需求自定义调光曲线。

但是,这种调光方法也存在以下几点缺点:

成本相对较高:相比于其他调光方案,K40DC调光代码需要更多的硬件和软件支持。

复杂:K40DC调光代码需要专业的技术人员进行安装和调试。

总结

总的来说,K40DC调光代码是一种高效、稳定和精密的PWM调光方案。虽然它相对于其他方案来说成本比较高,但是它具有更大的调光范围和更好的调光性能,适用于各种LED照明应用场景。如果您认为您的LED照明系统需要更好的调光控制和效果,那么K40DC调光代码就是一个很好的解决方案。

您好,洗衣机显示dc的常见原因:1、洗衣机未放平:在洗衣机不平的情况下,洗衣机无法运行,即会出现DC等故障代码,建议放平洗衣机排除故障;2、程序出错了:建议您可以先断电1分钟,将机内衣服重新抖一抖,然后重新关闭盖门通电试下哦;3、若仍旧显示DC的话,存在排水泵与电脑板接触不良,需要师傅对电脑板线路进行检查。~

传奇能力值对应简写全表:

DC:攻击力(攻) 

MC:魔法力(魔) 

SC:道术力(道) 

AC:物理防御力(防) 

MAC:魔法防御力(魔防) 

HP:生命值(红) 

MP:魔法值(蓝) 

HIT:准确(命中率) 

SPD:闪避

扩展资料:

StdItemsDB 代码表解释:

1 NAME 装备名称,连击引擎支持20个字节,其它版本的引擎只支持14个字节 

2 Stdmode 物品类型 查看相关设置 

3 Weight 装备或物品的重量 

4 Anicount 物品特殊属性设置 

5 Source 是+强度(负数+神圣) 物品Stdmode等于16的装备Source=1 代表是面巾 

6 Reserved 是隐藏属性:"8"代表人死后会消失,"9"无法取下 

7 Looks 显示装备物品栏里样子和在装备栏里的样子 

8 DuraMax 装备持久度,这里的变量中"1000"表示1个持久度,那么"40000"就表示40个持久度了

欢迎分享,转载请注明来源:表白网

原文地址:https://h5.hunlipic.com/biaobai/4017791.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2024-04-10
下一篇2024-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存