2 * PROJECT: ReactX Diagnosis Application
3 * LICENSE: LGPL - See COPYING in the top level directory
4 * FILE: base/applications/dxdiag/dxdiag.c
5 * PURPOSE: ReactX diagnosis application entry
6 * COPYRIGHT: Copyright 2008 Johannes Anderwald
16 //---------------------------------------------------------------
18 DestroyTabCtrlDialogs(PDXDIAG_CONTEXT pContext
)
22 /* destroy default dialogs */
23 for(Index
= 0; Index
< sizeof(pContext
->hDialogs
) / sizeof(HWND
); Index
++)
25 if (pContext
->hDialogs
[Index
])
26 DestroyWindow(pContext
->hDialogs
[Index
]);
29 /* destroy display dialogs */
30 for(Index
= 0; Index
< pContext
->NumDisplayAdapter
; Index
++)
32 if (pContext
->hDisplayWnd
[Index
])
33 DestroyWindow(pContext
->hDisplayWnd
[Index
]);
36 /* destroy audio dialogs */
37 for(Index
= 0; Index
< pContext
->NumSoundAdapter
; Index
++)
39 if (pContext
->hSoundWnd
[Index
])
40 DestroyWindow(pContext
->hSoundWnd
[Index
]);
45 //---------------------------------------------------------------
47 InsertTabCtrlItem(HWND hDlgCtrl
, INT Position
, LPWSTR uId
)
53 memset(&item
, 0, sizeof(TCITEM
));
54 item
.mask
= TCIF_TEXT
;
60 if (!LoadStringW(hInst
, LOWORD(uId
), szName
, 100))
63 item
.pszText
= szName
;
71 SendMessageW(hDlgCtrl
, TCM_INSERTITEM
, Position
, (LPARAM
)&item
);
75 TabCtrl_OnSelChange(PDXDIAG_CONTEXT pContext
)
80 /* retrieve new page */
81 CurSel
= TabCtrl_GetCurSel(hTabCtrlWnd
);
82 if (CurSel
< 0 || CurSel
> pContext
->NumDisplayAdapter
+ pContext
->NumSoundAdapter
+ 5)
85 /* hide all windows */
86 for(Index
= 0; Index
< 5; Index
++)
87 ShowWindow(pContext
->hDialogs
[Index
], SW_HIDE
);
89 for(Index
= 0; Index
< pContext
->NumDisplayAdapter
; Index
++)
90 ShowWindow(pContext
->hDisplayWnd
[Index
], SW_HIDE
);
92 for(Index
= 0; Index
< pContext
->NumSoundAdapter
; Index
++)
93 ShowWindow(pContext
->hSoundWnd
[Index
], SW_HIDE
);
96 if (CurSel
== 0 || CurSel
> pContext
->NumDisplayAdapter
+ pContext
->NumSoundAdapter
)
99 CurSel
-= pContext
->NumDisplayAdapter
+ pContext
->NumSoundAdapter
;
100 ShowWindow(pContext
->hDialogs
[CurSel
], SW_SHOW
);
104 if (CurSel
-1 < pContext
->NumDisplayAdapter
)
106 ShowWindow(pContext
->hDisplayWnd
[CurSel
-1], SW_SHOW
);
110 CurSel
-= pContext
->NumDisplayAdapter
+ 1;
111 ShowWindow(pContext
->hSoundWnd
[CurSel
], SW_SHOW
);
115 InitializeTabCtrl(HWND hwndDlg
, PDXDIAG_CONTEXT pContext
)
118 hTabCtrlWnd
= GetDlgItem(hwndDlg
, IDC_TAB_CONTROL
);
119 pContext
->hTabCtrl
= hTabCtrlWnd
;
121 /* create the dialogs */
122 pContext
->hDialogs
[0] = CreateDialogParamW(hInst
, MAKEINTRESOURCEW(IDD_SYSTEM_DIALOG
), hTabCtrlWnd
, SystemPageWndProc
, (LPARAM
)pContext
);
123 pContext
->hDialogs
[1] = CreateDialogParamW(hInst
, MAKEINTRESOURCEW(IDD_MUSIC_DIALOG
), hTabCtrlWnd
, MusicPageWndProc
, (LPARAM
)pContext
);
124 pContext
->hDialogs
[2] = CreateDialogParamW(hInst
, MAKEINTRESOURCEW(IDD_INPUT_DIALOG
), hTabCtrlWnd
, InputPageWndProc
, (LPARAM
)pContext
);
125 pContext
->hDialogs
[3] = CreateDialogParamW(hInst
, MAKEINTRESOURCEW(IDD_NETWORK_DIALOG
), hTabCtrlWnd
, NetworkPageWndProc
, (LPARAM
)pContext
);
126 pContext
->hDialogs
[4] = CreateDialogParamW(hInst
, MAKEINTRESOURCEW(IDD_HELP_DIALOG
), hTabCtrlWnd
, HelpPageWndProc
, (LPARAM
)pContext
);
128 /* insert tab ctrl items */
129 InsertTabCtrlItem(hTabCtrlWnd
, 0, MAKEINTRESOURCEW(IDS_SYSTEM_DIALOG
));
130 InitializeDisplayAdapters(pContext
);
131 InitializeDirectSoundPage(pContext
);
132 InsertTabCtrlItem(hTabCtrlWnd
, pContext
->NumDisplayAdapter
+ pContext
->NumSoundAdapter
+ 1, MAKEINTRESOURCEW(IDS_MUSIC_DIALOG
));
133 InsertTabCtrlItem(hTabCtrlWnd
, pContext
->NumDisplayAdapter
+ pContext
->NumSoundAdapter
+ 2, MAKEINTRESOURCEW(IDS_INPUT_DIALOG
));
134 InsertTabCtrlItem(hTabCtrlWnd
, pContext
->NumDisplayAdapter
+ pContext
->NumSoundAdapter
+ 3, MAKEINTRESOURCEW(IDS_NETWORK_DIALOG
));
135 InsertTabCtrlItem(hTabCtrlWnd
, pContext
->NumDisplayAdapter
+ pContext
->NumSoundAdapter
+ 4, MAKEINTRESOURCEW(IDS_HELP_DIALOG
));
136 TabCtrl_OnSelChange(pContext
);
140 InitializeDxDiagDialog(HWND hwndDlg
)
142 PDXDIAG_CONTEXT pContext
;
145 pContext
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(DXDIAG_CONTEXT
));
149 /* store window handle */
150 pContext
->hMainDialog
= hwndDlg
;
152 /* store the context */
153 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pContext
);
155 /* initialize the tab ctrl */
156 InitializeTabCtrl(hwndDlg
, pContext
);
158 /* load application icon */
159 hIcon
= LoadImageW(hInst
, MAKEINTRESOURCEW(IDI_APPICON
), IMAGE_ICON
, 16, 16, 0);
163 SendMessage(hwndDlg
, WM_SETICON
, ICON_SMALL
, (LPARAM
)hIcon
);
168 DxDiagWndProc(HWND hwndDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
)
171 PDXDIAG_CONTEXT pContext
;
173 pContext
= (PDXDIAG_CONTEXT
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
178 InitializeDxDiagDialog(hwndDlg
);
181 if (LOWORD(wParam
) == IDC_BUTTON_SAVE_INFO
)
184 /* handle save information */
188 if (LOWORD(wParam
) == IDC_BUTTON_NEXT
)
192 /* retrieve current page */
193 CurSel
= TabCtrl_GetCurSel(hTabCtrlWnd
);
196 /* enable/disable next button */
197 EnableWindow(GetDlgItem(hwndDlg
, IDC_BUTTON_NEXT
),
198 (CurSel
!= TabCtrl_GetItemCount(hTabCtrlWnd
) - 1));
200 /* switch to next page */
201 SendMessageW(hTabCtrlWnd
, TCM_SETCURSEL
, CurSel
, 0L);
206 if (LOWORD(wParam
) == IDC_BUTTON_HELP
)
209 /* handle help button */
213 if (LOWORD(wParam
) == IDCANCEL
|| LOWORD(wParam
) == IDC_BUTTON_EXIT
) {
214 EndDialog(hwndDlg
, LOWORD(wParam
));
220 pnmh
= (LPNMHDR
)lParam
;
221 if ((pnmh
->hwndFrom
== hTabCtrlWnd
) && (pnmh
->idFrom
== IDC_TAB_CONTROL
) && (pnmh
->code
== TCN_SELCHANGE
))
223 INT CurSel
= TabCtrl_GetCurSel(hTabCtrlWnd
);
225 /* enable/disable next button */
226 EnableWindow(GetDlgItem(hwndDlg
, IDC_BUTTON_NEXT
),
227 (CurSel
!= TabCtrl_GetItemCount(hTabCtrlWnd
) - 1));
229 TabCtrl_OnSelChange(pContext
);
233 DestroyTabCtrlDialogs(pContext
);
234 return DefWindowProc(hwndDlg
, message
, wParam
, lParam
);
239 int APIENTRY
wWinMain(HINSTANCE hInstance
,
240 HINSTANCE hPrevInstance
,
245 INITCOMMONCONTROLSEX InitControls
;
247 UNREFERENCED_PARAMETER(hPrevInstance
);
248 UNREFERENCED_PARAMETER(lpCmdLine
);
249 UNREFERENCED_PARAMETER(nCmdShow
);
251 InitControls
.dwSize
= sizeof(INITCOMMONCONTROLSEX
);
252 InitControls
.dwICC
= ICC_TAB_CLASSES
| ICC_LISTVIEW_CLASSES
| ICC_STANDARD_CLASSES
| ICC_TREEVIEW_CLASSES
;
253 InitCommonControlsEx(&InitControls
);
257 DialogBox(hInst
, MAKEINTRESOURCE(IDD_MAIN_DIALOG
), NULL
, DxDiagWndProc
);