2009-05-14 7 views
1

Existe-t-il un moyen de valider le contenu d'une boîte CEdit sans sous-classe? Je veux vérifier les caractères de nom de fichier non valides dans une boîte CEdit et ne pas permettre à l'utilisateur de l'entrer du tout (la touche ne doit pas être enregistrée, si elle est collée dans la boîte, les caractères non valides ne devraient pas boîte) ..validant CEdit sans sous-classe

Y at-il un moyen facile de le faire?

Sur une note de côté, comment puis-je faire une variable qui est liée à cette boîte? Si j'ajoute une variable qui n'est pas un contrôle, cette variable contiendrait-elle toujours ce qui est dans le contrôle d'édition?

Merci ..

Répondre

0

par http://msdn.microsoft.com/en-us/library/f7yhsd2b(VS.80).aspx, « Si vous voulez traiter les messages de notification Windows envoyés par un contrôle d'édition à son parent (en général une classe dérivée de CDialog), ajoutez une entrée de message carte et un message-gestionnaire fonction membre à la classe parente pour chaque message. " et "ON_EN_UPDATE Le contrôle d'édition est sur le point d'afficher du texte altéré Envoyé après que le contrôle ait formaté le texte mais avant qu'il n'écrase le texte afin que la taille de la fenêtre puisse être modifiée, si nécessaire." - Ainsi, sans sous-classer CEdit, vous pouvez vérifier et éventuellement bloquer les mises à jour via le gestionnaire de messages/gestionnaire de messages de Windows dans le parent.

+0

Alors, comment modifier le texte? J'ai essayé de faire GetWindowText (temp), puis de faire des choses comme temp.Replace ("*", ""); // temp est un CString, puis en utilisant SetWindowTExt (temp). Cela ne fonctionne pas car j'obtiens un débordement de pile .. Je pense que c'est peut-être parce que quand je fais SetWindowText il appelle la notification encore et encore ... – krebstar

+0

Oui, vous êtes dans une récursion, donc vous devez simplement le casser (en ne faisant pas le SetWindowText) une fois, par exemple, il n'y a plus d'étoiles dans le texte que vous obtenez (en supposant que la suppression des étoiles soit votre but). –

1

Il ya quelque temps, j'ai créé this. Certes, cela est très daté mais les idées tiennent encore:

alt text

+0

Je voulais un moyen facile :( – krebstar

0

Remplacer PreTranslateMessage dans votre boîte de dialogue. Lorsque le mesage est WM_KEYDOWN et GetFocus() renvoie le HWND de votre contrôle d'édition, mangez le message lorsque vous n'aimez pas la clé.