BOOL CSetMainPage::OnInitDialog() { ISettingsPropPage::OnInitDialog(); EnableToolTips(); m_sTempExtensions = m_regExtensions; m_dwLanguage = m_regLanguage; m_bUseAero = m_regUseAero; CDwmApiImpl dwm; dwm.Initialize(); DialogEnableWindow(IDC_AERODWM, dwm.IsDwmCompositionEnabled()); CString temp; temp = m_regLastCommitTime; m_bLastCommitTime = (temp.CompareNoCase(L"yes")==0); m_tooltips.Create(this); m_tooltips.AddTool(IDC_TEMPEXTENSIONSLABEL, IDS_SETTINGS_TEMPEXTENSIONS_TT); m_tooltips.AddTool(IDC_TEMPEXTENSIONS, IDS_SETTINGS_TEMPEXTENSIONS_TT); m_tooltips.AddTool(IDC_COMMITFILETIMES, IDS_SETTINGS_COMMITFILETIMES_TT); m_tooltips.AddTool(IDC_CREATELIB, IDS_SETTINGS_CREATELIB_TT); DialogEnableWindow(IDC_CREATELIB, SysInfo::Instance().IsWin7OrLater()); // set up the language selecting combobox TCHAR buf[MAX_PATH] = { 0 }; GetLocaleInfo(1033, LOCALE_SNATIVELANGNAME, buf, _countof(buf)); m_LanguageCombo.AddString(buf); m_LanguageCombo.SetItemData(0, 1033); CString path = CPathUtils::GetAppParentDirectory(); path = path + L"Languages\\"; CSimpleFileFind finder(path, L"*.dll"); int langcount = 1; while (finder.FindNextFileNoDirectories()) { CString file = finder.GetFilePath(); CString filename = finder.GetFileName(); if (filename.Left(12).CompareNoCase(L"TortoiseProc")==0) { CString sVer = _T(STRPRODUCTVER); sVer = sVer.Left(sVer.ReverseFind('.')); CString sFileVer = CPathUtils::GetVersionFromFile(file); sFileVer = sFileVer.Left(sFileVer.ReverseFind('.')); if (sFileVer.Compare(sVer)!=0) continue; CString sLoc = filename.Mid(12); sLoc = sLoc.Left(sLoc.GetLength()-4); // cut off ".dll" if ((sLoc.Left(2) == L"32")&&(sLoc.GetLength() > 5)) continue; DWORD loc = _tstoi(filename.Mid(12)); GetLocaleInfo(loc, LOCALE_SNATIVELANGNAME, buf, _countof(buf)); CString sLang = buf; GetLocaleInfo(loc, LOCALE_SNATIVECTRYNAME, buf, _countof(buf)); if (buf[0]) { sLang += L" ("; sLang += buf; sLang += L")"; } m_LanguageCombo.AddString(sLang); m_LanguageCombo.SetItemData(langcount++, loc); } } for (int i=0; i<m_LanguageCombo.GetCount(); i++) { if (m_LanguageCombo.GetItemData(i) == m_dwLanguage) m_LanguageCombo.SetCurSel(i); } UpdateData(FALSE); return TRUE; }
BOOL AeroAutoSubclass(HWND hWnd, DWORD dwFlags, DWORD dwReserved) { if(!hWnd || !IsWindow(hWnd) || 0L!=dwReserved) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } UINT uiRedrawMsg = RegisterWindowMessage(REDRAWSTRING); if(!uiRedrawMsg) return FALSE; // use the RegisterWindowMessage last error CDwmApiImpl *pDwm = NULL; CUxThemeAeroImpl *pUxTheme = NULL; PAERO_SUBCLASS_WND_DATA pWndData = NULL; DWORD dwLastError = ERROR_SUCCESS; MARGINS marGlassInset = {0,0,0,302}; HRESULT hRes = S_OK; bool bBufferedPaintInitialized = false; ERROR_PARENT_AERO_SUBCLASS_WND_DATA errParentAeroData; ZeroMemory(&errParentAeroData, sizeof(errParentAeroData)); errParentAeroData.m_dwFlags = dwFlags; errParentAeroData.m_hWndParent = hWnd; try { pDwm = new CDwmApiImpl; } catch (...) { dwLastError = ERROR_NOT_ENOUGH_MEMORY; } if(ERROR_SUCCESS!=dwLastError) goto CLEANUP; try { pUxTheme = new CUxThemeAeroImpl; } catch (...) { dwLastError = ERROR_NOT_ENOUGH_MEMORY; } if(ERROR_SUCCESS!=dwLastError) goto CLEANUP; pWndData = (PAERO_SUBCLASS_WND_DATA)LocalAlloc(LPTR, sizeof(AERO_SUBCLASS_WND_DATA)); if(!pWndData) { dwLastError = GetLastError(); goto CLEANUP; } if(!pDwm->Initialize()) { dwLastError = GetLastError(); goto CLEANUP; } if(!pUxTheme->Initialize()) { dwLastError = GetLastError(); goto CLEANUP; } if(pDwm->IsDwmCompositionEnabled() && !(dwFlags&ASC_NO_FRAME_EXTENSION)) { /// /// we do not evaluate the return value of pDwm->DwmExtendFrameIntoClientArea, because /// if composition is turned off in the tiny little race condition after the previous call /// to IsDwmCompositionEnabled and before the following call to DwmExtendFrameIntoClientArea, /// we would see DwmExtendFrameIntoClientArea fail. However, if composition is turned on again /// aterwards, the UI can display composition again without problems: /// pDwm->DwmExtendFrameIntoClientArea(hWnd, &marGlassInset); } hRes = pUxTheme->BufferedPaintInit(); if(FAILED(hRes)) { dwLastError = hRes; goto CLEANUP; } bBufferedPaintInitialized = true; if(!SetProp(hWnd, WINDOW_DATA_STRING, pWndData)) { dwLastError = hRes; goto CLEANUP; } errParentAeroData.m_pdwError = &dwLastError; errParentAeroData.m_pWndParentAeroData = pWndData; pWndData->m_pDwmApiImpl = pDwm; pWndData->m_pUxTheme = pUxTheme; pWndData->m_uiRedrawMsg = uiRedrawMsg; if(dwFlags&ASC_NO_FRAME_EXTENSION) pWndData->m_dwFlags |= WD_NO_FRAME_EXTEND; if(!EnumChildWindows(hWnd, SubclassChildWindows, (LPARAM)&errParentAeroData)) { if(ERROR_SUCCESS==dwLastError) dwLastError = GetLastError(); goto CLEANUP; } if(ERROR_SUCCESS!=dwLastError) goto CLEANUP; pWndData->m_oldWndProc = (WNDPROC) SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR) WndProcc); if(!pWndData->m_oldWndProc) { dwLastError = GetLastError(); goto CLEANUP; } CLEANUP: if(ERROR_SUCCESS!=dwLastError) { RemoveProp(hWnd, WINDOW_DATA_STRING); // don't care if this fails if(pDwm) delete pDwm; if(pUxTheme) { if(bBufferedPaintInitialized) pUxTheme->BufferedPaintUnInit(); delete pUxTheme; } if(pWndData) VERIFY(!LocalFree(pWndData)); SetLastError(dwLastError); return FALSE; } return TRUE; }