MFC/Windows API 使用过的函数(持续更新)

 1 /*******************使用默认画笔对象****************************
 2     //
 3     //绘制矩形
 4     pDC->MoveTo(50, 50); //返回值是一个指向先前位置的CPoint对象,它比结构Point对象多了一些成员函数
 5     pDC->LineTo(50, 200);//此时当前位置也变为(50, 200)
 6     pDC->LineTo(150, 200);
 7     pDC->LineTo(150, 50);
 8     pDC->LineTo(50, 50);
 9 
10     //Arc函数的两个重载版本---Arc函数对当前位置没有影响
11     //Arc不涉及画刷,可以绘制椭圆的任意一段弧
12     pDC->Arc(50, 50, 150, 150, 100, 50, 150, 100);   //注意起点到终点是按照逆时针绘制的
13     CRect* pRect = new CRect(250, 50, 300, 100);
14     CPoint Start(275, 100);
15     CPoint End(250, 75);
16     pDC->Arc(pRect, Start, End);
17     delete pRect;
18     ****************************************************************/
19 
20     /*******************使用自定义的CPen画笔对象****************************
21     CPen aPen;
22     if(aPen.CreatePen(PS_SOLID, 1, RGB(255, 0, 0)))
23     {
24         //要使用画笔,必须把它选入正在绘图的设备环境中
25         CPen* oldPen = pDC->SelectObject(&aPen);   //参数是指向画笔对象的指针,同时返回一个指向先前画笔对象的指针
26         pDC->Arc(50, 50, 150, 150, 100, 50, 150, 100);
27         CRect* pRect = new CRect(250, 50, 300, 100);
28         CPoint Start(275, 100);
29         CPoint End(250, 75);
30         pDC->Arc(pRect, Start, End);
31         delete pRect;
32         pDC->SelectObject(oldPen);  //恢复先前的画笔
33     }
34     ****************************************************************/

 selectObject与selectStockObject区别:

  SelectStockObject选择的是系统预定义的GDI对象
  SelectObject选择你自己自定义的的GDI对象

    说白了,Stock Object就系统已创建好的,大家共用,不用你去delete,你也delete不了而你自己建的东东,用完后要从HDC中选出来(选出也         用 SelectObject),delete掉,否则致使资源泄露!

  对于使用库存画刷,然后在完成绘图后恢复以前的画刷这样一种情况,典型的编码方式是:

 

 1 CBrush* pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
 2 
 3 // draw something...
 4 
 5 pDC->SelectObject(pOldBrush);      //Restore the old brush
 6 
 7 /*
 8 标注1:
 9 7种标准画刷都由预定义的符号常量标示
10         GRAY_BRUSH              灰色
11         BLACK_BRUSH            黑色
12         HOLLOW_BRUSH        中空的,凹的
13         LTGRAY_BRUSH          浅灰色
14        WHITE_BRUSH            白色
15        NULL_BRUSH               空画刷
16        DKGRAY_BRUSH           深灰色
17 标注2:
18 上边的函数返回值是一个CGdiObject*类型的指针,但是需要将其进行强制类型转换以便可以选择以前的对象并恢复它,这是因为对于选择的每一种对象,SelectObject() 函数都将被重载,任何版本的SelectObject()函数都不接受指向以CGdiObject对象为参数的指针,但是有一些可以接受CBrush*、CPen*的参数,以及指向其他GDI对象的指针。
19 */

 

 获取窗口大小和改变窗口大小的函数

 1 void CTestDlg::OnBnClickedBtnChange()
 2 {
 3     // 变换按钮的Caption
 4     CString str;
 5     if( GetDlgItemText( IDC_BTN_CHANGE, str ), str == "收缩<<" )
 6     {
 7         SetDlgItemText( IDC_BTN_CHANGE, _T("扩展>>") );
 8     }
 9     else
10     {
11         SetDlgItemText( IDC_BTN_CHANGE, _T("收缩<<") );
12     }
13     // 获取原来对话框和改变后的对话框的大小
14     static CRect rectLarge;
15     static CRect rectSmall;
16     if( rectLarge.IsRectNull() )   // 第一次点击该按钮时获取大小即可
17     {
18         CRect rectSeparator;        // 利用添加的分割线(用picture control控件设置sunken属性为ture实现的)获取切割的位置
19         GetWindowRect( rectLarge );
20         GetDlgItem( IDC_SEPARATOR ) -> GetWindowRect( rectSeparator );
21         rectSmall.left = rectLarge.left;
22         rectSmall.right = rectSeparator.right;
23         rectSmall.top = rectLarge.top;
24         rectSmall.bottom = rectLarge.bottom;
25     }
26 
27     // 改变对话框的大小
28     if( str == "收缩<<" )
29     {
30         SetWindowPos( NULL, 0, 0, rectSmall.Width(), rectSmall.Height(), SWP_NOMOVE | SWP_NOZORDER );
31         // 最后一个参数的意思是忽略前边两个设置的参数值,保持窗口的位置和重叠多个窗口时此窗口的Z方向次序不变
32     }
33     else
34     {
35         SetWindowPos( NULL, 0, 0, rectLarge.Width(), rectLarge.Height(), SWP_NOMOVE | SWP_NOZORDER );
36     }
37 }

 

 窗口创建之后如何修改窗口外观风格---SetClassLong函数的使用:

1、修改窗口图标是在框架类的OnCreate函数return语句之前调用以下语句,将窗口的图标编程系统错误提示图标:

 SetClassLong( m_hWnd, GCL_HICON, (LONG)LoadIcon(NULL, IDI_ERROR) );

2、修改窗口的北京色和光标在视类的OnCretate函数的return语句之前调用以下语句(视类的WM_CREATE相应函数OnCreate函数要自己添加),将改变窗口背景和光标

1     SetClassLong( m_hWnd, GCL_HBRBACKGROUND, (LONG)GetStockObject(BLACK_BRUSH) );
2     SetClassLong( m_hWnd, GCL_HCURSOR, (LONG)LoadCursor(NULL, IDC_NO) );

 3、可以利用此函数实现框架图标的动态变换,可以将图标句柄存入数组,然后在框架类的OnCreate函数中设置定时器,用定时器响应函数OnTimer函数中通过SetClassLong函数实现图标的动态变换;

 

你可能感兴趣的:(windows)