Bonjour,
j'ai une application avec un dialogue et des controles.
Un de mes controles est un CListCtrl qui possede un barre de scrolling vertical.
Lorsque je me deplace avec les touches le focus va de controle en controle et lorsqu'il arrive sur le listctrl il se deplace ligne par ligne.
Ce que je voudrais c'est que lorsque le focus arrive sur mon clistctrl et que je me deplace vers le bas ou le haut que ce soit la barre de scroll qui bouge.
En gros je ne veux pas me deplacer a l'interieur de mon CListCtrl je veux juste deplacer la barre.
J'ai commencé par ca :
BEGIN_MESSAGE_MAP(CHistoryListCtrl, CListCtrl)
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_VSCROLL()
ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, &CHistoryListCtrl::OnLvnItemchanged)
END_MESSAGE_MAP()
Mais ensuite je ne vois pas trop comment empecher le survol de mes items et comment deplacer la barre de scroll en fonction des touches.
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 void CHistoryListCtrl::OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR); /*if (IsItemDisabled(pNMLV->iItem) && (pNMLV->uNewState & LVIS_SELECTED) == LVIS_SELECTED) { SetItemState(pNMLV->iItem, 0, LVIS_SELECTED|LVIS_FOCUSED); }*/ *pResult = 0; } BOOL CHistoryListCtrl::PreTranslateMessage(MSG* pMsg) { switch (pMsg->message) { case WM_KEYUP: TRACE( _T("\nWM_KEYUP : ") ); switch(pMsg->wParam) { case VK_UP: TRACE(_T("VK_UP")); //RedirectVScroll(SB_LINEUP, 0, NULL); //HandleScroll( VK_UP ); //return TRUE; break; case VK_DOWN: TRACE(_T("VK_DOWN")); //RedirectVScroll(SB_LINEDOWN, 0, NULL); //HandleScroll( VK_DOWN ); //return TRUE; break; } break; } return CListCtrl::PreTranslateMessage( pMsg ); }[/B]
Partager