begin process at 2012 05 29 02:21:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

C++, Windows: se positionner sur un champ de saisie à l'ouverture d'une fenetre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

C++, Windows: se positionner sur un champ de saisie à l'ouverture d'une fenetre

samedi 27 novembre 2004 à 19:43:21 | C++, Windows: se positionner sur un champ de saisie à l'ouverture d'une fenetre

yves_r

C++, Windows:

Comment puis-je me positionner sur un champ de saisie défini à l'ouverture d'une fenetre ?
Par défaut, il se positionne sur le bouton de validation, et je ne trouve rien pour changer cela.

Merci.

Yves R
samedi 27 novembre 2004 à 20:58:31 | Re : C++, Windows: se positionner sur un champ de saisie à l'ouverture d'une fenetre

racpp

Administrateur CodeS-SourceS
Salut,
Je pense qu'il faut utiliser la fonction SetFocus():
SetFocus(hChamp);
hChamp est le HWND du contrôle servant de champ, un EDIT par exemple. Il est préférable d'appeler cette fonction juste à la fin du traitement du message WM_CREATE. Ainsi tu peux te positionner sur n'importe quel contrôle à l'ouverture de la fenêtre.
J'espère que ça correspond à ce que tu cherches.
dimanche 28 novembre 2004 à 15:54:26 | Re : C++, Windows: se positionner sur un champ de saisie à l'ouverture d'une fenetre

vecchio56

Administrateur CodeS-SourceS
Si c'est un dialog, retourne TRUE dans WM_INITDIALOG et mets hChamp dans wParam
dimanche 28 novembre 2004 à 16:45:01 | Re : C++, Windows: se positionner sur un champ de saisie à l'ouverture d'une fenetre

racpp

Administrateur CodeS-SourceS
Salut,
vecchio56 >> Pour qu'un contrôle ait le focus au lancement de la boite de dialogue il faut qu'on retourne FALSE dans WM_INITDIALOG comme ceci:

case WM_INITDIALOG:
//.....
SetFocus(hChamp);
return FALSE;

Si on retourne TRUE, aucun contrôle ne peut avoir le focus au lancement de la boite de dialogue. C'est précisé dans MSDN.
Tu es sûr que ta méthode marche? Si oui comment tu fais exactement?
dimanche 28 novembre 2004 à 17:02:58 | Re : C++, Windows: se positionner sur un champ de saisie à l'ouverture d'une fenetre

vecchio56

Administrateur CodeS-SourceS
Oui j'ai dû me tromper, j'ai mal lu en fait on ne peut pas choisir ce qu'il y a dans wParam.
"The dialog box procedure should return TRUE to direct the system to set the keyboard focus to the control specified by wParam"
Je pensais que si on mettait le controle dans wParam et qu'on retourne TRUE ca marchait, mais apparemment non.

Mais pour un Dialog, je crois qu'il fat utiliser WM_NEXTDLGCTL plutot que la fonction SetFocus...
dimanche 28 novembre 2004 à 18:02:44 | Re : C++, Windows: se positionner sur un champ de saisie à l'ouverture d'une fenetre

AlexMAN

Membre Club
Oui, il faut 'poster' WM_NEXTDLGCTL avec en wparam le handle du controle, et lparam a 1.

+2(p - n)
dimanche 28 novembre 2004 à 19:07:45 | Re : C++, Windows: se positionner sur un champ de saisie à l'ouverture d'une fenetre

racpp

Administrateur CodeS-SourceS
C'est vrai, on ne peut pas agir sur wParam car selon MSDN c'est le système qui lui attribue le HWND du contrôle:
"The control to receive the default keyboard focus is always the first control in the dialog box that is visible, not disabled, and that has the WS_TABSTOP style. When the dialog box procedure returns TRUE, the system checks the control to ensure that the procedure has not disabled it. If it has been disabled, the system sets the keyboard focus to the next control that is visible, not disabled, and has the WS_TABSTOP.
An application can return FALSE only if it has set the keyboard focus to one of the controls of the dialog box."

Pourquoi plutôt WM_NEXTDLGCTL que SetFocus()? J'utilise toujours SetFocus() dans ce genre de cas et ca marche sans aucun problème. Et je trouve nettement plus pratique de faire:
SetFocus(hChamp);

que de faire:
SendMessage(hDlg,WM_NEXTDLGCTL,(WPARAM)hChamp,(LPARAM)1);

Pourquoi devrais-je préférer "WM_NEXTDLGCTL" ??
dimanche 28 novembre 2004 à 19:32:22 | Re : C++, Windows: se positionner sur un champ de saisie à l'ouverture d'une fenetre

vecchio56

Administrateur CodeS-SourceS
Moi j'utilise WM_NEXTDLGCTL depuis le jour ou j'ai voulu utiliser SetFocus et que ca n'a pas marché. Cela dit, il est possible que ce soit équivalent dans WM_INITDIALOG. Mon truc si je me souviens bien c'était Appuyer sur un bouton, afficher une MessageBox et mettre le curseur dans un EDIT, et ca ne marchait pas avec SetFocus, alors qu'avec WM_NEXTDLGCTL aucun probleme.
De toute facon, regarde comment est présenté WM_NEXTDLGCTL dans la MSDN, et tu verras que c'est bien celui la qu'il faut utiliser avec une DialogBox.
dimanche 28 novembre 2004 à 19:33:52 | Re : C++, Windows: se positionner sur un champ de saisie à l'ouverture d'une fenetre

vecchio56

Administrateur CodeS-SourceS
D'ailleurs ya une remarque la dessus sur MSDN que j'avais pas vue:
"This message performs additional dialog box management operations beyond those performed by the SetFocus function WM_NEXTDLGCTL updates the default pushbutton border, sets the default control identifier, and automatically selects the text of an edit control (if the target window is an edit control). "
Je dois être fatigué parce que j'arrive pas a comprendre la phrase.
dimanche 28 novembre 2004 à 20:01:20 | Re : C++, Windows: se positionner sur un champ de saisie à l'ouverture d'une fenetre

AlexMAN

Membre Club
"Ce message effectue des operations de 'management' additionnelles au dela de celles proposées par la fonction SetFocus()...etc"
Il est donc preferable d'utiliser ce message dans certains cas.
Mais Brunews a tjrs dit qu'il FALLAIT utiliser WM_NEXTDLGCTL, je comprends pas trop kan mm...


+2(p - n)

1 2

Cette discussion est classée dans : ouverture, windows, champ, saisie, positionner


Répondre à ce message

Sujets en rapport avec ce message

champ de saisie [ par vinc ] Comment récupérer ligne par ligne dans un champ de saisie en Visual C++ ?vinc Ouverture du lecteur de CD-ROM [ par EgorLetov ] j'ai un big problème je n'arrive pas à ouvrir mon lecteur cd sous windows en cpp. J'utilise VCplusplus. JE N'UTILISE PAS DE MFC !!!#include "windows.h Un probleme avec l'ouverture de plusieurs fichiers en meme temps en windows [ par glName ] Bonjour !J'ai un probleme pour ouvrir plusieurs fichiers à partir d'une boite de dialogue (je cherche une solution avec les MFC ou les API windows )Bi Valeur d'un champ saisie [ par TeniX ] bonjour, Je voudrais savoir comment retourné la valeur d'un champs de saisie (ex:textbox) en l'affichant par un AfxMessageBoX quand j'appuie sur un b Ouverture d'une base, Gestion d'une base en C++ [ par the100tinelle ] Bonjour,je dois faire un logiciel de gestion d'articles, de clients, de devis et de factures en C++ (j'utilise Visual Studio 6.0) et je dois créer une API windows (Ouverture de fichier) [ par rivaldinho ] Salut, j'ai un fichier notepad que je voudrai lancer à partir de mon code C++ comment faire??? Ouverture et Sauvegarde de fichiers [ par klidou ] Je cherche un moyen ou une commande windows deja existante qui me permettrai d'avoir la fenetre 'windows' suivante (open & save): <IMG style="WIDTH: 3 Touches de fonctions [ par CHENRY ] En VC++6.0 avec les MFC, je souhaite employer les touches de fonction( F1 à F8) .Le but est:Dans un ecran de saisie, quand l'user est sur un champ de Activer/Désactiver champ de saisie [ par CHENRY ] En VC++ 6 avec les MFC, comment faire pour activer désactiver dynamiquement un champ de saisie.Cette option existe dans les propirétes lorsqu'on créé Créer un masque de saisie en C [ par jimmi ] Bonjour, J'ai cherché partout mais en vainje développe un petit prog. en C qui fonctionne sur des lecteurs code barre.N'etant pas un grand Spécialiste


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales