首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在CMFCPropertyGridCtrl中插入编辑框以使用密码?

在CMFCPropertyGridCtrl中插入编辑框以使用密码,可以通过以下步骤实现:

  1. 创建一个自定义的属性类,继承自CMFCPropertyGridProperty类,用于表示密码属性。
  2. 在自定义属性类中重写OnDrawValue方法,以便在属性格中绘制密码字符。
  3. 在自定义属性类中重写OnEdit方法,以便在编辑模式下显示密码编辑框。
  4. 在自定义属性类中重写OnEndEdit方法,以便在编辑完成后将密码值保存到属性对象中。
  5. 在需要使用密码属性的地方,创建一个自定义属性对象,并将其添加到CMFCPropertyGridCtrl中。

下面是一个示例代码,演示如何在CMFCPropertyGridCtrl中插入编辑框以使用密码:

代码语言:txt
复制
// 自定义密码属性类
class CPasswordProperty : public CMFCPropertyGridProperty
{
public:
    CPasswordProperty(const CString& strName, const CString& strPwd)
        : CMFCPropertyGridProperty(strName, (_variant_t)strPwd, _T(""))
    {
    }

    virtual void OnDrawValue(CDC* pDC, CRect rect)
    {
        // 绘制密码字符
        CString strPwd = (_variant_t)m_varValue;
        CString strDisplay;
        for (int i = 0; i < strPwd.GetLength(); i++)
        {
            strDisplay += _T("*");
        }

        CMFCPropertyGridProperty::OnDrawValue(pDC, rect, (_variant_t)strDisplay);
    }

    virtual BOOL OnEdit(LPPOINT /*lptClick*/)
    {
        // 显示密码编辑框
        CEdit* pEdit = new CEdit;
        CRect rect;
        rect.CopyRect(m_Rect);
        rect.DeflateRect(1, 1);
        pEdit->Create(ES_PASSWORD | WS_CHILD | WS_VISIBLE | WS_BORDER, rect, m_pWndList, AFX_PROPLIST_ID_INPLACE);
        pEdit->SetWindowText((_variant_t)m_varValue);

        return TRUE;
    }

    virtual void OnEndEdit()
    {
        // 保存密码值
        CEdit* pEdit = (CEdit*)m_pWndInPlace;
        CString strPwd;
        pEdit->GetWindowText(strPwd);
        m_varValue = (_variant_t)strPwd;

        CMFCPropertyGridProperty::OnEndEdit();
    }
};

// 在CMFCPropertyGridCtrl中添加密码属性
void AddPasswordProperty(CMFCPropertyGridCtrl& propGrid, const CString& strName, const CString& strPwd)
{
    CPasswordProperty* pProperty = new CPasswordProperty(strName, strPwd);
    propGrid.AddProperty(pProperty);
}

使用示例:

代码语言:txt
复制
// 创建CMFCPropertyGridCtrl对象
CMFCPropertyGridCtrl propGrid;
CRect rectPropGrid;
GetClientRect(&rectPropGrid);
propGrid.Create(rectPropGrid, this, IDC_PROP_GRID);

// 添加密码属性
AddPasswordProperty(propGrid, _T("密码"), _T("********"));

这样,就可以在CMFCPropertyGridCtrl中插入编辑框以使用密码了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android开发笔记(一百四十六)仿支付宝的支付密码输入框

    编辑框EditText算是Android的一个基础控件了,表面上看,EditText只负责接收用户手工输入的文本;可实际上,要把这看似简单的文本输入做得方便易用,并不是一个简单的事情。因为用户可能希望App会更加智能一些,比如用户希望编辑框提供关键词联想功能,又比如用户希望编辑框能够自我纠错等等;所以,Android从设计之初就努力尝试解决这些问题,先是自带了自动完成编辑框AutoCompleteTextView,后来又在Android5.0以后提供了文本输入布局TextInputLayout。 然而,计划赶不上变化,开发工作中总有一些现有控件无法直接实现的需求,就像支付宝的支付密码输入框,在一排方格区域内输入并显示密文密码,每个密文字符之间又有竖线分隔。为直观理解支付密码输入框的业务需求,下面还是先看看该输入框的最终效果图。

    03

    Android开发笔记(一百三十八)文本输入布局TextInputLayout

    TextInputLayout是MaterialDesign库中对编辑框EditText进行增强的一个控件。众所周知,EditText未输入字符时,我们可以给它显示默认的提示文字hint;可是一旦输入字符,这个hint提示就消失了,虽然没有提示也没有什么大碍,但有总比没有好呀。TextInputLayout便是用来解决提示文字的显示问题,它默认把提示文字显示在编辑框的上方,这样在编辑框内输入文字,就不影响上方的提示文字了。 代码中使用TextInputLayout要进行以下改造: 1、添加几个库的支持,包括design库(TextInputLayout需要)、appcompat-v7库(AppCompatActivity); 2、编辑框所在页面的Activity需要继承自AppCompatActivity,否则运行时打开页面会报错; 3、布局文件中在TextInputLayout节点下面加入EditText控件,必须并且只能加入一个EditText; 下面是TextInputLayout新增的方法说明: setHint : 设置提示文字的内容。 setHintEnabled : 设置提示文字是否可用。 setHintTextAppearance : 设置提示文字的风格。 setHintAnimationEnabled : 设置提示文字的展示动画是否可用。 setError : 设置错误文字的内容。 setErrorEnabled : 设置错误文字是否可用。 setCounterEnabled : 设置文字计数器是否可用。 setCounterMaxLength : 设置文字计数器的最大长度。 从以上方法可以看到,TextInputLayout增加的界面元素主要是三个,分别是位于编辑框左上角的提示文字、位于编辑框左下角的错误文字、位于编辑框右下角的文字计数器。具体的文本输入布局效果如见下:

    03

    Android开发笔记(三十六)展示类控件

    View是单个视图,所有的控件类都是从它派生出来;而ViewGroup是个视图组织,所有的布局视图类都是从它派生出来。由于View和ViewGroup是基类,因此很少会直接使用,偶尔用到的场景,主要有如下几个: 1、页面上需要单独显示一条横线或者竖线。如果填充图片显然不够经济,最简单的做法,就是在xml布局中增加一个View控件,高度或宽度设置为1dp,背景颜色设置为线条颜色,这样便实现了单独显示线条的需求。 2、点击事件的处理函数onClick(View v),这里面我们要调用View的getId方法获取发生点击事件的控件id,从而进行该控件对应的点击处理。 3、在代码中设置某控件为可见或不可见或消失,此时需要使用View类的三个变量,分别是View.VISIBLE、View.INVISIBLE和View.GONE。

    03
    领券