API Windows en C

Le contrôle ToolTips

CGi

Le contrôle ToolTips. ♪

- Titre : API Windows en C

- Auteur : CGi

- Parution : 29 juin 2006

- Mise à jour : 4 janvier 2013

- Licence : Copyright ® 2006 CGi. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Création et initialisation du contrôle

- III. Code complet

- III-A. main.c

I - Introduction

Dans ce chapitre, nous allons aborder le contrôle ToolTips.

On appelle contrôle ToolTips les bulles d'aide qui apparaissent quand on positionne le curseur de la souris au-dessus d'un contrôle.

II - Création et initialisation du contrôle

Le contrôle ToolTips se crée avec CreateWindow comme tout autre contrôle. Il peut gérer plusieurs tips (bulle d'aide). En fait c'est le même contrôle qui est caché, déplacé, rendu visible et où son texte est modifié selon le contexte. Pour chaque bulle d'aide, on doit remplir une structure de type TOOLINFO qui doit notamment être remplie avec le handle du contrôle auquel est affectée la bulle d'aide, mais aussi avec ses coordonnées. Elle sera enregistrée dans le contrôle Tooltips en lui envoyant cette structure par adresse à l'aide d'un message TTM_ADDTOOL.

1. TOOLINFO ti;

2. RECT rect;

4. InitCommonControls();

6. hTTip = CreateWindow(TOOLTIPS_CLASS, NULL,

7. WS_POPUP | TTS_NOPREFIX | TTS_BALLOON,

8. CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

9. hwnd, NULL, hInst, NULL);

11. GetClientRect (hwnd, &rect);

12. ti.cbSize = sizeof(TOOLINFO);

13. ti.uFlags = TTF_SUBCLASS;

14. ti.hwnd = hwnd;

15. ti.hinst = hInst;

16. ti.uId = 0;

17. ti.lpszText = "C'est la fenêtre principale.";

18. ti.rect.left = rect.left;

19. ti.rect.top = rect.top;

20. ti.rect.right = rect.right;

21. ti.rect.bottom = rect.bottom;

22. SendMessage(hTTip, TTM_ADDTOOL, 0, (LPARAM) &ti);

24. GetClientRect (hwnd, &rect);

25. ti.hwnd = hBtn;

26. ti.uId = 0;

27. ti.lpszText = "C'est un bouton, vous pouvez appuyer dessus.";

28. ti.rect.left = rect.left;

29. ti.rect.top = rect.top;

30. ti.rect.right = rect.right;

31. ti.rect.bottom = rect.bottom;

32. SendMessage(hTTip, TTM_ADDTOOL, 0, (LPARAM) &ti);

III - Code complet

III-A - main.c

1. #include <windows.h>

2. #include <commctrl.h>

4. LONG APIENTRY WndProc(HWND hwnd, UINT uMsg, UINT wParam, LONG lParam);

6. HINSTANCE hInst;

8. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

9. LPSTR lpCmdLine, int nCmdShow)

10. {

11. HWND hwndMain ;

12. MSG msg;

13. WNDCLASS wc;

15. hInst = hInstance;

17. wc.style = 0;

18. wc.lpfnWndProc = (WNDPROC) WndProc;

19. wc.cbClsExtra = 0;

20. wc.cbWndExtra = 0;

21. wc.hInstance = hInstance;

22. wc.hIcon = LoadIcon((HINSTANCE) NULL, IDI_APPLICATION);

23. wc.hCursor = LoadCursor((HINSTANCE) NULL, IDC_ARROW);

24. wc.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);

25. wc.lpszMenuName =  MAKEINTRESOURCE(1); ;

26. wc.lpszClassName = "MainWndClass";

27. if (!RegisterClass(&wc))  return FALSE;

29. hwndMain = CreateWindow("MainWndClass", "WinApi",

30. WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,

31. 360, 280,  NULL,  NULL, hInstance,  NULL);

32. ShowWindow(hwndMain, nCmdShow);

33. UpdateWindow(hwndMain);

35. while (GetMessage(&msg, NULL, 0, 0))

36. {

37. TranslateMessage(&msg);

38. DispatchMessage(&msg);

39. }

40. return 0;

41. }

44. LONG APIENTRY WndProc(HWND hwnd, UINT uMsg, UINT wParam, LONG lParam)

45. {

46. static HWND hBtn;

47. static HWND hTTip;

49. switch ( uMsg ) {

51. case WM_CREATE:

52. {

53. TOOLINFO ti;

54. RECT rect;

56. hBtn = CreateWindow("button", "Bouton", WS_CHILD | WS_VISIBLE,

57. 100, 100, 96, 24, hwnd, NULL, hInst, NULL);

59. InitCommonControls();

61. hTTip = CreateWindow(TOOLTIPS_CLASS, NULL,

62. WS_POPUP | TTS_NOPREFIX | TTS_BALLOON,

63. CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

64. hwnd, NULL, hInst, NULL);

66. SendMessage(hTTip, TTM_SETTITLE, TTI_INFO , (LPARAM)"Titre");

68. GetClientRect (hwnd, &rect);

69. ti.cbSize = sizeof(TOOLINFO);

70. ti.uFlags = TTF_SUBCLASS;

71. ti.hwnd = hwnd;

72. ti.hinst = hInst;

73. ti.uId = 0;

74. ti.lpszText = "C'est la fenêtre principale.";

75. ti.rect.left = rect.left;

76. ti.rect.top = rect.top;

77. ti.rect.right = rect.right;

78. ti.rect.bottom = rect.bottom;

79. SendMessage(hTTip, TTM_ADDTOOL, 0, (LPARAM) &ti);

81. GetClientRect (hwnd, &rect);

82. ti.hwnd = hBtn;

83. ti.uId = 0;

84. ti.lpszText = "C'est un bouton, vous pouvez appuyer dessus.";

85. ti.rect.left = rect.left;

86. ti.rect.top = rect.top;

87. ti.rect.right = rect.right;

88. ti.rect.bottom = rect.bottom;

89. SendMessage(hTTip, TTM_ADDTOOL, 0, (LPARAM) &ti);

91. return 0;

92. }

94. case WM_DESTROY:

95. PostQuitMessage(0);

96. return 0;

97. }

98. return DefWindowProc(hwnd, uMsg, wParam, lParam);

99. }

J'ai testé les compilations avec C++ Builder et DevC++

À vos PC.

CGi

Retour au sommaire.