大家好,今天小热关注到一个比较有意思的话题,就是关于CClientDC的问题,于是小编就整理了4个相关介绍CClientDC的解答,让我们一起看看吧。
文章目录:
- CClientDC dc(this);中的dc(this) 是什么意思?
- 关于CPaintDC与CClientDC的区别和应用
- CClientDC dc(this);中的dc(this)是什么意思?
- 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点解答对大家有用。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。