99
1010SETTINGS_INFO NewSettingsInfo;
1111
12+ static int CALLBACK
13+ BrowseFolderCallback (HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
14+ {
15+ switch (uMsg)
16+ {
17+ case BFFM_INITIALIZED:
18+ SendMessageW (hwnd, BFFM_SETSELECTIONW, TRUE , lpData);
19+ break ;
20+ case BFFM_VALIDATEFAILED:
21+ return TRUE ;
22+ }
23+ return 0 ;
24+ }
25+
1226BOOL
1327ChooseFolder (HWND hwnd)
1428{
@@ -25,24 +39,24 @@ ChooseFolder(HWND hwnd)
2539 bi.ulFlags =
2640 BIF_USENEWUI | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | /* BIF_BROWSEFILEJUNCTIONS | */ BIF_VALIDATE;
2741
28- if (SUCCEEDED (CoInitializeEx (NULL , COINIT_APARTMENTTHREADED )))
42+ if (SUCCEEDED (CoInitialize (NULL )))
2943 {
30- CStringW szBuf;
44+ WCHAR szDir[MAX_PATH];
45+ if (GetWindowTextW (GetDlgItem (hwnd, IDC_DOWNLOAD_DIR_EDIT), szDir, _countof (szDir)))
46+ {
47+ bi.lpfn = BrowseFolderCallback;
48+ bi.lParam = (LPARAM)szDir;
49+ }
3150
3251 LPITEMIDLIST lpItemList = SHBrowseForFolderW (&bi);
33- if (lpItemList && SHGetPathFromIDListW (lpItemList, szBuf. GetBuffer (MAX_PATH) ))
52+ if (lpItemList && SHGetPathFromIDListW (lpItemList, szDir ))
3453 {
35- szBuf.ReleaseBuffer ();
36- if (!szBuf.IsEmpty ())
54+ if (*szDir)
3755 {
38- SetDlgItemTextW (hwnd, IDC_DOWNLOAD_DIR_EDIT, szBuf );
56+ SetDlgItemTextW (hwnd, IDC_DOWNLOAD_DIR_EDIT, szDir );
3957 bRet = TRUE ;
4058 }
4159 }
42- else
43- {
44- szBuf.ReleaseBuffer ();
45- }
4660
4761 CoTaskMemFree (lpItemList);
4862 CoUninitialize ();
@@ -94,7 +108,9 @@ InitSettingsControls(HWND hDlg, PSETTINGS_INFO Info)
94108 SendDlgItemMessageW (hDlg, IDC_LOG_ENABLED, BM_SETCHECK, Info->bLogEnabled , 0 );
95109 SendDlgItemMessageW (hDlg, IDC_DEL_AFTER_INSTALL, BM_SETCHECK, Info->bDelInstaller , 0 );
96110
97- SetWindowTextW (GetDlgItem (hDlg, IDC_DOWNLOAD_DIR_EDIT), Info->szDownloadDir );
111+ HWND hCtl = GetDlgItem (hDlg, IDC_DOWNLOAD_DIR_EDIT);
112+ SetWindowTextW (hCtl, Info->szDownloadDir );
113+ SendMessageW (hCtl, EM_LIMITTEXT, MAX_PATH - 1 , 0 );
98114
99115 CheckRadioButton (hDlg, IDC_PROXY_DEFAULT, IDC_USE_PROXY, IDC_PROXY_DEFAULT + Info->Proxy );
100116
0 commit comments