Windows API

MFC CDC =》 windows HDC

Windows使用与设备无关的图形设备环境(DC:Device Context)进行显示

Invalidate():使整个窗口客户区无效,待重绘

标记一个需要重绘的无效区域,并不意味着调用该函数后就立刻进行重绘

GetClientRect(winuser.h): 获取窗口客户区

CreateCompatibleDC:创建一个与指定设备兼容的内存设备上下文环境(DC)

Windows不允许程序员直接访问硬件,它对屏幕的操作是通过环境设备(DC)来完成的。屏幕上每一个窗口都对应一个DC。

可以把DC想象成一个视频缓冲区,对这这个缓冲区的操作,会表现在这个缓冲区对应的屏幕窗口上。

在窗口的DC之外,可以建立自己的DC(不对应窗口),这个方法就是CreateCompatibleDC。这个DC就是一个内存缓冲区,通过这个DC你可以把和它兼容的窗口DC保存到这个DC中,就是说你可以通过它在不同的DC之间拷贝数据

例如:你先在这个DC中建立好数据,然后在拷贝到窗口的DC就是完成了这个窗口的刷新。

hDeskTop = GetDesktopWindow();
hDeskTopDC = GetDC(hDeskTop);//桌面窗口DC
hMemDC = CreateCompatibleDC(hDeskTopDC);//这建立的就是与桌面窗口兼容的DC

CreateCompatibleDc函数只适用于支持光栅操作的设备,应用程序可以通过调用GetDeviceCaps函数来确定一个设备是否支持这些操作。

当不再需要内存设备上下文环境时,可调用DeleteDc函数删除它。

用双缓冲的话还要再定义一个位图对象吧,然后用CreateCompatibleBitmap建立一个与屏幕显示兼容的位图,再用SelectObject将位图选入到内存显示设备中。

https://blog.csdn.net/shellching/article/details/18405185

CDC绘图

CPaintDC dc(this); // device context for painting

    QRect ClientRect;
    ::GetClientRect(this, &ClientRect);  // 获取窗口客户区
    HDC memDC;  // 定义一个位图对象
    memDC = ::CreateCompatibleDC(&dc);  // 建立与屏幕显示兼容的内存显示设备

    // 建立与屏幕显示兼容的内存显示设备
    HBITMAP btScreen;
    btScreen = ::CreateCompatibleBitmap(&dc, ClientRect.Width(), ClientRect.Height());

    // 将位图选入到内存显示设备中(只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上)
    HBITMAP* pOld_bmp = ::SelectObject(&memDC, &btScreen);

    //CBrush brush(RGB(255,255,255));
    COLORREF cr1 = RGB(159,159,207);
    COLORREF cr2 = RGB(240,242,249);
    FillGradientRect(&memDC, &ClientRect, 0, cr1, cr2);  // 外框颜色渐变

画线

// MFC
//表示设置起点为(x1,y1),单纯的设置一个起点,并不画线
pDC->MoveTo(x1,y1);
//由设置的起点到(x2,y2)
pDc->LineTo(x2,y2);

// win
::MoveToEx(pDC, iPos, 6, NULL);  // 设置起点
::LineTo(pDC, iPos,23);  // 终点

GetTickCount() 返回自设备启动后的毫秒数(不含系统暂停时间)

::GetDC() 检索一指定窗口的客户区域或整个屏幕的显示 设备上下文环境的句柄

GetDeviceCaps() 检索指定设备的设备指定信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值