曲线解决CMFCPropertyGridCtrl掩码的bug2009年12月30日 星期三 下午 01:24CMFCPropertyGridCtrl这个控件当用到掩码时,会有问题.解决办法用其他掩码替代.下面是一个IP掩码处理方法.代码如下

2009年12月30日 星期三 下午 01:24

CMFCPropertyGridCtrl这个控件当用到掩码时,会有问题.解决办法用其他掩码替代.下面是一个IP掩码处理方法.代码如下
class CMyMaskEditProp : public CMFCPropertyGridProperty
{
public:
CMyMaskEditProp(const CString& strName, const COleVariant& varValue, LPCTSTR lpszDescr = NULL, DWORD_PTR dwData = 0,
   LPCTSTR lpszEditMask = NULL, LPCTSTR lpszEditTemplate = NULL, LPCTSTR lpszValidChars = NULL);

virtual BOOL OnUpdateValue();

protected:
virtual CWnd* CreateInPlaceEdit(CRect rectEdit, BOOL& bDefaultFormat);
//virtual BOOL OnSetCursor() const { return FALSE; /* Use default */ }
};

// CMyMaskEditProp class
CMyMaskEditProp::CMyMaskEditProp(const CString& strName, const COleVariant& varValue, LPCTSTR lpszDescr, DWORD_PTR dwData,
         LPCTSTR lpszEditMask, LPCTSTR lpszEditTemplate, LPCTSTR lpszValidChars):
CMFCPropertyGridProperty(strName,varValue, lpszDescr,dwData,
       lpszEditMask, lpszEditTemplate,lpszValidChars)
{

}
BOOL CMyMaskEditProp::OnUpdateValue()
{
ASSERT_VALID(this);
ASSERT_VALID(m_pWndInPlace);
ASSERT_VALID(m_pWndList);
ASSERT(::IsWindow(m_pWndInPlace->GetSafeHwnd()));

//long lCurrValue = m_varValue.lVal;

CMaskEdit* pWndEdit = (CMaskEdit*) m_pWndInPlace;

CString str;
pWndEdit->GetWindowText(str);
if (str != (char *)(_bstr_t)m_varValue)
{
   m_varValue=str;
   m_pWndList->OnPropertyChanged(this);
}

return TRUE;
}

CWnd* CMyMaskEditProp::CreateInPlaceEdit(CRect rectEdit, BOOL& bDefaultFormat)
{
CMaskEdit* pWndEdit = new CMaskEdit;
pWndEdit->m_bisTime       = FALSE;
pWndEdit->m_isdate       = FALSE;
pWndEdit->m_bUseMask       = TRUE;
pWndEdit->m_strMask        = "000.000.000.000";
pWndEdit->m_strLiteral     = "___.___.___.___";
pWndEdit->m_str            = "255.255.255.255";
pWndEdit->m_strMaskLiteral = m_varValue.bstrVal;
DWORD dwStyle = WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL ;

if (!m_bEnabled || !m_bAllowEdit)
{
   dwStyle |= ES_READONLY;
}

pWndEdit->Create(dwStyle, rectEdit, m_pWndList, AFX_PROPLIST_ID_INPLACE);
pWndEdit->SetWindowText((char *)(_bstr_t)m_varValue);

bDefaultFormat = TRUE;
return pWndEdit;

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值