Bonjour,
Pour vous faire une idée en premier lieu, voici mon code :
main.cpp:
Interface.h:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100 #include <windows.h> #include "constants.h" #include "Interface.h" HINSTANCE hInst; int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { HWND hwnd; MSG messages; WNDCLASSEX wincl; hInst = hThisInstance; wincl.hInstance = hThisInstance; wincl.lpszClassName = NAME; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof (WNDCLASSEX); wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE); if (!RegisterClassEx (&wincl)) return 0; hwnd = CreateWindowEx ( 0, NAME, NAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 542, 373, HWND_DESKTOP, NULL, hThisInstance, NULL ); ShowWindow (hwnd, nFunsterStil); while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); } return messages.wParam; } LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { Tabs *tabs; switch (message) { case WM_CREATE: tabs = new Tabs(hwnd); tabs->changeTab(0); return 0; case WM_NOTIFY: { LPNMHDR pnmhdr = (LPNMHDR)lParam ; if(pnmhdr->code == TCN_SELCHANGE && tabs->whichOneSelected()==0) tabs->changeTab(0); if(pnmhdr->code == TCN_SELCHANGE && tabs->whichOneSelected()==1) tabs->changeTab(1); if(pnmhdr->code == TCN_SELCHANGE && tabs->whichOneSelected() == 2) tabs->changeTab(2); } return 0; case WM_DESTROY: delete tabs; PostQuitMessage (0); break; default: return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }
Interface.cpp:
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 #ifndef INTERFACE_H #define INTERFACE_H #include <windows.h> #include <commctrl.h> #include "constants.h" class IconsTab { public: IconsTab(HWND); void show(bool); private: HWND _etchedFrames[3]; HWND _icon; HWND _path; HWND _extension; HWND _buttons[2]; }; class Tabs { public: Tabs(HWND); int whichOneSelected(); void changeTab(int); private: IconsTab _icons; HWND _hTabs; }; #endif
En fait, j'ai remarqué que n'importe quelle action sur _hTabs, que cela soit directement TabCtrl_GetCurSel sur ce membre au préalable mis en public, ou encore par le biais d'une méthode etc..., plantait lamentablement. J'aimerais savoir pourquoi... pourtant, il est bien rempli ... Cela vient obligatoirement de l'implémentation C++ en classes puisqu'un code de ce même site, tout bête, marche parfaitement.
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 #include "Interface.h" extern HINSTANCE hInst; void Tabs::changeTab(int selection) { switch(selection) { case 0: _icons.show(false); break; case 1: _icons.show(true); break; case 2: _icons.show(false); break; } return; } int Tabs::whichOneSelected() { return TabCtrl_GetCurSel(_hTabs); } Tabs::Tabs(HWND parent) : _icons(parent) { TC_ITEM tci; InitCommonControls(); _hTabs = CreateWindowEx(0 , WC_TABCONTROL, "", WS_CHILD | WS_VISIBLE, 0, 0, 536, 341, parent, NULL, hInst, NULL); tci.mask = TCIF_TEXT; tci.pszText = #ifdef ENGLISH "Startup" #elif defined FRENCH "Démarrage" #endif ; TabCtrl_InsertItem(_hTabs, 1, &tci); tci.pszText = #ifdef ENGLISH "Icons" #elif defined FRENCH "Icônes" #endif ; TabCtrl_InsertItem(_hTabs, 2, &tci); tci.pszText = "Associations"; TabCtrl_InsertItem(_hTabs, 3, &tci); }; IconsTab::IconsTab(HWND parent) { _buttons[0] = CreateWindow("BUTTON", #ifdef ENGLISH "Apply" #elif defined FRENCH "Appliquer" #endif , BS_PUSHBUTTON | WS_CHILD, 50, 100, #ifdef ENGLISH 70 #elif defined FRENCH 14*8 #endif , 30, parent, (HMENU)NULL, hInst, NULL); } void IconsTab::show(bool state) { ShowWindow(_buttons[0], (state==true)?SW_SHOW:SW_HIDE); return; }
Que faire ?
Merci d'avance.
Partager