当前位置: 首页 > news >正文

北京网站备案拍照地址鼓楼互联网营销师

北京网站备案拍照地址鼓楼,互联网营销师,做化工贸易要用那些网站推广,wordpress 选择语言小结#xff1a; 前面讲到的windows窗口对象#xff0c;在windows下用句柄来代表之#xff0c;并且用了一个数据结构WNDCLASS#xff08;窗口类#xff09;来描述之。同理#xff0c;windows的Gdi对象也有一些句柄来代表之#xff08;比如hPen等#xff09;#xff0c…  小结 前面讲到的windows窗口对象在windows下用句柄来代表之并且用了一个数据结构WNDCLASS窗口类来描述之。同理windows的Gdi对象也有一些句柄来代表之比如hPen等同时也有一个数据结构来描述之即设备描述表Device Context而且其本身也有句柄因此也可以看作是windows的一个对象。 由于设备描述表这个数据结果不像WNDCLASS那样单一因为他要描述多个绘图设备。所以MFC同时也封装设备描述表并用几个类来代表不同的设备描述表他们的基类都是CDC。这里特别讲到了当直接使用CDC这个基类的情况可以看出CDC这个基类的构造函数中并没有创建任何的设备描述表所以要使用时创建一个设备描述表堆上栈上都可以。同时这个基类的析构函数不是虚拟的所以不必担心该对象释放时它的句柄没有释放。 windows的Gdi对象就是通过CGdiObject来封装。           设备描述表     设备描述表概述           当一个应用程序使用GDI函数时必须先装入特定的设备驱动程序然后为绘制窗口准备设备描述表比如指定线的宽度和颜色、刷子的样式和颜色、字体、剪裁区域等等。不像其他Win32结构设备描述表不能被直接访问只能通过系列Win32函数来间接地操作。 如同Windows“窗口类”一样设备描述表也是一种Windows数据结构用来描述绘制窗口所需要的信息。它定义了一个坐标映射模式、一组GDI图形对象及其属性。这些GDI对象包括用于画线的笔绘图、填图的刷子位图调色板剪裁区域及路径(Path)。 表2-2列出了设备描述表的结构和各项缺省值表2-3列出了设备描述表的类型表2-4显示设备描述表的类型。 表2-2 设备描述表的结构 属性 缺省值 Background color Background color setting from Windows Control Panel (typically, white) Background mode OPAQUE Bitmap None Brush WHITE_BRUSH Brush origin (0,0) Clipping region Entire window or client area with the update region clipped, as appropriate. Child and pop-up windows in the client area may also be clipped Palette DEFAULT_PALETTE Current pen position (0,0) Device origin Upper left corner of the window or the client area Drawing mode R2_COPYPEN Font SYSTEM_FONT (SYSTEM_FIXED_FONT for applications written to run with Windows versions 3.0 and earlier) Intercharacter spacing 0 Mapping mode MM_TEXT Pen BLACK_PEN Polygon-fill mode ALTERNATE Stretch mode BLACKONWHITE Text color Text color setting from Control Panel (typically, black) Viewport extent (1,1) Viewport origin (0,0) Window extent (1,1) Window origin (0,0)   表2-3 设备描述表的分类 Display 显示设备描述表提供对视频显示设备上的绘制操作的支持 Printer 打印设备描述表提供对打印机、绘图仪设备上的绘制操作的支持 Memory 内存设备描述表提供对位图操作的支持 Information 信息设备描述表提供对操作设备信息获取的支持 表2-3中的显示设备描述表又分三种类型如表2-4所示。 表2-4 显示设备描述表的分类 名称 特点 功能 Class Device Contexts 提供对Win16的向后兼容   Common Device Contexts 在Windows系统的高速缓冲区数量有限 Applicaion获取设备描述表时Windows用缺省值初始化该设备描述表Application使用它完成绘制操作然后释放 Private Device Contexts 没有数量限制用完不需释放一次获取多次使用 多次使用过程中每次设备描述表属性的任何修改或变化都会被保存以支持快速绘制     1使用设备描述表的步骤 要使用设备描述表一般有如下步骤   获取或者创建设备描述表     必要的话改变设备描述表的属性     使用设备描述表完成绘制操作     释放或删除设备描述表。       Common设备描述表通过::GetDC::GetDCEx::BeginPaint来获得一个设备描述表用毕用::ReleaseDC或::EndPaint释放设备描述表 Printer设备描述表通过::CreateDC创建设备描述表用::DeleteDC删除设备描述表。 Memory设备描述表通过::CreateCompatibleDC创建设备描述表用::DeleteDC删除。 Information设备描述表通过::CreateIC创建设备描述表用::DeleteDC删除。 2改变设备描述表属性的途径 要改变设备描述表的属性可通过以下途径 用::SelectObject选入新的除调色板以外的GDI Object到设备描述表中 对于调色板使用::SelectPalette函数选入逻辑调色板并使用::RealizePalette把逻辑调色板的入口映射到物理调色板中。 用其他API函数改变其他属性如::SetMapMode改变映射模式。   设备描述表在MFC中的实现       MFC提供了CDC类作为设备描述表类的基类它封装了Windows的HDC设备描述表对象和相关函数。   CDC类   CDC类包含了各种类型的Windows设备描述表的全部功能封装了所有的Win32 GDI 函数和设备描述表相关的SDK函数。在MFC下使用CDC的成员函数来完成所有的窗口绘制工作。 CDC 类的结构示意图2-2所示。   CDC类有两个成员变量m_hDCm_hAttribDC它们都是Windows设备描述表句柄。CDC的成员函数作输出操作时使用m_Hdc要获取设备描述表的属性时使用m_hAttribDC。 在创建一个CDC类实例时缺省的m_hDC等于m_hAttribDC。如果需要的话程序员可以分别指定它们。例如MFC框架实现CMetaFileDC类时就是如此CMetaFileDC从物理设备上读取设备信息输出则送到元文件metafile上所以m_hDC和m_hAttribDC是不同的各司其责。还有一个类似的例子打印预览的实现一个代表打印机模拟输出一个代表屏幕显示。 CDC封装::SelectObject(HDC hdcHGDIOBJECT hgdiobject)函数时采用了重载技术即它针对不同的GDI对象提供了名同而参数不同的成员函数 SelectObject(CPen *pen)用于选入笔 SelectObject(CBitmap* pBitmap)用于选入位图 SelectObject(CRgn *pRgn)用于选入剪裁区域 SelectObject(CBrush *pBrush)用于选入刷子 SelectObject(CFont *pFont)用于选入字体 至于调色板使用SelectPalette(CPalette *pPaletteBOOL bForceBackground )选入调色板到设备描述表使用RealizePalletter()实现逻辑调色板到物理调色板的映射。   从CDC派生出功能更具体的设备描述表       从CDC 派生出四个功能更具体的设备描述表类。层次如图2-3所示。     下面分别讨论派生出的四种设备描述表。   CCientDC       代表窗口客户区的设备描述表。其构造函数CClientDC(CWnd *pWin)通过::GetDC获取指定窗口的客户区的设备描述表HDC并且使用成员函数Attach把它和CClientDC对象捆绑在一起其析构函数使用成员函数Detach把设备描述表句柄HDC分离出来并调用::ReleaseDC释放设备描述表HDC。   CPaintDC       仅仅用于响应WM_PAINT消息时绘制窗口因为它的构造函数调用了::BeginPaint获取设备描述表HDC并且使用成员函数Attach把它和CPaintDC对象捆绑在一起析构函数使用成员函数Detach把设备描述表句柄HDC分离出来并调用::EndPaint释放设备描述表HDC而::BeginPaint和::EndPaint仅仅在响应WM_PAINT时使用。   CMetaFileDC       用于生成元文件。   CWindowDC       代表整个窗口区(包括非客户区)的设备描述表。其构造函数CWindowDC(CWnd *pWin)通过::GetWindowDC获取指定窗口的客户区的设备描述表HDC并使用Attach把它和CWindowDC对象捆绑在一起其析构函数使用Detach把设备描述表HDC分离出来调用::ReleaseDC释放设备描述表HDC。   MFC设备描述表类的使用         使用CPaintDC、CClientDC、CWindowDC的方法   首先定义一个这些类的实例变量通常在栈中定义。然后使用它。 例如MFC中CView对WM_PAINT消息的实现方法如下 void CView::OnPaint() { // standard paint routine CPaintDC dc(this); OnPrepareDC(dc); OnDraw(dc); } 在栈中定义了CPaintDC类型的变量dc随着构造函数的调用获取了设备描述表设备描述表使用完毕超出其有效范围就被自动地清除随着析构函数的调用其获取的设备描述表被释放。 如果希望在堆中创建例如 CPaintDC *pDC pDC new CPaintDC(this) 则在使用完毕时用delete删除pDC: delete pDC;     直接使用CDC       需要注意的是在生成CDC对象的时候并不像它的派生类那样在构造函数里获取相应的Windows设备描述表。最好不要使用::GetDC等函数来获取一个设备描述表而是创建一个设备描述表。其构造函数如下 CDC::CDC() { m_hDC NULL; m_hAttribDC NULL; m_bPrinting FALSE; } 其析构函数如下 CDC::~CDC() { if (m_hDC ! NULL) ::DeleteDC(Detach()); } 在CDC析构函数中如果设备描述表句柄不空则调用DeleteDC删除它。这是直接使用CDC时最好创建Windows设备描述表的理由。如果设备描述表不是创建的则应该在析构函数被调用前分离出设备描述表句柄并用::RealeaseDC释放它释放后m_hDC为空则在析构函数调用时不会执行::DeleteDC。当然不用担心CDC的派生类的析构函数调用CDC的析构函数因为CDC::~CDC()不是虚拟析构函数。 直接使用CDC的例子是内存设备上下文例如 CDC dcMem; //声明一个CDC对象 dcMem.CreateCompatibleDC(dc); //创建设备描述表 pbmOld dcMem.SelectObject(m_bmBall);//更改设备描述表属性 …//作一些绘制操作   dcMem.SelectObject(pbmOld);//恢复设备描述表的属性 dcMem.DeleteDC(); //可以不调用而让析构函数去删除设备描述表   GDI对象       在讨论设备描述表时已经多次涉及到GDI对象。这里需强调一下GDI对象要选入Windows 设备描述表后才能使用用毕要恢复设备描述表的原GDI对象并删除该GDI对象。 一般按如下步骤使用GDI对象 Create or get a GDI OBJECT hNewGdi;   hOldGdi ::SelectObject(hdc, hNewGdi) …… ::SelectObject(hdc, hOldGdi) ::DeleteObject(hNewGdi) 先创建或得到一个GDI对象然后把它选入设备描述表并保存它原来的GDI对象用毕恢复设备描述表原来的GDI对象并删除新创建的GDI对象。 需要指出的是如果hNewGdi是一个Stock GDI对象可以不删除删除也可以。通过 HGDIOBJ GetStockObject( int fnObject // type of stock object ); 来获取Stock GDI对象。     MFC GDI对象   MFC用一些类封装了Windows GDI对象和相关函数层次结构如图2-4所示     CGdiObject封装了Windows GDI Object共有的特性。其派生类在继承的基础上主要封装了各类GDI的创建函数以及和具体GDI对象相关的操作。   CGdiObject的构造函数仅仅让m_hObject为空。如果m_hObject不空其析构函数将删除对应的Windows GDI对象。MFC GDI对象和Windows GDI对象的关系如图2-5所示。   使用MFC GDI类的使用       首先创建GDI对象可分一步或两步创建。一步创建就是构造MFC对象和Windows GDI对象一步完成两步创建则先构造MFC对象接着创建Windows GDI对象。然后把新创建的GDI对象选进设备描述表取代原GDI对象并保存。最后恢复原GDI对象。例如 void CMyView::OnDraw(CDC *pDC) { CPen penBlack; //构造MFC CPen对象 if (penBlack.CreatePen(PS_SOLID, RGB(0, 0, 0))) { CPen *pOldPen pDC-SelectObject(penBlack)); //选进设备表保存原笔 … pDC-SelectObject(pOldPen); //恢复原笔 }else { … } } 和在SDK下有一点不同的是这里没有DeleteObject。因为执行完OnDraw后栈中的penBlack被销毁它的析构函数被调用导致DeleteObject的调用。 还有一点要说明 pDC-SelectObject(penBlack)返回了一个CPen *指针也就是说它根据原来PEN的句柄创建了一个MFC CPen对象。这个对象是否需要删除呢不必要因为它是一个临时对象MFC框架会自动地删除它。当然在本函数执行完毕把控制权返回给主消息循环之前该对象是有效的。转载于:https://www.cnblogs.com/ghw0501/archive/2012/02/24/4733925.html
http://www.zqtcl.cn/news/912093/

相关文章:

  • 网站建设怎么链接表格手机做外贸有什么好的网站
  • 深圳开发网站建设哪家好外贸网络营销培训
  • 广州智迅网络做网站免费下载ps素材网站
  • 什么网站时候做伪静态开发软件定制
  • 找人做网站 多少钱西宁市公司网站建设
  • 网页设计 教程网站找权重高的网站方法
  • 网站建设本地还是外地重庆seo排名方法
  • 那个网站做网编好昨晚兰州发生了什么事
  • 温州建设局网站首页哪里可以学做资料员的网站
  • 网站怎样在360做优化wordpress文章图片在线裁剪
  • 彭州建设网站建设网站哪间公司比较好
  • qq空间网站根目录慧聪网首页
  • 制作小程序和网站的公司杭州品牌设计公司
  • 显示网站翻页代码wordpress 金融 模板下载
  • 用双语网站做seo会不会phpmysql网站
  • 长沙专业网站建设公司优惠券怎么做自己的网站
  • 做网站如何宣传怎么弄公众号
  • seo网站策划书网站建设资金投入
  • 做网站东莞东莞建网站wordpress 多文件上传
  • 公司注册流程聊城网站优化案例
  • 化妆品网站建设实施方案杭州seo代理公司
  • 网站小图片素材高质量外链
  • 福州个人建站模板有没有一些有试卷做的网站
  • 教你如何建设网站阿里去旺道seo优化
  • 想做一个个人网站怎么做网站组成部分
  • 旅游门户网站模板下载全国最新产品代理商
  • 老河口网站设计中企动力科技做什么的
  • 如何建立网站管理系统甘孜州住房和城乡规划建设局网站
  • 阿里网站建设新闻门户网站什么意思
  • 桂林微信网站wordpress 连接信息