文本编辑框

来源:互联网 发布:淘宝达人平台管理规范 编辑:程序博客网 时间:2024/05/01 03:37

    在界面编程中,文本编辑框是使用频率最高的控件之一,为了方便操作,MFC提供了CEdit类来管理文本编辑框。
    创建文本编译框有两种方式:
    第一种、在对话框模式下,编辑资源文件,撰写创建对话框的脚本,可在表示对话框脚本的一对标识符BEGIN和END中间插入形如
    EDITTEXT        IDC_MYEDIT,81,112,71,14,ES_CENTER
的脚本。其中EDITTEXT表示插入了一个文本编辑框,IDC_MYEDIT是文本编辑框的ID号,81,112,71,14表示文本编辑框相对对话框的位置;ES_CENTER是对话框的属性,该熟悉表示文本水平居中对齐,可用“|”符号将若干熟悉联合。
    从工具箱中拖入一个文本编辑框控件,实际上是通过可视化过程,由IDE解析鼠标操作来编写脚本,在属性对话框中设置各种属性,也是在编写这些脚本。
    通过动态数据交换可以将CEdit类的一个对象与文本编辑框控件绑定在一起,DDX_Control(pDX, IDC_MYEDIT,m_MyEdit),m_MyEdit就是CEdit类的对象。
    第二种、构造一个CEdit类的对象,利用CEdit::Create()创建一个文本编辑框,调用CEdit的成员函数可以设置文本编辑框的各种属性。

    文本编辑框常用的操作:
    1.GetWindowText(),获得文本编辑框中输入的内容。
    2.SetLimitText(),设置文本编辑框能够输入最大字符数。
    3.SetReadOnly(),设置文本编辑框为不可编辑。
    4.GetSel(),获得当前选中文本编辑框中内容的起始和结束位置。
    5.SetSel(),设置光标所在的位置,或者选中部分文本。
    6.SetPasswordChar(),如果传入参数为非零的字符,则文本编辑框中显示以该非零字符代替,例如传入一个'*',用户输入的所有内容都以'*'显示,这就是密码模式,也是默认值,可以使用其他的字符代替。如果取消密码模式,只需要传入0.
    7.Undo(),撤销之前的操作,在调用此函数之前,请先调用CanUndo判断此操作是否允许被撤销。
    其他一些属性的设置,使用SetWindowLongPtr函数。
    int nWindowLong = GetWindowLongPtr(m_hWnd,GWL_STYLE);
    SetWindowLongPtr(m_hWnd,GWL_STYLE,nWindowLong | nStyle);
    其中m_hWnd是文本编辑框的句柄,nStyle是属性值的组合,这些属性值包括:
    1.ES_MULTILINE 多行文本编辑框
    2.ES_WANTRETURN 允许回车换行
    3.ES_NUMBER 只允许输入数字
   
    修改文本编辑框边框的颜色是一件比较困难的事情,MFC提供的CEdit类只提供了对文本编辑框的功能操作,外观设置是MFC控件管理类的共同弱点,没有办法,我们只能自己重载CEdit类来修改边框颜色。
    1、创建CEdit的派生类CDrawEdit
    class CDrawEdit : public CEdit
    {
        DECLARE_DYNAMIC(CDrawEdit)

    public:
        CDrawEdit();
        virtual ~CDrawEdit();
    protected:
        DECLARE_MESSAGE_MAP()
    };
    2、设置边框颜色
    因为文本编辑框的边框是在非客户区域,所以要重载OnNcPaint()函数。
    void CDrawEdit::OnNcPaint()
    {
        CRect rc;
        GetWindowRect(&rc);
        CRect rcWindow(0,0,rc.Width(),rc.Height());

        CBrush brushFrame;
        brushFrame.CreateSolidBrush(RGB(255,0,0));

        CWindowDC dc(this);
        dc.FrameRect(&rcWindow,&brushFrame);
    }
    可以定义一个成员变量来保存画刷的颜色值,定义一个成员函数设置此值,这样就可以通过函数来灵活的这是各种边框颜色。

    文本颜色和文本字体以及文本编辑框的背景色可以在父类的OnCtlColor中设置
    HBRUSH CMFCDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

        if (pWnd->GetDlgCtrlID() == IDC_MYEDIT)
        {
            pDC->SetTextColor(RGB(0,0,255));    //设置字体颜色
            pDC->SelectObject(&m_Font);            //设置字体样式

            //设置背景色
            pDC->SetBkMode(TRANSPARENT);
            return CreateSolidBrush(RGB(0,255,0));
        }

        return hbr;
    }

 

    如果在OnCtlColor函数中添加了对静态文本框的设置,有可能会影响到文本框的效果。

原创粉丝点击