• 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函数实现图标的动态变换;

  • 相关阅读:
    常用的网站cms内容管理系统推荐
    PageAdmin网站内容管理系统出现403错误的解决方法
    使用PageAdmin网站内容管理系统做网站的好处
    网站建设步骤及常用建站系统分享
    企业网站建设如何选择建站公司
    如何采用PageAdmin自助建站系统来进行企业网站建设
    站群系统-站群软件系统推荐
    js计算之递归
    算法之插入排序
    javaScript设计模式之常用工厂模式
  • 原文地址:https://www.cnblogs.com/dongsheng/p/3404184.html
Copyright © 2020-2023  润新知