VC绘制控件如何防止闪烁

理论上不管什么控件都适用,方法如下:

新建一个MFC类,继承原来的控件类型,对于VC自动生成的类进行如下改动:

首先覆盖 OnEraseBkgnd() 防止擦除时填涂背景:

BOOL CXXXCtrl::OnEraseBkgnd(CDC* pDC)
{
    return TRUE;
}

然后覆盖 OnPaint(),原理是先在内存DC中绘图,之后再一股脑将画出的东东填涂到窗体上。

代码

void CXXXCtrl::OnPaint()
{
    CPaintDC dc(this);
    // TODO: 在此处添加消息处理程序代码
    CRect rect;
    CRect headerRect;
    CDC dcMem;    //内存DC
    CBitmap bmpMem;

GetClientRect(&rect);
    dcMem.CreateCompatibleDC(&dc);
    bmpMem.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
    dcMem.SelectObject(&bmpMem);
    dcMem.FillSolidRect(&rect, RGB(255,255,255));

//这一句是调用默认的OnPaint(),把图形画在内存DC上
    DefWindowProc(WM_PAINT, (WPARAM)dcMem.m_hDC, (LPARAM)0);

//输出
    dc.BitBlt(0,
        0,
        rect.Width(),
        rect.Height(),
        &dcMem,
        0,
        0,
        SRCCOPY);
    dcMem.DeleteDC();
    bmpMem.DeleteObject();
}

http://www.cnblogs.com/ddgg/archive/2010/07/16/1779131.html

时间: 2025-01-08 21:50:39

VC绘制控件如何防止闪烁的相关文章

VC单选按钮控件(Radio Button)用法

先为对话框加上2个radio button,分别是Radio1和Radio2. 问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了? 关键是选上,“默认”只要放在OnInitDialog()即可.三种方法可以让它选上, 第一种:((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//不选上((CButton

流程图绘制控件WpfDiagram

WpfDiagram是一款功能强大的流程图绘制控件,可以绘制工作流程图.对象层次和关系图.网络拓扑图.实体关系图.IVR.工业自动化.genealogy trees .算法流程图.组织结构图.XML文档.类图等.杰出的功能.稳定的性能以及优雅的架构使它成为迄今为止MindFusion中最高级的编程控制组件.它是我们在控件开发中的顶尖体验,该开发结合了.NET平台提供的最新一代的图表展示工具.因此,编程过程变得更加简单快捷,最终的图表变得更加具有吸引力并更加生动 具体功能: 软件的再分配完全免费

VC++ 设置控件显示文本的前景色、背景色以及字体

在每个控件开始绘制之前,都会向其父窗口发送WM_CTLCOLOR通告消息,在该消息的处理函数中,可以设置控件显示文本的前景色.背景色以及字体.该消息处理函数还要求返回一个画刷的句柄,用于在控件具体的绘制之前擦除其客户区. HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO:  Retur

VC++图片控件(Picture Control)显示资源位图(BMP)、文件位图(BMP)、其它格式文件图片(JPG\PNG\BMP)的方法

在VC++ MFC编程中,我们常使用Picture Control图片控件来显示图像.下面简单归纳几种显示不同的方式: (实例可在我的CSDN资源中下载:http://download.csdn.net/detail/margin1988/8341525) 第一种.资源位图方式显示BMP图片 如果要显示的是一张BMP位图,则可以采用资源位图方式,具体步骤如下: (1)将BMP文件拷贝到工程的res目录下: (2)在对话框中添加一个Picture Control控件,例如:ID为IDC_STATI

iOS开发-边线绘制控件及虚线绘制原理

最近的项目设计稿中,出现了虚线分割线这种东西,想起之前自己做的一个用于绘制各种边线效果的控件YRBorderView,但是只支持实线条,立刻对其进行了升级. 支持四条边线不同颜色,不同粗细,不同弧度,支持裁剪掉边线外部,支持虚线. 效果图: 需要试试这控件的请戳:YRBorderView 关于简单的线条和图形绘制请看我之前的CoreGraphics系列博客: http://blog.csdn.net/u010124617/article/details/9222753 这里再说明下虚线的绘制,利

VC++ CStatic控件背景透明且改变其文本时,文字重叠解决方法

最近在项目中将CStatic控件设置为背景透明且在一个定时器函数改变其文本,结果CStatic的文字重叠了.解决该问题的方案是:从CStatic类派生自己的静态文本控件. 其实设置背景透明,也就是在CStatic重画时,返回一个空刷子而已,所以改变文本并没有改变上次残留的背景,从而导致重叠现象. 为了解决这个问题,我们可以让父窗口重绘该区域,以下是我的解决方法: 1: 从CStatic继承一个类CStaticEx 2: 增加WM_CTLCOLOR消息反射(把很多事情留给父窗口窗口处理不是一件很好

VC 按键控件实现指示灯效果

首先添加按钮控件,将属性Owner Draw设为True,按钮ID: IDC_BUTTON1 添加位图资源ID: IDB_BITMAP_CLOSE    IDB_BITMAP_RED 在对话框类中添加private成员变量: CBitmapButton m_button;    bool LedFlag; 在初始化函数OnInitDialog里添加图片加载: 使用CBitmapButton::LoadBitmaps装载各种状态的图片,再用SubclassDlgItem关联到想要的按钮,使用CBi

VC DateTimePicker控件获取时间

将Edit控件设变量m_t,DateTimePicker控件变量DateCtrl     CTime time;     m_DateCtrl.GetTime(time);     CString strTime=time.Format("%Y-%m-%d");     m_t.SetWindowTextW(strTime);

VC 串口控件 MSComm控件

MSComm控件 Visual C++为我们提供了一种好用的ActiveX控件Microsoft Communications Control(即MSComm)来支持应用程序对串口的访问,在应用程序中插入MSComm控件后就可以较为方便地实现对通过计算机串口收发数据. 要使用ActiveX控件MSComm,程序员必须将其添加入工程,其方法是: (1)单击主菜单project的子菜单Add To project的Components and Controls选项: (2)在弹出的"Componen