MFC/Windows API 使用过的函数(持续更新)
- /*******************使用默认画笔对象****************************
- //
- //绘制矩形
- pDC->MoveTo(50, 50); //返回值是一个指向先前位置的CPoint对象,它比结构Point对象多了一些成员函数
- pDC->LineTo(50, 200);//此时当前位置也变为(50, 200)
- pDC->LineTo(150, 200);
- pDC->LineTo(150, 50);
- pDC->LineTo(50, 50);
- //Arc函数的两个重载版本---Arc函数对当前位置没有影响
- //Arc不涉及画刷,可以绘制椭圆的任意一段弧
- pDC->Arc(50, 50, 150, 150, 100, 50, 150, 100); //注意起点到终点是按照逆时针绘制的
- CRect* pRect = new CRect(250, 50, 300, 100);
- CPoint Start(275, 100);
- CPoint End(250, 75);
- pDC->Arc(pRect, Start, End);
- delete pRect;
- ****************************************************************/
- /*******************使用自定义的CPen画笔对象****************************
- CPen aPen;
- if(aPen.CreatePen(PS_SOLID, 1, RGB(255, 0, 0)))
- {
- //要使用画笔,必须把它选入正在绘图的设备环境中
- CPen* oldPen = pDC->SelectObject(&aPen); //参数是指向画笔对象的指针,同时返回一个指向先前画笔对象的指针
- pDC->Arc(50, 50, 150, 150, 100, 50, 150, 100);
- CRect* pRect = new CRect(250, 50, 300, 100);
- CPoint Start(275, 100);
- CPoint End(250, 75);
- pDC->Arc(pRect, Start, End);
- delete pRect;
- pDC->SelectObject(oldPen); //恢复先前的画笔
- }
- ****************************************************************/
selectObject与selectStockObject区别:
SelectStockObject选择的是系统预定义的GDI对象
SelectObject选择你自己自定义的的GDI对象
说白了,Stock Object就系统已创建好的,大家共用,不用你去delete,你也delete不了而你自己建的东东,用完后要从HDC中选出来(选出也 用 SelectObject),delete掉,否则致使资源泄露!
对于使用库存画刷,然后在完成绘图后恢复以前的画刷这样一种情况,典型的编码方式是:
- CBrush* pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
- // draw something...
- pDC->SelectObject(pOldBrush); //Restore the old brush
- /*
- 标注1:
- 7种标准画刷都由预定义的符号常量标示
- GRAY_BRUSH 灰色
- BLACK_BRUSH 黑色
- HOLLOW_BRUSH 中空的,凹的
- LTGRAY_BRUSH 浅灰色
- WHITE_BRUSH 白色
- NULL_BRUSH 空画刷
- DKGRAY_BRUSH 深灰色
- 标注2:
- 上边的函数返回值是一个CGdiObject*类型的指针,但是需要将其进行强制类型转换以便可以选择以前的对象并恢复它,这是因为对于选择的每一种对象,SelectObject() 函数都将被重载,任何版本的SelectObject()函数都不接受指向以CGdiObject对象为参数的指针,但是有一些可以接受CBrush*、CPen*的参数,以及指向其他GDI对象的指针。
- */
获取窗口大小和改变窗口大小的函数
- void CTestDlg::OnBnClickedBtnChange()
- {
- // 变换按钮的Caption
- CString str;
- if( GetDlgItemText( IDC_BTN_CHANGE, str ), str == "收缩<<" )
- {
- SetDlgItemText( IDC_BTN_CHANGE, _T("扩展>>") );
- }
- else
- {
- SetDlgItemText( IDC_BTN_CHANGE, _T("收缩<<") );
- }
- // 获取原来对话框和改变后的对话框的大小
- static CRect rectLarge;
- static CRect rectSmall;
- if( rectLarge.IsRectNull() ) // 第一次点击该按钮时获取大小即可
- {
- CRect rectSeparator; // 利用添加的分割线(用picture control控件设置sunken属性为ture实现的)获取切割的位置
- GetWindowRect( rectLarge );
- GetDlgItem( IDC_SEPARATOR ) -> GetWindowRect( rectSeparator );
- rectSmall.left = rectLarge.left;
- rectSmall.right = rectSeparator.right;
- rectSmall.top = rectLarge.top;
- rectSmall.bottom = rectLarge.bottom;
- }
- // 改变对话框的大小
- if( str == "收缩<<" )
- {
- SetWindowPos( NULL, , , rectSmall.Width(), rectSmall.Height(), SWP_NOMOVE | SWP_NOZORDER );
- // 最后一个参数的意思是忽略前边两个设置的参数值,保持窗口的位置和重叠多个窗口时此窗口的Z方向次序不变
- }
- else
- {
- SetWindowPos( NULL, , , rectLarge.Width(), rectLarge.Height(), SWP_NOMOVE | SWP_NOZORDER );
- }
- }
窗口创建之后如何修改窗口外观风格---SetClassLong函数的使用:
1、修改窗口图标是在框架类的OnCreate函数return语句之前调用以下语句,将窗口的图标编程系统错误提示图标:
- SetClassLong( m_hWnd, GCL_HICON, (LONG)LoadIcon(NULL, IDI_ERROR) );
2、修改窗口的北京色和光标在视类的OnCretate函数的return语句之前调用以下语句(视类的WM_CREATE相应函数OnCreate函数要自己添加),将改变窗口背景和光标
- SetClassLong( m_hWnd, GCL_HBRBACKGROUND, (LONG)GetStockObject(BLACK_BRUSH) );
- SetClassLong( m_hWnd, GCL_HCURSOR, (LONG)LoadCursor(NULL, IDC_NO) );
3、可以利用此函数实现框架图标的动态变换,可以将图标句柄存入数组,然后在框架类的OnCreate函数中设置定时器,用定时器响应函数OnTimer函数中通过SetClassLong函数实现图标的动态变换;
MFC/Windows API 使用过的函数(持续更新)的更多相关文章
- Windows API中几个函数的总结
[DllImport("User32.dll", EntryPoint = "FindWindow")] public static extern IntPtr ...
- Windows Phone 8 开发系列(持续更新中)
1. 从应用列表再次点击应用,如何恢复到上次浏览的页面呢? 2. Windows Phone 文本框的 UpdateSourceTrigger 属性不支持 PropertyChanged 怎么办? 3 ...
- Windows操作技巧 之二(持续更新)
定时自动关机 shutdown -s -t 3600 shutdown [/i | /l | /s | /r | /g | /a | /p | /h | /e] [/f /m \\computer] ...
- windows常用运行命令收集(持续更新)
快捷键打开运行窗口:Windows + R > calc(计算器) > gpedit.msc(本地组策略编辑器) > regedit(注册表) > mstsc(远程桌面) &g ...
- php 常用的好函数(持续更新)
parse_url parse_url $url = "http://www.electrictoolbox.com/php-extract-domain-from-full-url/&qu ...
- 记录 C++ STL 中 一些好用的函数--持续更新 (for_each,transform,count_if,find_if)
在日常的编程中,有这么几种操作还是比较常见的: 把一组数据都赋值成一个数,在一组数据中查找一个数,统计一组数据中符合条件的数等等. 一般的写法可以用循环,没有什么是循环不能搞定的.假如在这里怎么用介绍 ...
- MySQL的一些常用sql函数(持续更新。。)
1. 字符串拼接函数 :CONCAT(str1,str2,...) SELECT CONCAT('AAA','BBB') STR; //AAABBB 2. 判断是否为null,为null就指定另外一个 ...
- STL 一些常用的STL函数(持续更新
先说一下 一边要用到算法的东西一般要加#include<algorithm>头文件 一.栈和队列 1 栈 :一种线性表 特点 后进先出 头文件 #include<stack&g ...
- python中一些有用的函数------持续更新中
strip() 函数 用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列. str2 = " Runoob " # 去除首尾空格 print (str2.strip()) ...
随机推荐
- Codeforces.997C.Sky Full of Stars(容斥 计数)
题目链接 那场完整的Div2(Div1 ABC)在这儿.. \(Description\) 给定\(n(n\leq 10^6)\),用三种颜色染有\(n\times n\)个格子的矩形,求至少有一行或 ...
- css基础 行内元素 块级元素
1.行内元素(内联元素 inlineElement) 特点:不占据一行,无法设置宽高及行高,其宽度随着内容增加,高度随字体大小而改变,margin只对左右起作用,上下无效. 常见有: a - 锚点,b ...
- MongoDB数组修改器更新数据(转)
MongoDB数组修改器更新数据 这里,我们将了解一下数组修改器.数组,是我们经常看到和使用到的且非常有用的数据结构:它不仅可以通过索进行引用,还可以作为集合来使用.数组修改器,顾名思义,它是用 ...
- 实现DIV层内的文字垂直居中(转)
有时候,为了网页设计的美观,需要把div+css设计的页面里的某些div层里的文字垂直居中,包括多行文字以及单行文字:方法有不少,但真正能实现而代码又简洁的介绍不多,flymorn就为大家介绍几种适用 ...
- .net core中的System.Buffers名字空间
最近研究了一下.net core 2.1的基础类库,发现它引入了一个System.Buffers名字空间,里面提供了一系列比较实用的对象,便简单的管中窥豹浏览一下. ArrayPool<T> ...
- 【Go命令教程】1. 标准命令详解
Go 语言的 1.5 版本在标准命令方面有了重大变更.这倒不是说它们的用法有多大的变化,而是说它们的底层支持已经大变样了.让我们先来对比一下 $GOROOT/pkg/tool/< 平台相关目录 ...
- android操作sqlite数据库及心得
写这篇文章主要是网上的对sqlite的操作太多且太杂,非常多时候都不能非常好的运用到自己的项目中,结构不清晰,我自己写了一篇适合刚刚接触的人看的操作方法. 近来用android时要将一些数据保存起来, ...
- 有关AngularJS请求Web API资源的思路
页面部分大致如下: <body ng-app="productManagement"> ... <div ng-include="'app/produc ...
- 项目从.NET 4.5迁移到.NET 4.0遇到的问题
当把项目从.NET 4.5迁移到.NET 4.0时,遇到的问题和解决如下: 在"属性--应用程序--目标框架"设置成.NET 4.0版本. 重新生成项目,报有关EF的错: 卸载掉项 ...
- PostgreSQL学习手册(目录)
原文地址:http://www.cnblogs.com/stephen-liu74/archive/2012/06/08/2315679.html 事实上之前有很长一段时间都在纠结是否有必要好好学习它 ...