??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕乱码人妻无码久久,一本久久a久久精品综合香蕉,婷婷久久综合http://www.shnenglu.com/Error/category/20480.htmlzh-cnMon, 10 Mar 2014 22:16:44 GMTMon, 10 Mar 2014 22:16:44 GMT60OnPaint和OnDraw的区?http://www.shnenglu.com/Error/archive/2014/03/10/206129.htmlEnicEnicMon, 10 Mar 2014 10:12:00 GMThttp://www.shnenglu.com/Error/archive/2014/03/10/206129.htmlhttp://www.shnenglu.com/Error/comments/206129.htmlhttp://www.shnenglu.com/Error/archive/2014/03/10/206129.html#Feedback0http://www.shnenglu.com/Error/comments/commentRss/206129.htmlhttp://www.shnenglu.com/Error/services/trackbacks/206129.html

问题Q我在视囄的图象或者文字,当窗口改变后Z么不见了Q?/span>OnDraw()?/span>OnPaint()两个都是解决上面的问题,有什么不同?

{:OnDraw()?/span>OnPaint()好象兄弟俩,因ؓ它们的工作类伹{?/span>
至于不见了的问题单,因ؓ当你的窗口改变后Q会产生无效区域Q这个无效的区域需要重甅R一?/span>Windows会发送两个消?/span>WM_PAINTQ通知客户?/span> 有变化)?/span>WM_NCPAINTQ通知非客户区有变化)。非客户区的重画pȝ自己搞定了,而客户区的重画需要我们自己来完成。这需?/span>OnDraw()?/span> OnPaint()来重ȝ口?/span>

OnDraw()
?/span>OnPaint()有什么区别呢Q首先:我们先要明确CViewcL生自CWndcR?/span>OnPaint()?/span>CWnd的类成员Q同时负责响?/span>WM_PAINT消息?/span>OnDraw()?/span>CVIEW的成员函敎ͼq且没有响应消息的功能。这是Z么你?/span>VC成的E序代码Ӟ在视囄只有 OnDraw没有OnPaint的原因?/span>

其次Q要惛_屏幕上绘图或昄囑ŞQ首先需要徏立设备环?/span>DC。其?/span>DC是一个数据结构,它包含输 备(不单指你17寸的U屏昄器,q包括打印机之类的输备)的绘囑ֱ性的描述?/span>MFC提供?/span>CPaintDCcdCWindwoDCcL实时的响 应,?/span>CPaintDC支持重画?/span>

当视囑֏得无效时Q包括大的改变Q移动,被遮盖等{)Q?/span>Windows ?/span> WM_PAINT 消息发送给它。该视图?/span> OnPaint 处理函数通过创徏 CPaintDC DC对象来响应该消息q调用视囄 OnDraw 成员函数。通常我们不必~写重写?/span> OnPaint 处理成员函数?/span>

///CView
默认的标准的重画函数

void CView::OnPaint()
{
    CPaintDC dc(this);
    OnPreparDC(&dc)Q?br />    OnDraw(&dc); //调用了OnDraw
}


既然OnPaint最后也要调?/span>OnDraw,因此我们一般会?/span>OnDraw函数中进行绘制。下面是一个典型的E序

///视图中的l图代码首先索指向文的指针Q然后通过DCq行l图调用?/span>
void CMyView::OnDraw( CDC* pDC )

    CMyDoc* pDoc = GetDocument(); 
    CString s = pDoc->GetData(); // Returns a CString
    CRect rect;
    GetClientRect( &rect ); 
    pDC->SetTextAlign( TA_BASELINE | TA_CENTER ); 
    pDC->TextOut( rect.right / 2, rect.bottom / 2, s, s.GetLength() );
}

最后:现在大家明白q哥俩之间的关系了吧。因此我们一般用OnPaintl护H口的客户区Q例如我们的H口客户区加一个背景图片)Q用OnDrawl护视图的客户区Q例如我们通过鼠标在视图中dQ。当然你也可以不按照上面规律来,只要辑ֈ目的q且没有问题Q怎么q都成?/span>

补充Q我们还可以利用Invalidate(),ValidateRgn(),ValidateRect()函数强制的重ȝ?/span>

 



Enic 2014-03-10 18:12 发表评论
]]>
import_gdiplus.hhttp://www.shnenglu.com/Error/archive/2013/04/19/199558.htmlEnicEnicThu, 18 Apr 2013 16:39:00 GMThttp://www.shnenglu.com/Error/archive/2013/04/19/199558.htmlhttp://www.shnenglu.com/Error/comments/199558.htmlhttp://www.shnenglu.com/Error/archive/2013/04/19/199558.html#Feedback0http://www.shnenglu.com/Error/comments/commentRss/199558.htmlhttp://www.shnenglu.com/Error/services/trackbacks/199558.html
// filename: import_gdiplus.h
// author: enic
// date: 2013-04-18
#pragma once
#include <GdiPlus.h>
#pragma comment(lib,"GdiPlus.lib")
namespace {
class CAutoInitGdiPlusEnvionment
{
public:
    CAutoInitGdiPlusEnvionment()
    {
        Gdiplus::GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);
    }
    
    ~CAutoInitGdiPlusEnvionment()
    {
        Gdiplus::GdiplusShutdown(m_gdiplusToken);
    }
    
private:
    Gdiplus::GdiplusStartupInput m_gdiplusStartupInput;
    ULONG_PTR m_gdiplusToken;
};
static CAutoInitGdiPlusEnvionment autoInitGdiPlus;
};


Enic 2013-04-19 00:39 发表评论
]]>
ƷþþþþĻһ| ޹Ʒþþþþ| ޾Ʒþþþȥq| 91Ʒ91þþþþ| Ʒþþþþþþþþþþþþ| þþƷ99Ʒ| þ99Ʒþ99ý| ŷþһ| 99þ99þþƷѿ| þþþþþþþѾƷ| þw5www| ɾþۺ777| þseƷһƷ| Ʒպþ| Ʒ99þþþ| þþþþۺ| þþ| Ʒ޾þþþþ888| ľƷþþþ| һaƬþëƬ16| ݺɫþþһ| 99þþùƷС˵| þþƷһӰԺ| ԭۺϾþ| ھƷþþþӰԺձ| þˬƬţţ| þþþŮۺ| 99reþùƷҳ| 99þùۺ| ҹþƷþþþ| Ļþۺ| þۺ϶| žžþþƷ| þ99ƷþþþþҰ| Ʒþۺ| 7ŷպۺľþþþ| þݺҹҹ96׽| þþþAVר| ݺݾƷþþĻ| þþƷа| 69Ʒþþþþ޾Ʒ|