MFC控件第一讲.DC编程
MFC控件第一讲.DC编程
一丶简介
什么是DC,DC有什么用.
DC成为设备描述符表. DC的作用就是可以进行绘制. 比如我们的窗口都是绘制出来的. DC可以简单理解为.没一个窗口程序都有一块内存用于绘制.我们只需要获取这块内存即可.
MFC 中 的CDC类 就是封装了HDC 跟GDI函数. 并且派生出了四个不同场景下的类.
注意HDC 则是windows中真正的DC. 配合GDI函数进行操作绘制的. MFC只不过封装了一下.
派生出来的类常用的有三个.
1.CPaintDc 用户在窗口的客户区画图. 仅限与OnPaint处理程序. OnPaint 就是一个消息处理函数.
2.CClieentDC 用户在窗口客户区画图.除了 OnPaint外的任何处理程序. 除了消息处理函数都可以进行操作
3.CWindowsDc 用于在窗口内任意地方画图.包括非客户区. 任何一个地方都可以编写代码操作.
二丶CPaintDc用法
比如我们的MFC框架中已经给我们写好了这个处理函数.
代码如下.
void CCDCDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } }
我们也可以自己写一个.比如使用Win32的知识画一段字.
HDC hdc = ::GetDC(m_hWnd); //用于绘制的DC PAINTSTRUCT ps; //保存DC的信息结构体 ::BeginPaint(m_hWnd, &ps); ::DrawText(hdc, TEXT("Hello"), wcslen(TEXT("Hello")), CRect(200, 200, 200, 200), DT_SINGLELINE);//单行显示 ::EndPaint(m_hWnd, &ps);
如果是MFC下.则用CpaIntDc 传入this即可.
三丶CClientDc用法
CClientDc则是可以不用再OnPaint中使用.我们可以按钮点击就使用了.
void CCDCDlg::OnBnClickedButton1() { CClientDC dc(this); dc.Ellipse(0, 0, 100, 100); 画个圆 }
上方代码则是我们在客户区画个圆. 在我们点击之后.
我们的CWindowsDc是一样的.只不过比CClientDc用的更广一点.
关于GDI函数.我们可以下一个MFC类库详解. 有中文版的.或者你查询MSDN都可以.输入你想用的DC类.则会出现对应函数.
四丶DC中常见的属性
常见的属性可以用下图表示.并且有对应的方法
我们可以通过这些方法设置跟获取.
坚持两字,简单,轻便,但是真正的执行起来确实需要很长很长时间.当你把坚持两字当做你要走的路,那么你总会成功. 想学习,有问题请加群.群号:725864912(收费)群名称: 逆向学习小分队 群里有大量学习资源. 以及定期直播答疑.有一个良好的学习氛围. 涉及到外挂反外挂病毒 司法取证加解密 驱动过保护 VT 等技术,期待你的进入。
详情请点击链接查看置顶博客 https://www.cnblogs.com/iBinary/p/7572603.html
本文来自博客园,作者:iBinary,未经允许禁止转载 转载前可联系本人.对于爬虫人员来说如果发现保留起诉权力.https://www.cnblogs.com/iBinary/p/9651204.html
欢迎大家关注我的微信公众号.不定期的更新文章.更新技术. 关注公众号后请大家养成 不白嫖的习惯.欢迎大家赞赏. 也希望在看完公众号文章之后 不忘 点击 收藏 转发 以及点击在看功能. QQ群: