6 static PWCHAR
*pOglDrivers
= NULL
;
7 static DWORD dwNumDrivers
= 0;
9 static VOID
InitSettings(HWND hWndDlg
)
13 WCHAR szBuffer
[MAX_KEY_LENGTH
];
14 WCHAR szBultin
[MAX_KEY_LENGTH
];
15 WCHAR szDriver
[MAX_KEY_LENGTH
];
17 DWORD dwSize
= MAX_KEY_LENGTH
;
19 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, KEY_DRIVERS
, 0, KEY_READ
, &hKeyDrivers
) != ERROR_SUCCESS
)
22 if (RegCreateKeyExW(HKEY_CURRENT_USER
, KEY_RENDERER
, 0, NULL
, 0, MAXIMUM_ALLOWED
, NULL
, &hKeyRenderer
, NULL
) != ERROR_SUCCESS
)
24 RegCloseKey(hKeyDrivers
);
28 LoadString(hApplet
, IDS_DEBUG_DNM
, (LPTSTR
)szBultin
, 127);
29 SendDlgItemMessageW(hWndDlg
, IDC_DEBUG_OUTPUT
, CB_ADDSTRING
, 0, (LPARAM
)szBultin
);
31 LoadString(hApplet
, IDS_DEBUG_SET
, (LPTSTR
)szBultin
, 127);
32 SendDlgItemMessageW(hWndDlg
, IDC_DEBUG_OUTPUT
, CB_ADDSTRING
, 0, (LPARAM
)szBultin
);
34 LoadString(hApplet
, IDS_DEBUG_CLEAR
, (LPTSTR
)szBultin
, 127);
35 SendDlgItemMessageW(hWndDlg
, IDC_DEBUG_OUTPUT
, CB_ADDSTRING
, 0, (LPARAM
)szBultin
);
37 SendDlgItemMessageW(hWndDlg
, IDC_DEBUG_OUTPUT
, CB_SETCURSEL
, 0, 0);
39 LoadString(hApplet
, IDS_RENDERER_DEFAULT
, (LPTSTR
)szBultin
, 127);
40 SendDlgItemMessageW(hWndDlg
, IDC_RENDERER
, CB_ADDSTRING
, 0, (LPARAM
)szBultin
);
42 LoadString(hApplet
, IDS_RENDERER_RSWR
, (LPTSTR
)szBultin
, 127);
43 SendDlgItemMessageW(hWndDlg
, IDC_RENDERER
, CB_ADDSTRING
, 0, (LPARAM
)szBultin
);
45 if (RegQueryValueExW(hKeyRenderer
, NULL
, NULL
, &dwType
, (LPBYTE
)szDriver
, &dwSize
) != ERROR_SUCCESS
|| dwSize
== sizeof(WCHAR
))
46 SendDlgItemMessageW(hWndDlg
, IDC_RENDERER
, CB_SETCURSEL
, RENDERER_DEFAULT
, 0);
53 if (wcsncmp(szBultin
, szDriver
, MAX_KEY_LENGTH
) == 0)
54 SendDlgItemMessageW(hWndDlg
, IDC_RENDERER
, CB_SETCURSEL
, RENDERER_RSWR
, 0);
56 ret
= RegQueryInfoKeyW(hKeyDrivers
, NULL
, NULL
, NULL
, &dwNumDrivers
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
);
58 if (ret
!= ERROR_SUCCESS
|| dwNumDrivers
<= 0)
60 RegCloseKey(hKeyDrivers
);
61 RegCloseKey(hKeyRenderer
);
65 pOglDrivers
= HeapAlloc(GetProcessHeap(), 0, dwNumDrivers
* sizeof(PWCHAR
));
70 for (iKey
= 0; iKey
< dwNumDrivers
; iKey
++)
72 dwSize
= MAX_KEY_LENGTH
;
73 ret
= RegEnumKeyEx(hKeyDrivers
, iKey
, szBuffer
, &dwSize
, NULL
, NULL
, NULL
, NULL
);
75 if (ret
!= ERROR_SUCCESS
)
78 /* Mind the null terminator */
81 pOglDrivers
[iKey
] = HeapAlloc(GetProcessHeap(), 0, dwSize
* sizeof(WCHAR
));
83 if (!pOglDrivers
[iKey
])
86 SendDlgItemMessageW(hWndDlg
, IDC_RENDERER
, CB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
88 StringCchCopy(pOglDrivers
[iKey
], dwSize
, szBuffer
);
90 if (wcsncmp(szBuffer
, szDriver
, MAX_KEY_LENGTH
) == 0)
91 SendDlgItemMessageW(hWndDlg
, IDC_RENDERER
, CB_SETCURSEL
, iKey
+ 2, 0);
95 RegCloseKey(hKeyDrivers
);
96 RegCloseKey(hKeyRenderer
);
101 static VOID
SaveSettings(HWND hWndDlg
)
107 if (RegOpenKeyExW(HKEY_CURRENT_USER
, KEY_RENDERER
, 0, KEY_WRITE
, &hKeyRenderer
) != ERROR_SUCCESS
)
110 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, KEY_DEBUG_CHANNEL
, 0, KEY_WRITE
, &hKeyDebug
) == ERROR_SUCCESS
)
112 iSel
= (INT
)SendDlgItemMessageW(hWndDlg
, IDC_DEBUG_OUTPUT
, CB_GETCURSEL
, 0, 0);
117 RegSetValueExW(hKeyDebug
, L
"DEBUGCHANNEL", 0, REG_SZ
, (PBYTE
)L
"+opengl,+wgl", 13 * sizeof(WCHAR
));
121 RegSetValueExW(hKeyDebug
, L
"DEBUGCHANNEL", 0, REG_SZ
, (PBYTE
)L
"", sizeof(WCHAR
));
124 RegCloseKey(hKeyDebug
);
127 iSel
= (INT
)SendDlgItemMessageW(hWndDlg
, IDC_RENDERER
, CB_GETCURSEL
, 0, 0);
134 case RENDERER_DEFAULT
:
135 RegSetValueExW(hKeyRenderer
, L
"", 0, REG_SZ
, (PBYTE
)L
"", sizeof(WCHAR
));
140 WCHAR szBuffer
[MAX_KEY_LENGTH
];
141 LoadString(hApplet
, IDS_RENDERER_RSWR
, (LPTSTR
)szBuffer
, 127);
142 RegSetValueExW(hKeyRenderer
, L
"", 0, REG_SZ
, (PBYTE
)szBuffer
, (wcslen(szBuffer
) + 1) * sizeof(WCHAR
));
148 /* Adjustment for DEFAULT and RSWR renderers */
151 if (iSel
>= 0 && iSel
<= dwNumDrivers
)
152 RegSetValueExW(hKeyRenderer
, L
"", 0, REG_SZ
, (PBYTE
)pOglDrivers
[iSel
], (wcslen(pOglDrivers
[iSel
]) + 1) * sizeof(WCHAR
));
158 RegCloseKey(hKeyRenderer
);
162 INT_PTR CALLBACK
GeneralPageProc(HWND hWndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
169 InitSettings(hWndDlg
);
173 if (LOWORD(wParam
) == IDC_RENDERER
|| IDC_DEBUG_OUTPUT
)
174 PropSheet_Changed(GetParent(hWndDlg
), hWndDlg
);
178 lppsn
= (LPPSHNOTIFY
)lParam
;
179 if (lppsn
->hdr
.code
== PSN_APPLY
)
181 SaveSettings(hWndDlg
);
189 for (iKey
= 0; iKey
<= dwNumDrivers
; iKey
++)
190 HeapFree(GetProcessHeap(), 0, pOglDrivers
[iKey
]);
192 HeapFree(GetProcessHeap(), 0, pOglDrivers
);