Je ne peux pas empêcher l’utilisateur de modifier les étiquettes dans ListView

Selon msdn, http://msdn.microsoft.com/en-us/library/bb774798%28VS.85%29.aspx , le renvoi de la valeur TRUE empêche l’utilisateur de modifier les étiquettes.

J’ai donc écrit le code ci-dessous: Main:

WinMain(...) { DialogBox(..., DlgProc) } 

DlgProc:

 DlgProc(...) { switch(message) { case WM_NOTIFY: if((NMHDR *)lParam->code == LVN_BEGINLABELEDIT) { return TRUE; return FALSE; ... } 

Pourtant, les étiquettes peuvent être éditées. Je ne veux pas annuler le style LVS_EDITLABELS, car parfois je souhaite autoriser les utilisateurs à éditer des étiquettes.

Est-ce que quelqu’un sait le problème? Je vous remercie.

Renvoyer TRUE à partir d’un DialogProc () ne signifie pas ce que vous pensez qu’il fait. Citant l’article de la bibliothèque MSDN:

En règle générale, la procédure de la boîte de dialog doit renvoyer VRAI si elle a traité le message et FAUX si ce n’est pas le cas. Si la procédure de la boîte de dialog retourne la valeur FALSE, le gestionnaire de la boîte de dialog exécute l’opération de boîte de dialog par défaut en réponse au message.

Si la procédure de boîte de dialog traite un message nécessitant une valeur de retour spécifique, elle doit définir la valeur de retour souhaitée en appelant SetWindowLong (hwndDlg, DWL_MSGRESULT, lResult) immédiatement avant de renvoyer TRUE. Notez que vous devez appeler SetWindowLong immédiatement avant de renvoyer TRUE; Si vous le faites plus tôt, la valeur DWL_MSGRESULT peut être remplacée par un message de boîte de dialog nested.