zoukankan      html  css  js  c++  java
  • 【C++】自绘控件基础

    由于我们对控件的功能、外观的需求,公共控件并不能很好地满足这一点,所以我们就得自绘控件。

    自绘控件有许多方法,比如:处理WM_PAINT消息设置ownDraw风格,处理WM_CTLCOLOR消息,

    之前见过有网友发表过自定义绘制的方法,但目前我只了解前面这几个方法,日后有机会再补充。

    处理WM_PAINT消息

    个应该是最容易想到的方法。在windowProc()函数中处理WM_PAINT消息,这可能出现一些琐事,比如创设备上下文,决定控件的位置等。这理就不详细解释,具体可以看《window程序设计》。

    设置ownDraw风格

    这个方法也就是所有者绘制方法。它是用于开发自定义控件最普通的技术,因为在呈现控件的那一刻,Windows就已经填写了设备上下文,决定控件大小和位置等,不必像处理WM_PAINT消息那样什么都要自已过一遍。

    这个方法是要重载DrawItem()函数,函数注意与OnDrawItem()区分开。当我们重载DrawItem()函数时,它是在它的宿主类的OnDrawItem()中被调用的。

    我们可以在PreSubclassWindow()函数中设置控件的BS_OWNERDRAW属性,不过这会去掉其它的属性。

    比如自绘一个CMyButton:

    void CMyButton::PreSubclassWindow()
    {
    	CButton::PreSubclassWindow();  
    
    	ModifyStyle(0, BS_OWNERDRAW);   
    }

    处理WM_CTLCOLOR消息

    个方法只提供改变控件的颜色,并且不提供控件本身之外的更多功能。

    与消息对应的OnCtlColor()函数,其返回值是一个刷子句柄,该刷子将被用于画出控件的背景。当要画出一个子控件时,框架就调用这个成员函数。

    其类别有如下几种:

    CTLCOLOR_BTN 按钮控件
    CTLCOLOR_DLG 对话框
    CTLCOLOR_EDIT 编辑框
    CTLCOLOR_LISTBOX 列表框
    CTLCOLOR_MSGBOX 消息框
    CTLCOLOR_SCROLLBAR 滚动条
    CTLCOLOR_STATIC 静态文本

  • 相关阅读:
    Hadoop配置
    大数据总览
    Shell(五)Shell输入/输出重定向
    善用try catch来使不可避免的错误发生时,程序不崩溃,只是终止该进程。
    silverlight 程序发布
    linq查distinct
    silverlight 服务端与客户端分2个VS程序打开,同时调试
    将25转成00025的方法
    【转】C#导出数据到EXCEL方法谈(附实例源码和超级无敌详细讲解)
    LINQ处理List数据
  • 原文地址:https://www.cnblogs.com/riskyer/p/3424291.html
Copyright © 2011-2022 走看看