mfc中CClientDC(this)的this怎么获得?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mfc中CClientDC(this)的this怎么获得?相关的知识,希望对你有一定的参考价值。

假如我在别的文件中使用CClientDC,在mfc新建的窗口上画图,括号里的参数该写什么?

CClientDC clientDC(this); this不需要获得。
this指向的对象所代表的窗口.每一个对象保存一个m_Hwnd成员,指向这个对象创建出来的窗口.当你调用dc(this)的时候,类内部会自动将这个m_hwnd成员交给设备上下文.所以这里的this其实就是传递自身,为了获取自身对象内的m_hwnd以便得到所要操作的是哪个窗口.追问

如果我在别的文件里想使用这个cview的m_hwnd呢?

参考技术A this是在窗口类内获取本窗口指针的方法。
无论你在哪里需要DC,首先要获取已存在的窗口指针(或句柄),才能获取DC。括号里面,就是窗口指针。
在MFC中,有多种框架内获取窗口指针的方法,这要看你在什么位置,需要获取什么窗口的指针。
常用函数包括:
AfxGetMainWnd();//获取主框架窗口
MDIGetActive()->GetActiveView;//框架窗口获取多文档的当前视图
GetActiveDocument()->GetFirstViewPosition() / GetNextView() //通过文档获取视图窗口。本回答被提问者采纳
参考技术B this指针指向所在类的对象,哪个类调用的就是哪个类吧。应该是这样的吧追问

不用this怎么获得?

MFC 画字体DrawText()或TextOut(),CFont字体样式类

新建单个文档的MFC应用程序,类视图——View项的属性——消息,WM_PAINT,创建OnPaint()函数

技术图片

void CMFCApplication27View::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    // TODO:  在此处添加消息处理程序代码    
    CRect rect;
    this->GetClientRect(&rect);//获取客户区大小

    CFont font;//用来设置大小、样式,颜色用dc.SetTextColor设置
    font.CreatePointFont(200, TEXT("Arial"));//20号字
    dc.SelectObject(&font); 
    //-------------------- 矩形框偏移,阴影效果 -------------------------------------//
    dc.SetBkMode(TRANSPARENT);//透明,否则新的遮住旧的
    rect.OffsetRect(20, 20);//右、下偏移20
    dc.SetTextColor(RGB(192, 192, 192));//灰色
    dc.DrawText(TEXT("DrawText画文本"), &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);//方式一,客户区、单行、上下左右居中
    rect.OffsetRect(-20, -20);//左、上偏移20
    dc.SetTextColor(RGB(0, 0, 0));//黑色
    dc.DrawText(TEXT("DrawText画文本"), &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    //---------------------------------------------------------------------//
    dc.TextOut(10, 10, TEXT("TextOut画文本"));//方式二,起始点(10,10)
    //-------------------- 画字方式三 -------------------------------------//
    LOGFONT lf; //逻辑字
    ::ZeroMemory(&lf, sizeof(lf));//清内存,::可以调用API函数
    lf.lfHeight = 120;//12号字
    lf.lfWeight = FW_BOLD;//加粗
    lf.lfItalic = TRUE;//斜体
    ::lstrcpy(lf.lfFaceName, TEXT("Times New Roman"));

    CFont font2;
    font2.CreatePointFontIndirect(&lf);
    dc.SelectObject(&font2);
    dc.TextOut(10, 50, TEXT("逻辑字"));
}

 

以上是关于mfc中CClientDC(this)的this怎么获得?的主要内容,如果未能解决你的问题,请参考以下文章

MFC当中CClientDC类当中的MoveTo与LineTo的运用

关于消息传递时 this指针的问题 MFC高手进

MFC画图概述

MFC-GDI和GDI+

MFC OnPaint被不断调用的问题

MFC中怎样获取指定窗口的句柄