Problem mit der Aufhebung des Schreibschutzes eines RichEditControl
-
Hallo,
ich möchte einen Textbereich in einem RichEditControl schreibschützen.
Zum Testen benutze ich einfach nur den ersten Buchstaben im Conrol:void WProtect () { CHARFORMAT cf = {0}; cf.cbSize = sizeof ( CHARFORMAT ); SendMessage (hEdit, EM_SETSEL, 0, 1 ); ret = SendMessage (hEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf ); cf.dwMask |= CFM_PROTECTED; cf.dwEffects = CFE_PROTECTED; ret = SendMessage (hEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf ); SendMessage (hEdit, EM_SETSEL, 1, 1 ); }
Das klappt. Aber jetzt möchte ich das Ganze wieder rückgängig machen:
void WUnProtect () { CHARFORMAT cf = {0}; int ret; cf.cbSize = sizeof ( CHARFORMAT ); SendMessage (hEdit, EM_SETSEL, 0, 1 ); SendMessage (hEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf ); cf.dwMask |= CFM_PROTECTED; cf.dwEffects &= ~CFE_PROTECTED; SendMessage (hEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf ); // Hier wird 0 zurückgegeben. ret = GetLastError (); // Hier auch! SendMessage (hEdit, EM_SETSEL, 1, 1 ); }
Das Rückgängig machen klappt leider nicht. GetLastError () liefert 0. Sieht jemand den Fehler?
Gruß,
w.s.
-
Sorry, ich lese gerade:
Remarks
To turn off a formatting attribute, set the appropriate value in dwMask but do not set the corresponding value in dwEffects. For example, to turn off italics, set CFM_ITALIC but do not set CFE_ITALIC.
Hab ich wohl genau anders rum gemacht. Also, ich probiere erst noch mal.
-
Nö, hab ich richtig gemacht. Hab mit nem 'Set' den CFE_PROTECTED 'Ungesettet', durch den ~ Operator.
-
Das war also nicht das Problem, man muss zusätzlich noch die EN_PROTECTED Nachricht behandeln!
Gruß,
w.s.