我能够CEdit
使用函数中下面显示的代码在控件内显示几个字符OnInitDialog()
,但我无法在函数主体内突出显示相同的文本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;
}
请参阅帖子正文。
更改您的代码,如下所示(部分基于@Mark Ransom 的评论):
编辑:
最后做了一些测试,发现该
SetHighlight()
函数(EM_SETHILITE
消息)没有效果,它是某些非常老版本的 Windows 的遗留物。它什么都不做,Win32 文档说它“未实现”。还发现了这篇文章。你可以改用SetSel()
,因为你已经找到了。