Focus et couleur... en C pour PocketPC

Signaler
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
-
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
-
Bonjour a vous
Dans mon projet, je dois créer différents composant visuel pour Pocket PC : libellé, editbox,bouton et listbox (la aussi pa le choix)
- Comment peut-on donner le focus a un editbox par exemple (j'entends par là curseur dessus bien sur ^^)? De plus, j'ai insérer par exemple comme ceci la fonction TABSTOP, mais celle ci ne fonctionne pas lorsque je clique sur un editbox et que je veux passer au composant suivant : 
hBtn = CreateWindowEx(0,TEXT("EDIT"),...,WS_VISIBLE | WS_BORDER | WS_CHILD | WS_TABSTOP,...);

- J'aimerais pouvoir mettre une couleur de fond aux editbox, ou a certaines lignes de listbox? Comment faire? En C cela parait bien compliqué?

- Enfin, le fait d'utiliser des listbox miterdit-il d'avoir un entete pour la liste?? ( en effet pour afficher sous forme de tableaux dans ma listbox, je marrange pour aligner les différentes valeurs, mais celle-ci n'ont pas d'entete pour l'instant... :S )
 
Les recherches que j'ai faites n'ont pas abouties, les résultats m'étant pour la plupart donnés en C++...(SetFocus(),...)
Je rappelle que mon projet est en C, ( et sans MFC comme vous l'avez peut etre constaté)...
Merci a vous si vous avez des idées, je bloque vraiment... Une reponse meme pour une seule question me débloquera toujours un peu ;)

6 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Je n'ai jamais codé pour Pocket PC mais, malgré ses spécificités, je pense qu'il dispose des mêmes fonctionnalités graphiques standard de Windows.
- Pour donner le focus à controle,on utilise SetFocus(). C'est une API utilisable avec n'importe quel langage ( C   C++ ou autres).
- Avec le style WS_TABSTOP on peut passer d'un controle à l'autre avec la touche de tabulation et ce quel que soit le type de controle. Il suffit qu'il ait le style WS_TABSTOP.
- Pour changer la couleur de fond d'un Edit, on traite le message WM_CTLCOLOREDIT et retourner un HBRUSH de la couleur voulue. Voici un exemple:
http://www.cppfrance.com/code.aspx?ID=27889
Tout cela est faisable en C bien sûr.
- Pour la question sur les en-têtes des listbox, j'ai pas compris ce que tu veux faire exactement.
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

Merci beaucoup je regarde ca dans la matinée.
Pour le SetFocus, alors je dois mal l'utiliser ( je fais un identifiantEditBox.SetFocus()...)
 et j'ai bien mis le WS_TABSTOP  mais je vais vérifer ça.

En fait pour les entete de listbox : on ne peut pas mettre plusieurs colonnes dans une ListBox, genre tableau.
Donc pour cela, on fait un systeme de tabulations entre chaque parametre affiché pour les metre sous forme de colonne... Donc j'aurais aimé savoir si j pouvais faire de meme pour mettre des entete a ma ListBox,  comme on le ferais pour un CListCtrl en C++ par exemple...

Merci encore pour ta réponse, et je reviens en cas de souci ;-)
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
On passe le HWND du controle comme paramètre à la fonctions SetFocus():
SetFocus(hwndcontrole);
Pour créer une Lisbox multicolonne en lui appliquant le style LBS_MULTICOLUMN. Je ne pense pas qu'il est possible de lui mettre un en-tête en interne mais tu peux ajouter des controles juste en dessus jouant le rôle d'en-tête. Il est donc préférable d'utiliser une ListView qui est prévue pour ça.
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

Salut,
Pour le SetFocus ca marche pour mes EditBox, pas pour mes boutons, j'ai peut etre une subtilité  trouver...
Quant au WS_TABSTOP, je l'ai mis sur tous les composants, et si je clique sur un Edit par exemple et que je fais Tab, rien de réagit?!
QUant à la listbox mutlicolonne, ta réponse LBS_MULTICOLUMN pas exacte ;-).
En fait LBS_MUTLICOLUMN permet seulement de mettre une meme colonne sur deux si celle ci est trop longue pour ta table par exemple. Mais je vais regarder de plus pret pour simuler des entete comme tu me le suggere ( peut etre des boutons en mode disable en face de mes colonnes, a voir...)

Si une idée te vient pour le WS_TABSTOP et mes focus de bouton, je suis tout ouïe ;-)
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

Sur un autre forum en janvier tu avais proposé pour le WS_TABSTOP :


     MSG msg;
    while (GetMessage(&msg, 0, 0, 0) )
    {
        if (!IsDialogMessage(hwnd, &msg) )
        {
            TranslateMessage(&msg);
             DispatchMessage(&msg);
        }
    }

Ca ne fonctionne pas pour moi : hwnd est bien ma fenetre principale, et jai mi WS_TABSTOP sur tout mes controle créé avec CReateWindowEx...
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Ma réponse sur LBS_MULTICOLUMN est exacte mais apparemment elle ne corerspond pas à ce que tu veux faire. Je pense que dans ton cas une ListView est indispensable.
Avec la boucle des messages que tu as mentionnée, normalement tout devrait fonctionner si ta fenêtre est une vraie fenêtre mère contenant des controles ayant le style WS_TABSTOP.
Je crois plûtot que tu as une boite de dialogue. J'attends ta confirmation pour te donner la solution.