如何突出显示 OnInitDialog 内 CEdit 字段内的文本

问题描述 投票:0回答:1

好的,我可以通过使用 OnInitDialog() 函数中下面所示的代码在 CEdit 控件内显示一些字符,但我无法在 OnInitDialog() 函数体内突出显示相同的文本。我只是不知道该怎么做。在我的 CReplaceCharacterDlg 类中,我使用向导添加了 CEdit ReplaceCharsCtrl 变量,并使用资源编辑器创建了 CEdit 控件。我在 OnInitDialog() 函数中尝试了以下行,如下所示,但收到“调试断言失败”错误。有人可以给我一个提示吗?

调试断言失败


// CReplaceCharacter dialog

class CReplaceCharacterDlg : public CDialogEx
{
    DECLARE_DYNAMIC(CReplaceCharacterDlg)

public:
    CReplaceCharacterDlg(CWnd* pParent = nullptr);   // standard constructor
    CReplaceCharacterDlg(CWnd* pPar, CStringW replaceStrW);
    virtual ~CReplaceCharacterDlg();

// Dialog Data
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_REPLACE_CHAR };
#endif

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    virtual BOOL OnInitDialog();

    DECLARE_MESSAGE_MAP()
public:
    CEdit ReplaceCharsCtrl;
    CStringW ReplacementCharacterStr;
    afx_msg void OnBnClickedOk();
};

// Implementation
BOOL CReplaceCharacterDlg::OnInitDialog()
{
    GetDlgItem(IDC_EDIT1)->SetWindowTextW(ReplacementCharacterStr);
        ReplaceCharsCtrl.SetHighlight(0, 2);  <---- GIVES ASSERT ERROR  ReplaceCharsCtrl hWnd = NULL
    return TRUE;
}

请参阅帖子正文。

c++ visual-studio mfc
1个回答
0
投票

更改您的代码,如下所示(部分基于@Mark Ransom 评论):

BOOL CReplaceCharacterDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog(); // Do not delete this, among others binds control variables to controls
    ReplaceCharsCtrl.SetWindowTextW(ReplacementCharacterStr); // Control is already bound to IDC_EDIT1, no need do create a temporary CWnd object
    ReplaceCharsCtrl.SetSel(0, -1); // Select the entire text
    ReplaceCharsCtrl.SetFocus();
    return FALSE; // We explicitly set the focus to a non-default control

}

编辑:

最后做了一些测试,发现

SetHighlight()
功能(
EM_SETHILITE
消息)没有任何作用,这是一些非常老版本的Windows的遗物。它什么也没做,Win32 文档说它是“未实现”。还发现了这个帖子。您可以使用
SetSel()
来代替。

© www.soinside.com 2019 - 2024. All rights reserved.