S
Sodele, für alle die es interessiert: Die Lösung
- Für das CRichEditCtrl im Klassenassi die EN_PROTECTED erstellen
void CFileReaderView::OnProtectedEdit1(NMHDR* pNMHDR, LRESULT* pResult)
{
ENPROTECTED *pEnProtected = reinterpret_cast<ENPROTECTED *>(pNMHDR);
// TODO: Das Steuerelement sendet diese Benachrichtigung nur, wenn die Funktion
// CFormView::OnInitDialog() überschrieben wird, um die EM_SETEVENTMASK-Nachricht
// an das Steuerelement mit dem ENM_PROTECTED-Attribut ORed in die Maske lParam zu senden.
// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
*pResult = 0; // ändern zu:
*pResult = TRUE;
}
pResult muss je nach Bedarf umgeschaltet werden. Nach einer Änderung( oder auch nur versuchten Änderung ) des Textes muss pResult FALSE zurückgeben, sonst kann kein neuer Text gesetzt werden!
- Im OnInit*** dann folgendes:
m_ctrlEdit1.SetEventMask( m_ctrlEdit1.GetEventMask() | ENM_PROTECTED );
- Dann eine Funktion zum setzen der nicht editierbaren Bereiche, z. B.
void CFileReaderView::MarkTagsinRichEdit(CRichEditCtrl *re)
{
long aPos, ePos;
re->GetSel( aPos, ePos ); // wichtig, um die Pos zu behalten!
int dlgid = re->GetDlgCtrlID();
CString reText = _T("");
GetDlgItemText( dlgid, reText );
CHARFORMAT cf;
int f1 = 0;
int f2 = 0;
while( f1 > -1 )
{
f1 = reText.Find( _T("<ut>"), f1);
f2 = reText.Find( _T("</ut>"), f1 );
if( f2 > f1 )
{
re->SetSel( f1, f2+5 );
re->GetSelectionCharFormat(cf);
cf.crTextColor = RGB( 128, 128, 128 );
cf.dwMask |= CFM_COLOR | CFM_PROTECTED;
cf.dwEffects &= ~CFE_AUTOCOLOR;
cf.dwEffects |= CFE_PROTECTED;
re->SetSelectionCharFormat(cf);
f1 = f2;
}
}
re->SetSel( aPos, ePos );
}
- Und *MarkTagsinRichEdit(CRichEditCtrl re) wird aus der EN_CHANGE des CRichEditCtrl's aufgerufen.
That's all
grüssle :xmas1: