(Pour Ruddy: exemple de code ci-dessous si elle révèle quoi que ce soit)
Je finalement juste fait un PostMessage (hwnd, EM_UNDO ...) dans le gestionnaire EN_PROTECTED et c'est ce que je devais faire pour obtenir ce travaillant pour moi. Renvoyer TRUE n'a jamais rien accompli, bien que je sache que le gestionnaire était touché et seulement pour un texte protégé. (La fonction ODS ci-dessous est OutputDebugString).
Mais j'ai vu plusieurs exemples sur le web (la plupart d'entre eux MFC cependant ou parfois DELPHI ou quelque chose), où juste retourner TRUE dans le gestionnaire EN_PROTECTED est dit pour empêcher le changement.
En fait, mon contrôle Rich Edit était dans une boîte de dialogue mais était en cours de création avec CreateWindowEx, donc j'ai essayé de l'initialiser à travers le fichier RC à la place, mais cela n'a fait aucune différence. (Certaines des choses que je fais sont en quelque sorte de la vieille école - désolé à ce sujet.) Mais en fait, j'ai essayé tout et n'importe quoi pour faire fonctionner EN_PROTECTED comme son documenté et rien travaillé - bizarre. Eh bien, EM_UNDO de l'intérieur du gestionnaire EN_PROTECTED fonctionne, alors je suppose que je m'en tiendrai là.
Code d'origine (avec l'appel EM_UNDO ajouté):
case WM_NOTIFY: {
NM_UPDOWN* nm = (NM_UPDOWN*)lParam;
if ((nm->hdr.code == UDN_DELTAPOS) && (nm->hdr.idFrom == ID_UPD_ERR)) {
int e = nm->iPos + nm->iDelta;
SetWindowText(xml2->hStatMsg[1],xml2->ErrMsg(1,e));
SetWindowText(xml2->hStatMsg[2],xml2->ErrMsg(2,e));
}
else if (wParam == ID_EDIT_A) {
if (((LPNMHDR)lParam)->code == EN_PROTECTED) {
ODS("EN_PROTECTED", (int)((ENPROTECTED*)lParam)->msg);
PostMessage(xml2->hImgXml2,EM_UNDO,0,0);
return TRUE;
}
if (((LPNMHDR)lParam)->code == EN_SELCHANGE) {
anchors_adjsel(xml2->hImgXml2);
}
}
}
break;
Pouvez-vous envoyer le code source à votre gestionnaire EN_PROTECTED? – Ruddy