/*******************使用默认画笔对象****************************
//
//绘制矩形
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 使用过的函数(持续更新)的更多相关文章

  1. Windows API中几个函数的总结

    [DllImport("User32.dll", EntryPoint = "FindWindow")] public static extern IntPtr ...

  2. Windows Phone 8 开发系列(持续更新中)

    1. 从应用列表再次点击应用,如何恢复到上次浏览的页面呢? 2. Windows Phone 文本框的 UpdateSourceTrigger 属性不支持 PropertyChanged 怎么办? 3 ...

  3. Windows操作技巧 之二(持续更新)

     定时自动关机 shutdown -s -t 3600 shutdown [/i | /l | /s | /r | /g | /a | /p | /h | /e] [/f /m \\computer] ...

  4. windows常用运行命令收集(持续更新)

    快捷键打开运行窗口:Windows + R > calc(计算器) > gpedit.msc(本地组策略编辑器) > regedit(注册表) > mstsc(远程桌面) &g ...

  5. php 常用的好函数(持续更新)

    parse_url parse_url $url = "http://www.electrictoolbox.com/php-extract-domain-from-full-url/&qu ...

  6. 记录 C++ STL 中 一些好用的函数--持续更新 (for_each,transform,count_if,find_if)

    在日常的编程中,有这么几种操作还是比较常见的: 把一组数据都赋值成一个数,在一组数据中查找一个数,统计一组数据中符合条件的数等等. 一般的写法可以用循环,没有什么是循环不能搞定的.假如在这里怎么用介绍 ...

  7. MySQL的一些常用sql函数(持续更新。。)

    1. 字符串拼接函数 :CONCAT(str1,str2,...) SELECT CONCAT('AAA','BBB') STR; //AAABBB 2. 判断是否为null,为null就指定另外一个 ...

  8. STL 一些常用的STL函数(持续更新

    先说一下  一边要用到算法的东西一般要加#include<algorithm>头文件 一.栈和队列 1 栈 :一种线性表 特点  后进先出 头文件  #include<stack&g ...

  9. python中一些有用的函数------持续更新中

    strip() 函数 用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列. str2 = " Runoob " # 去除首尾空格 print (str2.strip()) ...

随机推荐

  1. .net加载失败的程序集重新加载

    在.net程序中,程序集是Lazy加载的,只有在用的时候才会去加载,当程序集加载失败时,会触发AppDomain.AssemblyResolve的事件,在这个事件中,我们甚至还可以进行补救,从别得地方 ...

  2. HDU 4821 String(2013长春现场赛I题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4821 字符串题. 现场使用字符串HASH乱搞的. 枚举开头! #include <stdio.h ...

  3. 关于STM32 SPI NSS的讨论

    NSS分为内部引脚和外部引脚. NSS外部引脚可以作为输入信号或者输出信号, 输入信号一般用作硬件方式从机的片选, 而输出信号一般用于主SPI去片选与之相连的从SPI. NSS从设备选择有两种模式: ...

  4. a标签连接空标签的方法

    在写页面时,想把a标签设置成空链接,方便后面数据的连接可以有几种方法. 1. <a herf=""></a> 这种方法会默认打开本页面,重新刷新一次页面. ...

  5. 哈希小demo hashCode取模

    package demo; import java.util.ArrayList; import java.util.List; class Person { private String usern ...

  6. Delphi把一张PNG横向分割成N张透明通道的图片

    Delphi新版本虽然集成了PngImage但是分割复制什么的却非常难用.稍微封装了一下.可以把一张PNG横向分割成N张.透明通道什么的都可以保持不变.typeTPngArray = array of ...

  7. javascript:currentStyle和getComputedStyle的兼容写法

    currentStyle:获取计算后的样式,也叫当前样式.最终样式. 优点:可以获取元素的最终样式,包括浏览器的默认值,而不像style只能获取行间样式,所以更常用到. 注意:不能获取复合样式如bac ...

  8. Java 反射机制(包括组成、结构、示例说明等内容)

    第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据“类的部分已经的信息”来还原“类的全部的信息”.这里“类的部分已经的信息”,可以是“类名”或“类的对象” ...

  9. js alert换行

    <script type="text/javascript"> alert("hello \n world!"); </script>

  10. WordPress主题开发:开启feed功能

    开启feed功能 步骤一:在模版文件的<head></head>元素中添加wp_head()函数,且wp_head()函数要放在</head>标签之前,而且紧邻&l ...