香芋椰汁西米露的做法:VC++之控件之彩色编辑框

来源:百度文库 编辑:九乡新闻网 时间:2024/04/24 10:14:34
VC++之控件之彩色编辑框2010年05月09日 星期日 上午 10:21

一、新建工程“彩色编辑框”


      自定义类名


二、编辑对话框


三、添加新类、函数、变量

      添加新类



      添加新类的消息响应函数CtlColor


      添加新类(CColorEdit)的变量m_color

      添加新类(CColorEdit)的函数SetColorEdit()

            a、于ColorEdit.h文件内添加函数SetColorEdit()的声明    双击m_color变量进入ColorEdit.h文件

            b、添加函数SetColorEdit()的声明代码(红色部分)

            class CColorEdit : public CEdit
            {
            public:
               CColorEdit();
               ......:
       :      public:
               void SetColorEdit(COLORREF color);             //函数声明
                COLORREF m_color;                                       //定义变量/
                 virtual ~CColorEdit();
            protected:
             DECLARE_MESSAGE_MAP()
            };

            c、于CColorEdit.cpp内添加函数SetColorEdit()的定义代码(红色部分)

            // CColorEdit message handlers
            void CColorEdit::SetColorEdit(COLORREF color)       //于CColorEdit类内添加定义
            {
                m_color=color;
            }

       添加编辑框变量m_edit1、m_edit2

            a、于“彩色编辑框Dlg.h”内添加包含语句(红色部分):

                 #include "ColorEdit.h"

             b、添加变量m_edit1、m_edit2


        于“CCEdit_5Dlg::OnInitDialog()”(初始化函数)内添加取编辑框边框颜色代码(红色部分)

                BOOL CCEdit_5Dlg::OnInitDialog()
                {
                 CDialog::OnInitDialog();

                 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
                 ASSERT(IDM_ABOUTBOX < 0xF000);

                 CMenu* pSysMenu = GetSystemMenu(FALSE);
                 if (pSysMenu != NULL)
                 {
                   CString strAboutMenu;
                   strAboutMenu.LoadString(IDS_ABOUTBOX);
                   if (!strAboutMenu.IsEmpty())
                   {
                    pSysMenu->AppendMenu(MF_SEPARATOR);
                    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
                   }
                 }

                 SetIcon(m_hIcon, TRUE);                        // Set big icon
                 SetIcon(m_hIcon, FALSE);                        // Set small icon
                   // TODO: Add extra initialization here
                m_edit1.SetColorEdit(RGB(255,0,0));
                m_edit2.SetColorEdit(RGB(0,0,255));

                 return TRUE;                                            // return TRUE unless you set the focus to a control
                }

        于“ColorEdit.cpp”文件内 添加ColorEdit类消息响应函数CtlColor()之相应代码(红色部分)

                HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor)
                {
                  // TODO: Change any attributes of the DC here
                 CDC* dc = GetDC(); //获取画布对象
                 CRect rect;
                 GetClientRect(rect); //获取客户区域
                 rect.InflateRect(1,1,1,1);//将客户区域增大一个像素
                  CBrush brush (m_color);//创建画刷
                 dc->FrameRect(rect,&brush);//绘制边框
                 // TODO: Return a non-NULL brush if the parent's handler should not be called
                 return NULL;
                }

四、编译

五、运行程序


六、所用函数说明

1、CDC::FrameRect函数声明

        viod FrameRect(LPCRECT lpRect,CBrush*pBrush)

        lpRect:    需进行描绘的边框之矩形,是一个指向RECT结构的指针。

        pBrush: 使用刷子的句柄。

        功能:     重绘一个长方形的边界