GetDC()的返回值是CDC 也就是说是一个指向CDC类的指针 CDC类的对象它是MFC内部为我们动态构建的, 储存的地方也就是指针指向的地方, 但是具体是在代码的哪个部分生成的, 这点我们不得而知 不过需要注意的一件事情是, 用GetDC()获取的CDC对象, 必须用ReleaseDC()将其释放 如:ReleaseDC(GetDC());
至于获得CDC指针的用处有什么, 那么在这里是不可能一言而尽了 所以GUI函数都在它里面 因此只能是用到哪里, 学到哪里, 不可能全部学会
addWidget。获取一个布局页面控件的实用,用addWidget函数。QGridLayout,又叫网格布局,是将窗口分割成行和列的网格来进行排列,通常可以使用函数addWidget将被管理的控件Widget添加到窗口中。
这是修改之后的回答(增加最后一个问题):
1、在对话框上添加一个静态文本控件(Static),假设ID为IDC_STATIC,把标题删掉。为了在上面画图,把大小调大点。
2、为对话框添加成员变量如下:
CWnd m_pWndShow;
CDC m_pDCShow;
CRect m_rcShow;
CDC m_memDC;
CBitmap m_memBitmap;
3、在对话框的OnInitDialog()函数中return TRUE;语句之前添加如下代码:
m_pWndShow = GetDlgItem(IDC_STATIC);
m_pDCShow = m_pWndShow->GetDC();
m_pWndShow->GetClientRect(&m_rcShow);
m_memDCCreateCompatibleDC(m_pDCShow);
// 在下面的语句中,内存DC的图像大小,宽m_rcShowWidth(),高m_rcShowHeight()。
// 你可以设为自己的大小
m_memBitmapCreateCompatibleBitmap(m_pDCShow, m_rcShowWidth(), m_rcShowHeight());
m_memDCSelectObject(&m_memBitmap);
// 下面同样把m_rcShowWidth(),m_rcShowHeight()设为自己的大小。
m_memDCFillSolidRect(0, 0, m_rcShowWidth(), m_rcShowHeight(), RGB(255,255,255));
// 画图,为了测试,仅画一条直线
m_memDCMoveTo(10, 100);
m_memDCLineTo(100, 100);
4、在对话框的OnPaint()函数中else括弧内CDialog::OnPaint();语句之前添加如下代码:
m_pWndShow->UpdateWindow();
// 下面这个函数中第一和第二个参数指定控件上显示的左上角位置
// 倒数第三和倒数第二个参数指定内存DC的左上角位置
// 你可以根据情况修改
m_pDCShow->BitBlt(0, 0, m_rcShowWidth(), m_rcShowHeight(), &m_memDC, 0, 0, SRCCOPY);
5、为对话框添加OnDestroy()函数(WM_DESTROY消息),在里面添加如下代码:
m_memBitmapDeleteObject();
m_memDCDeleteDC();
对于缩放,则在第4步使用StretchBlt函数。
StretchBlt
函数功能:函数从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩。
函数原型:BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );
示例:m_pDCShow->BitBlt(0, 0, m_rcShowWidth(), m_rcShowHeight(), &m_memDC, 0, 0, m_rcShowWidth(), m_rcShowHeight(), SRCCOPY);
以上就是关于C++:CWnd下GetDC()函数,获取了什么存在哪里全部的内容,包括:C++:CWnd下GetDC()函数,获取了什么存在哪里、获取一个布局页面控件的实用,用哪个函数、老是在非OnPaint内调用GetDC获得DC然后绘画会不会有错误等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)