https://www.hdzikao.com

CClientDC dc(this);中的dc(this) 是什么意思?(关于CPaintDC与CClientDC的区别和应用)【cclientdcdc(this)】

[导读] 大家好,今天小热关注到一个比较有意思的话题,就是关于CClientDC的问题,于是小编就整理了4个相关介绍CClientDC的解答,让我们一起看看吧。 文章目录: CClientDC dc(this);中的dc(this) 是什么意思

CClientDC dc(this);中的dc(this) 是什么意思?(关于CPaintDC与CClientDC的区别和应用)【cclientdcdc(this)】

大家好,今天小热关注到一个比较有意思的话题,就是关于CClientDC的问题,于是小编就整理了4个相关介绍CClientDC的解答,让我们一起看看吧。

文章目录:

  1. CClientDC dc(this);中的dc(this) 是什么意思?
  2. 关于CPaintDC与CClientDC的区别和应用
  3. CClientDC dc(this);中的dc(this)是什么意思?
  4. C++:MFC将位图显示在界面上的是哪个函数?Ondraw还是CClientDC...

一、CClientDC dc(this);中的dc(this) 是什么意思?

direct control直接控制?

CClientDC dc(this),这句就是用CClientDC的一个带CWnd指针类型参数的构造函数来生成一个名字是dc的实例而已,没什么特别的啊。

GetDlgItem(IDC_STATIC_01)这句用来获得ID是IDC_STATIC_01的控件的句柄,而在你的程序中,已经知道这个控件是个静态标签,所以可以直接用(CStatic *)将这个句柄转换成静态标签控件的句柄。

另外,所有控件、窗口、框架的类都是由CWnd类继承来的,所以都可以作CClientDC dc_i()这个括号中的参数。

很显然,它是一个变量名。一个对象。

你想问的可能是CClientDC,它代表了当前的客户区,

用dc(this)这个方法,建立了一个对象。

然后用dc可调用很多函数。

二、关于CPaintDC与CClientDC的区别和应用

2.2. CPaintDC类

(1)CPaintDC类是CDC类的一个派生类,该类一般用在响应WM_PAINT消息的函数OnPaint()中。

(2)WM_PAINT消息是当窗口的某个区域需要重画时激发的窗口消息。当程序中的消息循环接到WM_PAINT消息时就自动调用消息处理函数OnPaint(),如果在OnPaint函数内定义了CPaintDC类的对象,通过这个类对象就可以使用CDC类的成员函数完成视图客户区中的图形绘制操作。

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

2.3. CClientDC类

CClientDC类也是CDC类的派生类。它只能在窗口的客户区(即窗口中除了边框、标题栏、菜单栏以及状态栏外的中间部分)中进行绘图,坐标点(0,0)通常指的是客户区的左上角。它的构造函数调用GegDC函数,而析构函数调用ReleaseDC函数。

CClientDC(客户区设备上下文)用于客户区的输出,它在构造函数中封装了GetDC(),在析构函数中封装了ReleaseDC()函数。一般在响应非窗口重画消息(如键盘输入时绘制文本、鼠标绘图)绘图时要用到它。用法是:

CClientDC dc(this);//this一般指向本窗口或当前活动视图

dc.TextOut(10,10,str,str.GetLength());

//利用dc输出文本,如果是在CScrollView中使用,还要注意调用OnPrepareDC(&dc)调整设备上下文的坐标。

三、CClientDC dc(this);中的dc(this)是什么意思?

this顾名思意就是这么,相当于一个本类的指针,省下你自己定义了。不光是CClientDC dc(this);你还可以this->看一下,你会发现你在本类中定义的函数变量都在。至于dc(this)的形式,是为了传递一个句柄给dc。既然有dc,所以你必然是定义的窗口类,因此this也可以说是你所定义的窗口类的指针。

四、C++:MFC将位图显示在界面上的是哪个函数?Ondraw还是CClientDC...

你搞混了,CClientDC是设备DC环境,里面包含一些设备的显示信息。显示图片得用函数。

可以 用BitBlt函数将位图贴到设备上

重载OnDraw或者OnPaint事件,然后使用CClientDC把位图显示出来

//首先获取客户区的dc

CClientDC dc(this);

//创建兼容内存dc

CDC dcMem;

dcMem.CreateCompatibleDC(&dc);

//定义两个CBitmap

CBitmap bmpMem, *pOldMemBmp;

//加载位图资源

bmpMem.LoadBitmap(IDB_BITMAP);

//获取位图信息

BITMAP bmpinfo;

bmpMem.GetBitmap(&bmpinfo);

//将位图资源选到内存DC中

pOldMemBmp = dcMem.SelectObject(&bmpMem);

//将位图从内存DC中贴到客户区DC中

dc.BitBlt(0,0,bmpinfo.bmWidth,bmpinfo.bmHeight,&dcMem,0,0,SRCCOPY);

//到这里客户区就能显示那种ID为IDB_BITMAP的位图了

//还原位图,释放资源

dcMem.SelectObject(pOldMemBmp);

dcMem.DeleteDC();//如果你想按一下按钮实现显示一张位图,可以种按键的消息响应函数中把上面的代码贴上去就行了

到此,以上就是小编对于CClientDC的问题就介绍到这了,希望介绍关于CClientDC的4点解答对大家有用。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读