对话框控件CEdit改变字体边框

 

CEdit 自绘

实现编辑框输入检查不能含有某些字符

检查语法使用了boost库注意添加头文件#include <boost/regex.hpp>

 

为了实现代码重用,将编辑控件与一个自己派生的CMyEdit关联

使用反射消息  实现控件自处理 

CmyEdit添加 CtlColorEnChange 消息处理

消息映射为:

BEGIN_MESSAGE_MAP(CCheckEdit, CEdit)

     ON_WM_CTLCOLOR_REFLECT()

     ON_CONTROL_REFLECT(EN_CHANGE, &CCheckEdit::OnEnChange)

END_MESSAGE_MAP()

 

/*以下实现改变控件颜色设置*/

HBRUSH CCheckEdit::CtlColor(CDC* pDC, UINT /*nCtlColor*/)

{

     // TODO:  Change any attributes of the DC here

     if(m_ErrorEditState)

     {

         pDC->SetTextColor( RGB(255,0,0) );//设置控件中文本颜色

     }

     else

     {

         pDC->SetTextColor( RGB(0,0,0) );    

     }

     // TODO:  Return a non-NULL brush if the parent's handler should not be called

     //return false;

     return (HBRUSH)m_BkBrush.GetSafeHandle();//返回一个自己的背景画刷 否则上面的设置不其作用

}

 

void CCheckEdit::OnEnChange()

{

/*

     //隐掉部分是为编辑框画个红色边框标识有错误  //此部分也可在OnNCPaint中处理

     CRect rectEdit, rectInser;

     GetWindowRect(rectEdit);

     ScreenToClient(rectEdit);

     rectEdit.OffsetRect(2,2);

     rectInser.SetRect(rectEdit.left+1, rectEdit.top+1, rectEdit.right-1, rectEdit.bottom-1);

 

     CBrush brushOuter, brushInser;

     brushOuter.CreateSolidBrush(RGB(255,0,0));

     brushInser.CreateSolidBrush(RGB(0,0,255));

     CDC* pDC = GetWindowDC();

 

     pDC->FrameRect(rectEdit,&brushOuter); //画红色外框

     pDC->FrameRect(rectInser,&brushInser);//画蓝色内框

     ReleaseDC(pDC);

*/

        

     // TODO:  If this is a RICHEDIT control, the control will not

     // send this notification unless you override the CEdit::OnInitDialog()

     // function and call CRichEditCtrl().SetEventMask()

     // with the ENM_CHANGE flag ORed into the mask.

     CString m_strProjectName;

     GetWindowText(m_strProjectName);

     if(m_strProjectName.IsEmpty() != -1)

     {

         //正则表达式".{0,}([:?*<>\/\"| ]|[:?*<>\/\"| ].{0,})"

         //标识不能含有 .{0,}([:?*<>\/\"| ]|[:?*<>\/\"| ].{0,})

         const wstring REGEX = L;".{0,}([:?*<>\/\"| ]|[:?*<>\/\"| ].{0,})"

         boost::wsmatch match;

         const boost::wregex reg(REGEX);

         wstring wstr = m_strProjectName.GetString();

         bool match_status = boost::regex_match(wstr, match, reg);

         /*

         //在对话框中直接处理可以使用此方法获得控件矩形

         CEdit* m_pEdit = (CEdit*)GetDlgItem(IDC_EDIT_PROJECT_NAME);

         CRect rect;

         m_pEdit->GetWindowRect(&rect);

         */

         CRect rect;

         GetWindowRect(rect);  

         ScreenToClient(rect);

 

         if (match_status)

         {

              m_ErrorEditState = true;                 

         }

         else

         {

              m_ErrorEditState = false;

         }

         InvalidateRect( &rect );//此处立即重绘控件 将调用CtlColor       

     }

     // TODO:  Add your control notification handler code here   

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值