Bonjour à tous,
Avant d'expliquer le problème, voici je que j'essaye de faire. J'ai un tabControl avec 2 onglets (entre autres). Le premier contient une listbox avec la liste des fenêtres ouvertes, et le deuxième contenant un listview avec la liste des processus. Cette partie de mon application est très similaire au gestionnaire des tâches de Windows. Je veux que lorsque l'utilisateur sélectionne une fenêtre (via la listbox) et qu'il clique sur un bouton, le programme bascule vers le deuxième onglet et sélectionne le processus correspondant à la fenêtre dans la liste.
Dans mon code, je commence donc par trouver la bonne ligne dans le listview (après avoir basculé dans le 2ème onglet), puis je la sélectionne en utilisant le message LVM_SETITEMSTATE. Enfin je donne le focus au listview avec le message WM_NEXTDLGCTL pour que la sélection soit bien visible. C'est là que ça coince... En effet lorsque je réduit puis que je restaure la fenêtre de mon application, la listview apparaît comme un grand rectangle blanc. Je suis obliger de changer d'onglet manuellement pour que sont contenu soit de nouveau visible.
Voici le code qui me permet de sélectionner la ligne dans le listview:
Voici un petit aperçu du problème: (le rectangle blanc est l'emplacement du listview)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 // On donne le focus au listview SendMessage(hWndMain, WM_NEXTDLGCTL, (WPARAM)hProcessList, TRUE); // J'ai exactement le même problème avec SetFocus(hProcessList) HWND hTabCtl = GetDlgItem(hWndMain, IDC_TAB1); // On bascule sur l'autre onglet SendMessage(hTabCtl, TCM_SETCURSEL, 4, 0); UpdateTab(hWndMain); LVITEM lvItem; ZeroMemory(&lvItem, sizeof(LVITEM)); int index=2; // index de la ligne à sélectionner, j'ai supprimer la partie concernant la recherche de la ligne pour alléger le code lvItem.state = LVIS_SELECTED; lvItem.stateMask = LVIS_SELECTED; // On sélectionne la 2ème ligne SendMessage(hProcessList, LVM_SETITEMSTATE, index, (LONG)&lvItem); SendMessage(hProcessList, LVM_ENSUREVISIBLE, index, 0);
Est-ce que quelqu'un à déjà rencontrer ce type de problème ? Ou bien est ce que j'ai oublié quelques chose ?
Merci d'avance pour toute suggestion, idée...
Benoît
PS: Je n'ai pas ce problème d'actualisation si je ne donne pas le focus au listview. Malheureusement dans ce cas la sélection est très peu visible...
Partager