Merge branch 'master' of https://github.com/project64/project64
This commit is contained in:
commit
a046128e37
|
@ -17,107 +17,15 @@
|
|||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||
InheritedPropertySheets="$(SolutionDir)PropertySheets/Win32.Debug.vsprops"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
ConfigurationType="4"
|
||||
InheritedPropertySheets="$(SolutionDir)PropertySheets/Win32.Release.vsprops"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -15,7 +15,7 @@
|
|||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#error WTL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifndef __ATLBASE_H__
|
||||
|
@ -34,11 +34,15 @@
|
|||
|
||||
#ifdef _ATL_NO_COMMODULE
|
||||
#error WTL requires that _ATL_NO_COMMODULE is not defined
|
||||
#endif // _ATL_NO_COMMODULE
|
||||
#endif
|
||||
|
||||
#if (_ATL_VER >= 0x0900) && defined(_ATL_MIN_CRT)
|
||||
#error _ATL_MIN_CRT is not supported with ATL 9.0 and higher
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32_WCE) && defined(_ATL_MIN_CRT)
|
||||
#pragma message("Warning: WTL for Windows CE doesn't use _ATL_MIN_CRT")
|
||||
#endif // defined(_WIN32_WCE) && defined(_ATL_MIN_CRT)
|
||||
#endif
|
||||
|
||||
#include <limits.h>
|
||||
#if !defined(_ATL_MIN_CRT) && defined(_MT) && !defined(_WIN32_WCE)
|
||||
|
@ -51,8 +55,8 @@
|
|||
|
||||
#include <commctrl.h>
|
||||
#ifndef _WIN32_WCE
|
||||
#pragma comment(lib, "comctl32.lib")
|
||||
#endif // !_WIN32_WCE
|
||||
#pragma comment(lib, "comctl32.lib")
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32_WCE
|
||||
#include "atlres.h"
|
||||
|
@ -63,11 +67,15 @@
|
|||
// We need to disable this warning because of template class arguments
|
||||
#pragma warning(disable: 4127)
|
||||
|
||||
#if (_ATL_VER >= 0x0900) && !defined(_SECURE_ATL)
|
||||
#define _SECURE_ATL 1
|
||||
#endif
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// WTL version number
|
||||
|
||||
#define _WTL_VER 0x0800
|
||||
#define _WTL_VER 0x0810
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -80,8 +88,11 @@
|
|||
// CAppModule
|
||||
// CServerAppModule
|
||||
//
|
||||
// CRegKeyEx
|
||||
//
|
||||
// Global functions:
|
||||
// AtlGetDefaultGuiFont()
|
||||
// AtlCreateControlFont()
|
||||
// AtlCreateBoldFont()
|
||||
// AtlInitCommonControls()
|
||||
|
||||
|
@ -460,11 +471,15 @@ static CWndClassInfo& GetWndClassInfo() \
|
|||
#endif // ATLVERIFY
|
||||
#endif // (_ATL_VER < 0x0700)
|
||||
|
||||
// Forward declaration for ATL3 fix
|
||||
#if (_ATL_VER < 0x0700) && defined(_ATL_DLL) && !defined(_WIN32_WCE)
|
||||
// Forward declaration for ATL3 and ATL11 fix
|
||||
#if (((_ATL_VER < 0x0700) && defined(_ATL_DLL)) || (_ATL_VER >= 0x0B00)) && !defined(_WIN32_WCE)
|
||||
namespace ATL { HRESULT AtlGetCommCtrlVersion(LPDWORD pdwMajor, LPDWORD pdwMinor); };
|
||||
#endif
|
||||
|
||||
#ifndef WM_MOUSEHWHEEL
|
||||
#define WM_MOUSEHWHEEL 0x020E
|
||||
#endif
|
||||
|
||||
|
||||
namespace WTL
|
||||
{
|
||||
|
@ -490,7 +505,7 @@ inline bool AtlIsOldWindows()
|
|||
return (!bRet || !((ovi.dwMajorVersion >= 5) || (ovi.dwMajorVersion == 4 && ovi.dwMinorVersion >= 90)));
|
||||
}
|
||||
|
||||
// default GUI font helper
|
||||
// Default GUI font helper - "MS Shell Dlg" stock font
|
||||
inline HFONT AtlGetDefaultGuiFont()
|
||||
{
|
||||
#ifndef _WIN32_WCE
|
||||
|
@ -500,24 +515,39 @@ inline HFONT AtlGetDefaultGuiFont()
|
|||
#endif // _WIN32_WCE
|
||||
}
|
||||
|
||||
// bold font helper (NOTE: Caller owns the font, and should destroy it when done using it)
|
||||
// Control font helper - default font for controls not in a dialog
|
||||
// (NOTE: Caller owns the font, and should destroy it when it's no longer needed)
|
||||
inline HFONT AtlCreateControlFont()
|
||||
{
|
||||
#ifndef _WIN32_WCE
|
||||
LOGFONT lf = { 0 };
|
||||
ATLVERIFY(::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &lf, 0) != FALSE);
|
||||
HFONT hFont = ::CreateFontIndirect(&lf);
|
||||
ATLASSERT(hFont != NULL);
|
||||
return hFont;
|
||||
#else // CE specific
|
||||
return (HFONT)::GetStockObject(SYSTEM_FONT);
|
||||
#endif // _WIN32_WCE
|
||||
}
|
||||
|
||||
// Bold font helper
|
||||
// (NOTE: Caller owns the font, and should destroy it when it's no longer needed)
|
||||
inline HFONT AtlCreateBoldFont(HFONT hFont = NULL)
|
||||
{
|
||||
if(hFont == NULL)
|
||||
hFont = AtlGetDefaultGuiFont();
|
||||
ATLASSERT(hFont != NULL);
|
||||
HFONT hFontBold = NULL;
|
||||
LOGFONT lf = { 0 };
|
||||
if(::GetObject(hFont, sizeof(LOGFONT), &lf) == sizeof(LOGFONT))
|
||||
{
|
||||
lf.lfWeight = FW_BOLD;
|
||||
hFontBold = ::CreateFontIndirect(&lf);
|
||||
ATLASSERT(hFontBold != NULL);
|
||||
}
|
||||
#ifndef _WIN32_WCE
|
||||
if(hFont == NULL)
|
||||
ATLVERIFY(::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &lf, 0) != FALSE);
|
||||
else
|
||||
{
|
||||
ATLASSERT(FALSE);
|
||||
}
|
||||
ATLVERIFY(::GetObject(hFont, sizeof(LOGFONT), &lf) == sizeof(LOGFONT));
|
||||
#else // CE specific
|
||||
if(hFont == NULL)
|
||||
hFont = (HFONT)::GetStockObject(SYSTEM_FONT);
|
||||
ATLVERIFY(::GetObject(hFont, sizeof(LOGFONT), &lf) == sizeof(LOGFONT));
|
||||
#endif // _WIN32_WCE
|
||||
lf.lfWeight = FW_BOLD;
|
||||
HFONT hFontBold = ::CreateFontIndirect(&lf);
|
||||
ATLASSERT(hFontBold != NULL);
|
||||
return hFontBold;
|
||||
}
|
||||
|
||||
|
@ -583,6 +613,70 @@ namespace RunTimeHelper
|
|||
BOOL bRet = ::GetVersionEx(&ovi);
|
||||
return ((bRet != FALSE) && (ovi.dwMajorVersion >= 6));
|
||||
}
|
||||
|
||||
inline bool IsThemeAvailable()
|
||||
{
|
||||
bool bRet = false;
|
||||
|
||||
if(IsCommCtrl6())
|
||||
{
|
||||
HMODULE hThemeDLL = ::LoadLibrary(_T("uxtheme.dll"));
|
||||
if(hThemeDLL != NULL)
|
||||
{
|
||||
typedef BOOL (STDAPICALLTYPE *PFN_IsThemeActive)();
|
||||
PFN_IsThemeActive pfnIsThemeActive = (PFN_IsThemeActive)::GetProcAddress(hThemeDLL, "IsThemeActive");
|
||||
ATLASSERT(pfnIsThemeActive != NULL);
|
||||
bRet = (pfnIsThemeActive != NULL) && (pfnIsThemeActive() != FALSE);
|
||||
if(bRet)
|
||||
{
|
||||
typedef BOOL (STDAPICALLTYPE *PFN_IsAppThemed)();
|
||||
PFN_IsAppThemed pfnIsAppThemed = (PFN_IsAppThemed)::GetProcAddress(hThemeDLL, "IsAppThemed");
|
||||
ATLASSERT(pfnIsAppThemed != NULL);
|
||||
bRet = (pfnIsAppThemed != NULL) && (pfnIsAppThemed() != FALSE);
|
||||
}
|
||||
|
||||
::FreeLibrary(hThemeDLL);
|
||||
}
|
||||
}
|
||||
|
||||
return bRet;
|
||||
}
|
||||
|
||||
inline bool IsWin7()
|
||||
{
|
||||
OSVERSIONINFO ovi = { sizeof(OSVERSIONINFO) };
|
||||
BOOL bRet = ::GetVersionEx(&ovi);
|
||||
return ((bRet != FALSE) && (ovi.dwMajorVersion == 6) && (ovi.dwMinorVersion >= 1));
|
||||
}
|
||||
|
||||
inline bool IsRibbonUIAvailable()
|
||||
{
|
||||
static INT iRibbonUI = -1;
|
||||
|
||||
#if defined(NTDDI_WIN7) && (NTDDI_VERSION >= NTDDI_WIN7)
|
||||
if (iRibbonUI == -1)
|
||||
{
|
||||
HMODULE hRibbonDLL = ::LoadLibrary(_T("propsys.dll"));
|
||||
if (hRibbonDLL != NULL)
|
||||
{
|
||||
const GUID CLSID_UIRibbonFramework = { 0x926749fa, 0x2615, 0x4987, { 0x88, 0x45, 0xc3, 0x3e, 0x65, 0xf2, 0xb9, 0x57 } };
|
||||
// block - create instance
|
||||
{
|
||||
ATL::CComPtr<IUnknown> pIUIFramework;
|
||||
iRibbonUI = SUCCEEDED(pIUIFramework.CoCreateInstance(CLSID_UIRibbonFramework)) ? 1 : 0;
|
||||
}
|
||||
::FreeLibrary(hRibbonDLL);
|
||||
}
|
||||
else
|
||||
{
|
||||
iRibbonUI = 0;
|
||||
}
|
||||
}
|
||||
#endif // defined(NTDDI_WIN7) && (NTDDI_VERSION >= NTDDI_WIN7)
|
||||
|
||||
return (iRibbonUI == 1);
|
||||
}
|
||||
|
||||
#endif // !_WIN32_WCE
|
||||
|
||||
inline int SizeOf_REBARBANDINFO()
|
||||
|
@ -848,7 +942,9 @@ namespace SecureHelper
|
|||
return _vstprintf_s(lpstrBuff, cchBuff, lpstrFormat, args);
|
||||
#else
|
||||
cchBuff; // Avoid unused argument warning
|
||||
#pragma warning(disable: 4996)
|
||||
return _vstprintf(lpstrBuff, lpstrFormat, args);
|
||||
#pragma warning(default: 4996)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -882,6 +978,91 @@ namespace SecureHelper
|
|||
}; // namespace SecureHelper
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// MinCrtHelper - helper functions for using _ATL_MIN_CRT
|
||||
|
||||
namespace MinCrtHelper
|
||||
{
|
||||
inline int _isspace(TCHAR ch)
|
||||
{
|
||||
#ifndef _ATL_MIN_CRT
|
||||
return _istspace(ch);
|
||||
#else // _ATL_MIN_CRT
|
||||
WORD type = 0;
|
||||
::GetStringTypeEx(::GetThreadLocale(), CT_CTYPE1, &ch, 1, &type);
|
||||
return (type & C1_SPACE) == C1_SPACE;
|
||||
#endif // _ATL_MIN_CRT
|
||||
}
|
||||
|
||||
inline int _isdigit(TCHAR ch)
|
||||
{
|
||||
#ifndef _ATL_MIN_CRT
|
||||
return _istdigit(ch);
|
||||
#else // _ATL_MIN_CRT
|
||||
WORD type = 0;
|
||||
::GetStringTypeEx(::GetThreadLocale(), CT_CTYPE1, &ch, 1, &type);
|
||||
return (type & C1_DIGIT) == C1_DIGIT;
|
||||
#endif // _ATL_MIN_CRT
|
||||
}
|
||||
|
||||
inline int _atoi(LPCTSTR str)
|
||||
{
|
||||
#ifndef _ATL_MIN_CRT
|
||||
return _ttoi(str);
|
||||
#else // _ATL_MIN_CRT
|
||||
while(_isspace(*str) != 0)
|
||||
++str;
|
||||
|
||||
TCHAR ch = *str++;
|
||||
TCHAR sign = ch; // save sign indication
|
||||
if(ch == _T('-') || ch == _T('+'))
|
||||
ch = *str++; // skip sign
|
||||
|
||||
int total = 0;
|
||||
while(_isdigit(ch) != 0)
|
||||
{
|
||||
total = 10 * total + (ch - '0'); // accumulate digit
|
||||
ch = *str++; // get next char
|
||||
}
|
||||
|
||||
return (sign == '-') ? -total : total; // return result, negated if necessary
|
||||
#endif // _ATL_MIN_CRT
|
||||
}
|
||||
|
||||
inline LPCTSTR _strrchr(LPCTSTR str, TCHAR ch)
|
||||
{
|
||||
#ifndef _ATL_MIN_CRT
|
||||
return _tcsrchr(str, ch);
|
||||
#else // _ATL_MIN_CRT
|
||||
LPCTSTR lpsz = NULL;
|
||||
while(*str != 0)
|
||||
{
|
||||
if(*str == ch)
|
||||
lpsz = str;
|
||||
str = ::CharNext(str);
|
||||
}
|
||||
return lpsz;
|
||||
#endif // _ATL_MIN_CRT
|
||||
}
|
||||
|
||||
inline LPTSTR _strrchr(LPTSTR str, TCHAR ch)
|
||||
{
|
||||
#ifndef _ATL_MIN_CRT
|
||||
return _tcsrchr(str, ch);
|
||||
#else // _ATL_MIN_CRT
|
||||
LPTSTR lpsz = NULL;
|
||||
while(*str != 0)
|
||||
{
|
||||
if(*str == ch)
|
||||
lpsz = str;
|
||||
str = ::CharNext(str);
|
||||
}
|
||||
return lpsz;
|
||||
#endif // _ATL_MIN_CRT
|
||||
}
|
||||
}; // namespace MinCrtHelper
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// CMessageFilter - Interface for message filter support
|
||||
|
||||
|
@ -1542,6 +1723,261 @@ public:
|
|||
};
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// CRegKeyEx - adds type-specific methods to ATL3 CRegKey
|
||||
|
||||
#if (_ATL_VER < 0x0700)
|
||||
|
||||
class CRegKeyEx : public ATL::CRegKey
|
||||
{
|
||||
public:
|
||||
// Constructors and operators
|
||||
CRegKeyEx(HKEY hKey = NULL)
|
||||
{
|
||||
m_hKey = hKey;
|
||||
}
|
||||
|
||||
CRegKeyEx(CRegKeyEx& key)
|
||||
{
|
||||
Attach(key.Detach());
|
||||
}
|
||||
|
||||
CRegKeyEx& operator =(CRegKeyEx& key)
|
||||
{
|
||||
Close();
|
||||
Attach(key.Detach());
|
||||
return *this;
|
||||
}
|
||||
|
||||
// Methods
|
||||
LONG SetValue(LPCTSTR pszValueName, DWORD dwType, const void* pValue, ULONG nBytes)
|
||||
{
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
return ::RegSetValueEx(m_hKey, pszValueName, NULL, dwType, static_cast<const BYTE*>(pValue), nBytes);
|
||||
}
|
||||
|
||||
LONG SetGUIDValue(LPCTSTR pszValueName, REFGUID guidValue)
|
||||
{
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
|
||||
OLECHAR szGUID[64] = { 0 };
|
||||
::StringFromGUID2(guidValue, szGUID, 64);
|
||||
|
||||
USES_CONVERSION;
|
||||
LPCTSTR lpstr = OLE2CT(szGUID);
|
||||
#ifndef _UNICODE
|
||||
if(lpstr == NULL)
|
||||
return E_OUTOFMEMORY;
|
||||
#endif
|
||||
return SetStringValue(pszValueName, lpstr);
|
||||
}
|
||||
|
||||
LONG SetBinaryValue(LPCTSTR pszValueName, const void* pValue, ULONG nBytes)
|
||||
{
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
return ::RegSetValueEx(m_hKey, pszValueName, NULL, REG_BINARY, reinterpret_cast<const BYTE*>(pValue), nBytes);
|
||||
}
|
||||
|
||||
LONG SetDWORDValue(LPCTSTR pszValueName, DWORD dwValue)
|
||||
{
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
return ::RegSetValueEx(m_hKey, pszValueName, NULL, REG_DWORD, reinterpret_cast<const BYTE*>(&dwValue), sizeof(DWORD));
|
||||
}
|
||||
|
||||
#ifndef _WIN32_WCE
|
||||
LONG SetQWORDValue(LPCTSTR pszValueName, ULONGLONG qwValue)
|
||||
{
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
return ::RegSetValueEx(m_hKey, pszValueName, NULL, REG_QWORD, reinterpret_cast<const BYTE*>(&qwValue), sizeof(ULONGLONG));
|
||||
}
|
||||
#endif
|
||||
|
||||
LONG SetStringValue(LPCTSTR pszValueName, LPCTSTR pszValue, DWORD dwType = REG_SZ)
|
||||
{
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
if(pszValue == NULL)
|
||||
{
|
||||
ATLASSERT(FALSE);
|
||||
return ERROR_INVALID_DATA;
|
||||
}
|
||||
ATLASSERT((dwType == REG_SZ) || (dwType == REG_EXPAND_SZ));
|
||||
|
||||
return ::RegSetValueEx(m_hKey, pszValueName, NULL, dwType, reinterpret_cast<const BYTE*>(pszValue), (lstrlen(pszValue) + 1) * sizeof(TCHAR));
|
||||
}
|
||||
|
||||
LONG SetMultiStringValue(LPCTSTR pszValueName, LPCTSTR pszValue)
|
||||
{
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
if(pszValue == NULL)
|
||||
{
|
||||
ATLASSERT(FALSE);
|
||||
return ERROR_INVALID_DATA;
|
||||
}
|
||||
|
||||
ULONG nBytes = 0;
|
||||
ULONG nLength = 0;
|
||||
LPCTSTR pszTemp = pszValue;
|
||||
do
|
||||
{
|
||||
nLength = lstrlen(pszTemp) + 1;
|
||||
pszTemp += nLength;
|
||||
nBytes += nLength * sizeof(TCHAR);
|
||||
} while (nLength != 1);
|
||||
|
||||
return ::RegSetValueEx(m_hKey, pszValueName, NULL, REG_MULTI_SZ, reinterpret_cast<const BYTE*>(pszValue), nBytes);
|
||||
}
|
||||
|
||||
LONG QueryValue(LPCTSTR pszValueName, DWORD* pdwType, void* pData, ULONG* pnBytes)
|
||||
{
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
return ::RegQueryValueEx(m_hKey, pszValueName, NULL, pdwType, static_cast<LPBYTE>(pData), pnBytes);
|
||||
}
|
||||
|
||||
LONG QueryGUIDValue(LPCTSTR pszValueName, GUID& guidValue)
|
||||
{
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
|
||||
guidValue = GUID_NULL;
|
||||
|
||||
TCHAR szGUID[64] = { 0 };
|
||||
ULONG nCount = 64;
|
||||
LONG lRes = QueryStringValue(pszValueName, szGUID, &nCount);
|
||||
|
||||
if (lRes != ERROR_SUCCESS)
|
||||
return lRes;
|
||||
|
||||
if(szGUID[0] != _T('{'))
|
||||
return ERROR_INVALID_DATA;
|
||||
|
||||
USES_CONVERSION;
|
||||
LPOLESTR lpstr = T2OLE(szGUID);
|
||||
#ifndef _UNICODE
|
||||
if(lpstr == NULL)
|
||||
return E_OUTOFMEMORY;
|
||||
#endif
|
||||
|
||||
HRESULT hr = ::CLSIDFromString(lpstr, &guidValue);
|
||||
if (FAILED(hr))
|
||||
return ERROR_INVALID_DATA;
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
LONG QueryBinaryValue(LPCTSTR pszValueName, void* pValue, ULONG* pnBytes)
|
||||
{
|
||||
ATLASSERT(pnBytes != NULL);
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
|
||||
DWORD dwType = 0;
|
||||
LONG lRes = ::RegQueryValueEx(m_hKey, pszValueName, NULL, &dwType, reinterpret_cast<LPBYTE>(pValue), pnBytes);
|
||||
if (lRes != ERROR_SUCCESS)
|
||||
return lRes;
|
||||
if (dwType != REG_BINARY)
|
||||
return ERROR_INVALID_DATA;
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
LONG QueryDWORDValue(LPCTSTR pszValueName, DWORD& dwValue)
|
||||
{
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
|
||||
ULONG nBytes = sizeof(DWORD);
|
||||
DWORD dwType = 0;
|
||||
LONG lRes = ::RegQueryValueEx(m_hKey, pszValueName, NULL, &dwType, reinterpret_cast<LPBYTE>(&dwValue), &nBytes);
|
||||
if (lRes != ERROR_SUCCESS)
|
||||
return lRes;
|
||||
if (dwType != REG_DWORD)
|
||||
return ERROR_INVALID_DATA;
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
LONG QueryQWORDValue(LPCTSTR pszValueName, ULONGLONG& qwValue)
|
||||
{
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
|
||||
ULONG nBytes = sizeof(ULONGLONG);
|
||||
DWORD dwType = 0;
|
||||
LONG lRes = ::RegQueryValueEx(m_hKey, pszValueName, NULL, &dwType, reinterpret_cast<LPBYTE>(&qwValue), &nBytes);
|
||||
if (lRes != ERROR_SUCCESS)
|
||||
return lRes;
|
||||
if (dwType != REG_QWORD)
|
||||
return ERROR_INVALID_DATA;
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
LONG QueryStringValue(LPCTSTR pszValueName, LPTSTR pszValue, ULONG* pnChars)
|
||||
{
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
ATLASSERT(pnChars != NULL);
|
||||
|
||||
ULONG nBytes = (*pnChars) * sizeof(TCHAR);
|
||||
DWORD dwType = 0;
|
||||
*pnChars = 0;
|
||||
LONG lRes = ::RegQueryValueEx(m_hKey, pszValueName, NULL, &dwType, reinterpret_cast<LPBYTE>(pszValue), &nBytes);
|
||||
|
||||
if (lRes != ERROR_SUCCESS)
|
||||
{
|
||||
return lRes;
|
||||
}
|
||||
|
||||
if(dwType != REG_SZ && dwType != REG_EXPAND_SZ)
|
||||
{
|
||||
return ERROR_INVALID_DATA;
|
||||
}
|
||||
|
||||
if (pszValue != NULL)
|
||||
{
|
||||
if(nBytes != 0)
|
||||
{
|
||||
if ((nBytes % sizeof(TCHAR) != 0) || (pszValue[nBytes / sizeof(TCHAR) -1] != 0))
|
||||
return ERROR_INVALID_DATA;
|
||||
}
|
||||
else
|
||||
{
|
||||
pszValue[0] = _T('\0');
|
||||
}
|
||||
}
|
||||
|
||||
*pnChars = nBytes / sizeof(TCHAR);
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
LONG QueryMultiStringValue(LPCTSTR pszValueName, LPTSTR pszValue, ULONG* pnChars)
|
||||
{
|
||||
ATLASSERT(m_hKey != NULL);
|
||||
ATLASSERT(pnChars != NULL);
|
||||
|
||||
if (pszValue != NULL && *pnChars < 2)
|
||||
return ERROR_INSUFFICIENT_BUFFER;
|
||||
|
||||
ULONG nBytes = (*pnChars) * sizeof(TCHAR);
|
||||
DWORD dwType = 0;
|
||||
*pnChars = 0;
|
||||
LONG lRes = ::RegQueryValueEx(m_hKey, pszValueName, NULL, &dwType, reinterpret_cast<LPBYTE>(pszValue), &nBytes);
|
||||
if (lRes != ERROR_SUCCESS)
|
||||
return lRes;
|
||||
if (dwType != REG_MULTI_SZ)
|
||||
return ERROR_INVALID_DATA;
|
||||
if (pszValue != NULL && (nBytes % sizeof(TCHAR) != 0 || nBytes / sizeof(TCHAR) < 1 || pszValue[nBytes / sizeof(TCHAR) - 1] != 0 || ((nBytes / sizeof(TCHAR)) > 1 && pszValue[nBytes / sizeof(TCHAR) - 2] != 0)))
|
||||
return ERROR_INVALID_DATA;
|
||||
|
||||
*pnChars = nBytes / sizeof(TCHAR);
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
};
|
||||
|
||||
#else // !(_ATL_VER < 0x0700)
|
||||
|
||||
typedef ATL::CRegKey CRegKeyEx;
|
||||
|
||||
#endif // !(_ATL_VER < 0x0700)
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// CString forward reference (enables CString use in atluser.h and atlgdi.h)
|
||||
|
||||
|
@ -1575,9 +2011,10 @@ public:
|
|||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// General DLL version helpers (excluded from atlbase.h if _ATL_DLL is defined)
|
||||
// General DLL version helpers
|
||||
// (ATL3: excluded from atlbase.h if _ATL_DLL is defined; ATL11: removed)
|
||||
|
||||
#if (_ATL_VER < 0x0700) && defined(_ATL_DLL) && !defined(_WIN32_WCE)
|
||||
#if (((_ATL_VER < 0x0700) && defined(_ATL_DLL)) || (_ATL_VER >= 0x0B00)) && !defined(_WIN32_WCE)
|
||||
|
||||
namespace ATL
|
||||
{
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,6 +14,10 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atlcrack.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Message map macro for cracked handlers
|
||||
|
@ -566,7 +570,7 @@ public: \
|
|||
return TRUE; \
|
||||
}
|
||||
|
||||
// void OnNcPaint(CRgn rgn)
|
||||
// void OnNcPaint(CRgnHandle rgn)
|
||||
#define MSG_WM_NCPAINT(func) \
|
||||
if (uMsg == WM_NCPAINT) \
|
||||
{ \
|
||||
|
@ -795,7 +799,7 @@ public: \
|
|||
return TRUE; \
|
||||
}
|
||||
|
||||
// void OnSysCommand(UINT nID, LPARAM lParam)
|
||||
// void OnSysCommand(UINT nID, CPoint point)
|
||||
#define MSG_WM_SYSCOMMAND(func) \
|
||||
if (uMsg == WM_SYSCOMMAND) \
|
||||
{ \
|
||||
|
@ -850,7 +854,7 @@ public: \
|
|||
return TRUE; \
|
||||
}
|
||||
|
||||
// void OnInitMenu(CMenu menu)
|
||||
// void OnInitMenu(CMenuHandle menu)
|
||||
#define MSG_WM_INITMENU(func) \
|
||||
if (uMsg == WM_INITMENU) \
|
||||
{ \
|
||||
|
@ -861,7 +865,7 @@ public: \
|
|||
return TRUE; \
|
||||
}
|
||||
|
||||
// void OnInitMenuPopup(CMenu menuPopup, UINT nIndex, BOOL bSysMenu)
|
||||
// void OnInitMenuPopup(CMenuHandle menuPopup, UINT nIndex, BOOL bSysMenu)
|
||||
#define MSG_WM_INITMENUPOPUP(func) \
|
||||
if (uMsg == WM_INITMENUPOPUP) \
|
||||
{ \
|
||||
|
@ -872,7 +876,7 @@ public: \
|
|||
return TRUE; \
|
||||
}
|
||||
|
||||
// void OnMenuSelect(UINT nItemID, UINT nFlags, CMenu menu)
|
||||
// void OnMenuSelect(UINT nItemID, UINT nFlags, CMenuHandle menu)
|
||||
#define MSG_WM_MENUSELECT(func) \
|
||||
if (uMsg == WM_MENUSELECT) \
|
||||
{ \
|
||||
|
@ -883,7 +887,7 @@ public: \
|
|||
return TRUE; \
|
||||
}
|
||||
|
||||
// LRESULT OnMenuChar(UINT nChar, UINT nFlags, CMenu menu)
|
||||
// LRESULT OnMenuChar(UINT nChar, UINT nFlags, CMenuHandle menu)
|
||||
#define MSG_WM_MENUCHAR(func) \
|
||||
if (uMsg == WM_MENUCHAR) \
|
||||
{ \
|
||||
|
@ -1544,7 +1548,7 @@ public: \
|
|||
return TRUE; \
|
||||
}
|
||||
|
||||
// void OnSetFont(CFont font, BOOL bRedraw)
|
||||
// void OnSetFont(CFontHandle font, BOOL bRedraw)
|
||||
#define MSG_WM_SETFONT(func) \
|
||||
if (uMsg == WM_SETFONT) \
|
||||
{ \
|
||||
|
@ -1638,7 +1642,7 @@ public: \
|
|||
|
||||
#if(WINVER >= 0x0500)
|
||||
|
||||
// void OnMenuRButtonUp(WPARAM wParam, CMenu menu)
|
||||
// void OnMenuRButtonUp(WPARAM wParam, CMenuHandle menu)
|
||||
#define MSG_WM_MENURBUTTONUP(func) \
|
||||
if (uMsg == WM_MENURBUTTONUP) \
|
||||
{ \
|
||||
|
@ -1649,7 +1653,7 @@ public: \
|
|||
return TRUE; \
|
||||
}
|
||||
|
||||
// LRESULT OnMenuDrag(WPARAM wParam, CMenu menu)
|
||||
// LRESULT OnMenuDrag(WPARAM wParam, CMenuHandle menu)
|
||||
#define MSG_WM_MENUDRAG(func) \
|
||||
if (uMsg == WM_MENUDRAG) \
|
||||
{ \
|
||||
|
@ -1669,7 +1673,7 @@ public: \
|
|||
return TRUE; \
|
||||
}
|
||||
|
||||
// void OnUnInitMenuPopup(UINT nID, CMenu menu)
|
||||
// void OnUnInitMenuPopup(UINT nID, CMenuHandle menu)
|
||||
#define MSG_WM_UNINITMENUPOPUP(func) \
|
||||
if (uMsg == WM_UNINITMENUPOPUP) \
|
||||
{ \
|
||||
|
@ -1680,7 +1684,7 @@ public: \
|
|||
return TRUE; \
|
||||
}
|
||||
|
||||
// void OnMenuCommand(WPARAM nIndex, CMenu menu)
|
||||
// void OnMenuCommand(WPARAM nIndex, CMenuHandle menu)
|
||||
#define MSG_WM_MENUCOMMAND(func) \
|
||||
if (uMsg == WM_MENUCOMMAND) \
|
||||
{ \
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atlctrls.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
@ -26,10 +22,6 @@
|
|||
#error atlctrls.h requires atlwin.h to be included first
|
||||
#endif
|
||||
|
||||
#if (_WIN32_IE < 0x0300)
|
||||
#error atlctrls.h requires IE Version 3.0 or higher
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32_WCE
|
||||
#include <richedit.h>
|
||||
#include <richole.h>
|
||||
|
@ -3922,15 +3914,19 @@ public:
|
|||
}
|
||||
#endif // (_WIN32_WINNT >= 0x0600)
|
||||
|
||||
// single-selection only
|
||||
// Note: selects only one item
|
||||
BOOL SelectItem(int nIndex)
|
||||
{
|
||||
ATLASSERT(::IsWindow(m_hWnd));
|
||||
ATLASSERT((GetStyle() & LVS_SINGLESEL) != 0);
|
||||
|
||||
// multi-selection only: de-select all items
|
||||
if((GetStyle() & LVS_SINGLESEL) == 0)
|
||||
SetItemState(-1, 0, LVIS_SELECTED);
|
||||
|
||||
BOOL bRet = SetItemState(nIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
|
||||
if(bRet)
|
||||
bRet = EnsureVisible(nIndex, FALSE);
|
||||
|
||||
return bRet;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
#error atlctrlw.h is not supported on Windows CE
|
||||
#endif
|
||||
|
@ -3147,16 +3143,16 @@ public:
|
|||
void _AddVistaBitmapsFromImageList(int nStartIndex, int nCount)
|
||||
{
|
||||
// Create display compatible memory DC
|
||||
HDC hDC = ::GetDC(NULL);
|
||||
CClientDC dc(NULL);
|
||||
CDC dcMem;
|
||||
dcMem.CreateCompatibleDC(hDC);
|
||||
dcMem.CreateCompatibleDC(dc);
|
||||
HBITMAP hBitmapSave = dcMem.GetCurrentBitmap();
|
||||
|
||||
T* pT = static_cast<T*>(this);
|
||||
// Create bitmaps for all menu items
|
||||
for(int i = 0; i < nCount; i++)
|
||||
{
|
||||
HBITMAP hBitmap = pT->_CreateVistaBitmapHelper(nStartIndex + i, hDC, dcMem);
|
||||
HBITMAP hBitmap = pT->_CreateVistaBitmapHelper(nStartIndex + i, dc, dcMem);
|
||||
dcMem.SelectBitmap(hBitmapSave);
|
||||
m_arrVistaBitmap.Add(hBitmap);
|
||||
}
|
||||
|
@ -3165,14 +3161,14 @@ public:
|
|||
void _AddVistaBitmapFromImageList(int nIndex)
|
||||
{
|
||||
// Create display compatible memory DC
|
||||
HDC hDC = ::GetDC(NULL);
|
||||
CClientDC dc(NULL);
|
||||
CDC dcMem;
|
||||
dcMem.CreateCompatibleDC(hDC);
|
||||
dcMem.CreateCompatibleDC(dc);
|
||||
HBITMAP hBitmapSave = dcMem.GetCurrentBitmap();
|
||||
|
||||
// Create bitmap for menu item
|
||||
T* pT = static_cast<T*>(this);
|
||||
HBITMAP hBitmap = pT->_CreateVistaBitmapHelper(nIndex, hDC, dcMem);
|
||||
HBITMAP hBitmap = pT->_CreateVistaBitmapHelper(nIndex, dc, dcMem);
|
||||
|
||||
// Select saved bitmap back and add bitmap to the array
|
||||
dcMem.SelectBitmap(hBitmapSave);
|
||||
|
@ -3186,14 +3182,14 @@ public:
|
|||
::DeleteObject(m_arrVistaBitmap[nIndex]);
|
||||
|
||||
// Create display compatible memory DC
|
||||
HDC hDC = ::GetDC(NULL);
|
||||
CClientDC dc(NULL);
|
||||
CDC dcMem;
|
||||
dcMem.CreateCompatibleDC(hDC);
|
||||
dcMem.CreateCompatibleDC(dc);
|
||||
HBITMAP hBitmapSave = dcMem.GetCurrentBitmap();
|
||||
|
||||
// Create bitmap for menu item
|
||||
T* pT = static_cast<T*>(this);
|
||||
HBITMAP hBitmap = pT->_CreateVistaBitmapHelper(nIndex, hDC, dcMem);
|
||||
HBITMAP hBitmap = pT->_CreateVistaBitmapHelper(nIndex, dc, dcMem);
|
||||
|
||||
// Select saved bitmap back and replace bitmap in the array
|
||||
dcMem.SelectBitmap(hBitmapSave);
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atlctrlx.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
@ -52,8 +48,6 @@
|
|||
// CTabViewImpl<T, TBase, TWinTraits>
|
||||
// CTabView
|
||||
|
||||
#include <ShellAPI.h>
|
||||
|
||||
namespace WTL
|
||||
{
|
||||
|
||||
|
@ -572,7 +566,6 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
class CBitmapButton : public CBitmapButtonImpl<CBitmapButton>
|
||||
{
|
||||
public:
|
||||
|
@ -759,14 +752,16 @@ __declspec(selectany) struct
|
|||
};
|
||||
#endif // (WINVER < 0x0500) && !defined(_WIN32_WCE)
|
||||
|
||||
#define HLINK_UNDERLINED 0x00000000
|
||||
#define HLINK_NOTUNDERLINED 0x00000001
|
||||
#define HLINK_UNDERLINEHOVER 0x00000002
|
||||
#define HLINK_COMMANDBUTTON 0x00000004
|
||||
#define HLINK_NOTIFYBUTTON 0x0000000C
|
||||
#define HLINK_USETAGS 0x00000010
|
||||
#define HLINK_USETAGSBOLD 0x00000030
|
||||
#define HLINK_NOTOOLTIP 0x00000040
|
||||
#define HLINK_UNDERLINED 0x00000000
|
||||
#define HLINK_NOTUNDERLINED 0x00000001
|
||||
#define HLINK_UNDERLINEHOVER 0x00000002
|
||||
#define HLINK_COMMANDBUTTON 0x00000004
|
||||
#define HLINK_NOTIFYBUTTON 0x0000000C
|
||||
#define HLINK_USETAGS 0x00000010
|
||||
#define HLINK_USETAGSBOLD 0x00000030
|
||||
#define HLINK_NOTOOLTIP 0x00000040
|
||||
#define HLINK_AUTOCREATELINKFONT 0x00000080
|
||||
#define HLINK_SINGLELINE 0x00000100
|
||||
|
||||
// Notes:
|
||||
// - HLINK_USETAGS and HLINK_USETAGSBOLD are always left-aligned
|
||||
|
@ -780,7 +775,7 @@ public:
|
|||
LPTSTR m_lpstrHyperLink;
|
||||
|
||||
HCURSOR m_hCursor;
|
||||
HFONT m_hFont;
|
||||
HFONT m_hFontLink;
|
||||
HFONT m_hFontNormal;
|
||||
|
||||
RECT m_rcLink;
|
||||
|
@ -797,16 +792,17 @@ public:
|
|||
bool m_bVisited:1;
|
||||
bool m_bHover:1;
|
||||
bool m_bInternalLinkFont:1;
|
||||
bool m_bInternalNormalFont:1;
|
||||
|
||||
|
||||
// Constructor/Destructor
|
||||
CHyperLinkImpl(DWORD dwExtendedStyle = HLINK_UNDERLINED) :
|
||||
m_lpstrLabel(NULL), m_lpstrHyperLink(NULL),
|
||||
m_hCursor(NULL), m_hFont(NULL), m_hFontNormal(NULL),
|
||||
m_hCursor(NULL), m_hFontLink(NULL), m_hFontNormal(NULL),
|
||||
m_clrLink(RGB(0, 0, 255)), m_clrVisited(RGB(128, 0, 128)),
|
||||
m_dwExtendedStyle(dwExtendedStyle),
|
||||
m_bPaintLabel(true), m_bVisited(false),
|
||||
m_bHover(false), m_bInternalLinkFont(false)
|
||||
m_bHover(false), m_bInternalLinkFont(false), m_bInternalNormalFont(false)
|
||||
{
|
||||
::SetRectEmpty(&m_rcLink);
|
||||
}
|
||||
|
@ -815,8 +811,6 @@ public:
|
|||
{
|
||||
delete [] m_lpstrLabel;
|
||||
delete [] m_lpstrHyperLink;
|
||||
if(m_bInternalLinkFont && m_hFont != NULL)
|
||||
::DeleteObject(m_hFont);
|
||||
#if (WINVER < 0x0500) && !defined(_WIN32_WCE)
|
||||
// It was created, not loaded, so we have to destroy it
|
||||
if(m_hCursor != NULL)
|
||||
|
@ -912,17 +906,21 @@ public:
|
|||
|
||||
HFONT GetLinkFont() const
|
||||
{
|
||||
return m_hFont;
|
||||
return m_hFontLink;
|
||||
}
|
||||
|
||||
void SetLinkFont(HFONT hFont)
|
||||
{
|
||||
if(m_bInternalLinkFont && m_hFont != NULL)
|
||||
if(m_bInternalLinkFont)
|
||||
{
|
||||
::DeleteObject(m_hFont);
|
||||
::DeleteObject(m_hFontLink);
|
||||
m_bInternalLinkFont = false;
|
||||
}
|
||||
m_hFont = hFont;
|
||||
|
||||
m_hFontLink = hFont;
|
||||
|
||||
T* pT = static_cast<T*>(this);
|
||||
pT->CalcLabelRect();
|
||||
}
|
||||
|
||||
int GetIdealHeight() const
|
||||
|
@ -933,15 +931,17 @@ public:
|
|||
if(!m_bPaintLabel)
|
||||
return -1;
|
||||
|
||||
UINT uFormat = IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK;
|
||||
|
||||
CClientDC dc(m_hWnd);
|
||||
RECT rect = { 0 };
|
||||
GetClientRect(&rect);
|
||||
HFONT hFontOld = dc.SelectFont(m_hFontNormal);
|
||||
RECT rcText = rect;
|
||||
dc.DrawText(_T("NS"), -1, &rcText, DT_LEFT | DT_WORDBREAK | DT_CALCRECT);
|
||||
dc.SelectFont(m_hFont);
|
||||
dc.DrawText(_T("NS"), -1, &rcText, DT_LEFT | uFormat | DT_CALCRECT);
|
||||
dc.SelectFont(m_hFontLink);
|
||||
RECT rcLink = rect;
|
||||
dc.DrawText(_T("NS"), -1, &rcLink, DT_LEFT | DT_WORDBREAK | DT_CALCRECT);
|
||||
dc.DrawText(_T("NS"), -1, &rcLink, DT_LEFT | uFormat | DT_CALCRECT);
|
||||
dc.SelectFont(hFontOld);
|
||||
return max(rcText.bottom - rcText.top, rcLink.bottom - rcLink.top);
|
||||
}
|
||||
|
@ -985,17 +985,19 @@ public:
|
|||
pT->CalcLabelParts(lpstrLeft, cchLeft, lpstrLink, cchLink, lpstrRight, cchRight);
|
||||
|
||||
// get label part rects
|
||||
UINT uFormat = IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK;
|
||||
|
||||
HFONT hFontOld = dc.SelectFont(m_hFontNormal);
|
||||
RECT rcLeft = rcClient;
|
||||
dc.DrawText(lpstrLeft, cchLeft, &rcLeft, DT_LEFT | DT_WORDBREAK | DT_CALCRECT);
|
||||
dc.DrawText(lpstrLeft, cchLeft, &rcLeft, DT_LEFT | uFormat | DT_CALCRECT);
|
||||
|
||||
dc.SelectFont(m_hFont);
|
||||
dc.SelectFont(m_hFontLink);
|
||||
RECT rcLink = { rcLeft.right, rcLeft.top, rcClient.right, rcClient.bottom };
|
||||
dc.DrawText(lpstrLink, cchLink, &rcLink, DT_LEFT | DT_WORDBREAK | DT_CALCRECT);
|
||||
dc.DrawText(lpstrLink, cchLink, &rcLink, DT_LEFT | uFormat | DT_CALCRECT);
|
||||
|
||||
dc.SelectFont(m_hFontNormal);
|
||||
RECT rcRight = { rcLink.right, rcLink.top, rcClient.right, rcClient.bottom };
|
||||
dc.DrawText(lpstrRight, cchRight, &rcRight, DT_LEFT | DT_WORDBREAK | DT_CALCRECT);
|
||||
dc.DrawText(lpstrRight, cchRight, &rcRight, DT_LEFT | uFormat | DT_CALCRECT);
|
||||
|
||||
dc.SelectFont(hFontOld);
|
||||
|
||||
|
@ -1005,17 +1007,18 @@ public:
|
|||
else
|
||||
{
|
||||
HFONT hOldFont = NULL;
|
||||
if(m_hFont != NULL)
|
||||
hOldFont = dc.SelectFont(m_hFont);
|
||||
if(m_hFontLink != NULL)
|
||||
hOldFont = dc.SelectFont(m_hFontLink);
|
||||
LPTSTR lpstrText = (m_lpstrLabel != NULL) ? m_lpstrLabel : m_lpstrHyperLink;
|
||||
DWORD dwStyle = GetStyle();
|
||||
int nDrawStyle = DT_LEFT;
|
||||
UINT uFormat = DT_LEFT;
|
||||
if (dwStyle & SS_CENTER)
|
||||
nDrawStyle = DT_CENTER;
|
||||
uFormat = DT_CENTER;
|
||||
else if (dwStyle & SS_RIGHT)
|
||||
nDrawStyle = DT_RIGHT;
|
||||
dc.DrawText(lpstrText, -1, &rcAll, nDrawStyle | DT_WORDBREAK | DT_CALCRECT);
|
||||
if(m_hFont != NULL)
|
||||
uFormat = DT_RIGHT;
|
||||
uFormat |= IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK;
|
||||
dc.DrawText(lpstrText, -1, &rcAll, uFormat | DT_CALCRECT);
|
||||
if(m_hFontLink != NULL)
|
||||
dc.SelectFont(hOldFont);
|
||||
if (dwStyle & SS_CENTER)
|
||||
{
|
||||
|
@ -1053,6 +1056,8 @@ public:
|
|||
{
|
||||
ATLASSERT(m_hWnd == NULL);
|
||||
ATLASSERT(::IsWindow(hWnd));
|
||||
if(m_hFontNormal == NULL)
|
||||
m_hFontNormal = (HFONT)::SendMessage(hWnd, WM_GETFONT, 0, 0L);
|
||||
#if (_MSC_VER >= 1300)
|
||||
BOOL bRet = ATL::CWindowImpl< T, TBase, TWinTraits>::SubclassWindow(hWnd);
|
||||
#else // !(_MSC_VER >= 1300)
|
||||
|
@ -1102,6 +1107,28 @@ public:
|
|||
return bRet;
|
||||
}
|
||||
|
||||
void CreateLinkFontFromNormal()
|
||||
{
|
||||
if(m_bInternalLinkFont)
|
||||
{
|
||||
::DeleteObject(m_hFontLink);
|
||||
m_bInternalLinkFont = false;
|
||||
}
|
||||
|
||||
CFontHandle font = (m_hFontNormal != NULL) ? m_hFontNormal : (HFONT)::GetStockObject(SYSTEM_FONT);
|
||||
LOGFONT lf = { 0 };
|
||||
font.GetLogFont(&lf);
|
||||
|
||||
if(IsUsingTagsBold())
|
||||
lf.lfWeight = FW_BOLD;
|
||||
else if(!IsNotUnderlined())
|
||||
lf.lfUnderline = TRUE;
|
||||
|
||||
m_hFontLink = ::CreateFontIndirect(&lf);
|
||||
m_bInternalLinkFont = true;
|
||||
ATLASSERT(m_hFontLink != NULL);
|
||||
}
|
||||
|
||||
// Message map and handlers
|
||||
BEGIN_MSG_MAP(CHyperLinkImpl)
|
||||
MESSAGE_HANDLER(WM_CREATE, OnCreate)
|
||||
|
@ -1147,6 +1174,21 @@ public:
|
|||
m_tip.DestroyWindow();
|
||||
m_tip.m_hWnd = NULL;
|
||||
}
|
||||
|
||||
if(m_bInternalLinkFont)
|
||||
{
|
||||
::DeleteObject(m_hFontLink);
|
||||
m_hFontLink = NULL;
|
||||
m_bInternalLinkFont = false;
|
||||
}
|
||||
|
||||
if(m_bInternalNormalFont)
|
||||
{
|
||||
::DeleteObject(m_hFontNormal);
|
||||
m_hFontNormal = NULL;
|
||||
m_bInternalNormalFont = false;
|
||||
}
|
||||
|
||||
bHandled = FALSE;
|
||||
return 1;
|
||||
}
|
||||
|
@ -1315,12 +1357,28 @@ public:
|
|||
|
||||
LRESULT OnSetFont(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
|
||||
{
|
||||
if(m_bInternalNormalFont)
|
||||
{
|
||||
::DeleteObject(m_hFontNormal);
|
||||
m_bInternalNormalFont = false;
|
||||
}
|
||||
|
||||
bool bCreateLinkFont = m_bInternalLinkFont;
|
||||
|
||||
m_hFontNormal = (HFONT)wParam;
|
||||
|
||||
if(bCreateLinkFont || IsAutoCreateLinkFont())
|
||||
CreateLinkFontFromNormal();
|
||||
|
||||
T* pT = static_cast<T*>(this);
|
||||
pT->CalcLabelRect();
|
||||
|
||||
if((BOOL)lParam)
|
||||
{
|
||||
Invalidate();
|
||||
UpdateWindow();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1373,26 +1431,17 @@ public:
|
|||
#endif
|
||||
ATLASSERT(m_hCursor != NULL);
|
||||
|
||||
// set font
|
||||
// set fonts
|
||||
if(m_bPaintLabel)
|
||||
{
|
||||
ATL::CWindow wnd = GetParent();
|
||||
m_hFontNormal = wnd.GetFont();
|
||||
if(m_hFontNormal == NULL)
|
||||
m_hFontNormal = (HFONT)::GetStockObject(SYSTEM_FONT);
|
||||
if(m_hFontNormal != NULL && m_hFont == NULL)
|
||||
{
|
||||
LOGFONT lf = { 0 };
|
||||
CFontHandle font = m_hFontNormal;
|
||||
font.GetLogFont(&lf);
|
||||
if(IsUsingTagsBold())
|
||||
lf.lfWeight = FW_BOLD;
|
||||
else if(!IsNotUnderlined())
|
||||
lf.lfUnderline = TRUE;
|
||||
m_hFont = ::CreateFontIndirect(&lf);
|
||||
m_bInternalLinkFont = true;
|
||||
ATLASSERT(m_hFont != NULL);
|
||||
m_hFontNormal = AtlCreateControlFont();
|
||||
m_bInternalNormalFont = true;
|
||||
}
|
||||
|
||||
if(m_hFontLink == NULL)
|
||||
CreateLinkFontFromNormal();
|
||||
}
|
||||
|
||||
#ifndef _WIN32_WCE
|
||||
|
@ -1407,11 +1456,9 @@ public:
|
|||
int nLen = GetWindowTextLength();
|
||||
if(nLen > 0)
|
||||
{
|
||||
CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
|
||||
LPTSTR lpstrText = buff.Allocate(nLen + 1);
|
||||
ATLASSERT(lpstrText != NULL);
|
||||
if((lpstrText != NULL) && (GetWindowText(lpstrText, nLen + 1) > 0))
|
||||
SetLabel(lpstrText);
|
||||
ATLTRY(m_lpstrLabel = new TCHAR[nLen + 1]);
|
||||
if(m_lpstrLabel != NULL)
|
||||
ATLVERIFY(GetWindowText(m_lpstrLabel, nLen + 1) > 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1435,20 +1482,15 @@ public:
|
|||
// set link colors
|
||||
if(m_bPaintLabel)
|
||||
{
|
||||
ATL::CRegKey rk;
|
||||
CRegKeyEx rk;
|
||||
LONG lRet = rk.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Internet Explorer\\Settings"));
|
||||
if(lRet == 0)
|
||||
if(lRet == ERROR_SUCCESS)
|
||||
{
|
||||
const int cchValue = 12;
|
||||
TCHAR szValue[cchValue] = { 0 };
|
||||
#if (_ATL_VER >= 0x0700)
|
||||
ULONG ulCount = cchValue;
|
||||
lRet = rk.QueryStringValue(_T("Anchor Color"), szValue, &ulCount);
|
||||
#else
|
||||
DWORD dwCount = cchValue * sizeof(TCHAR);
|
||||
lRet = rk.QueryValue(szValue, _T("Anchor Color"), &dwCount);
|
||||
#endif
|
||||
if(lRet == 0)
|
||||
if(lRet == ERROR_SUCCESS)
|
||||
{
|
||||
COLORREF clr = pT->_ParseColorString(szValue);
|
||||
ATLASSERT(clr != CLR_INVALID);
|
||||
|
@ -1456,14 +1498,9 @@ public:
|
|||
m_clrLink = clr;
|
||||
}
|
||||
|
||||
#if (_ATL_VER >= 0x0700)
|
||||
ulCount = cchValue;
|
||||
lRet = rk.QueryStringValue(_T("Anchor Color Visited"), szValue, &ulCount);
|
||||
#else
|
||||
dwCount = cchValue * sizeof(TCHAR);
|
||||
lRet = rk.QueryValue(szValue, _T("Anchor Color Visited"), &dwCount);
|
||||
#endif
|
||||
if(lRet == 0)
|
||||
if(lRet == ERROR_SUCCESS)
|
||||
{
|
||||
COLORREF clr = pT->_ParseColorString(szValue);
|
||||
ATLASSERT(clr != CLR_INVALID);
|
||||
|
@ -1485,7 +1522,7 @@ public:
|
|||
if(*p == _T(','))
|
||||
{
|
||||
*p = _T('\0');
|
||||
c[i] = T::_xttoi(lpstr);
|
||||
c[i] = MinCrtHelper::_atoi(lpstr);
|
||||
lpstr = &p[1];
|
||||
break;
|
||||
}
|
||||
|
@ -1495,7 +1532,7 @@ public:
|
|||
}
|
||||
if(*lpstr == _T('\0'))
|
||||
return CLR_INVALID;
|
||||
c[2] = T::_xttoi(lpstr);
|
||||
c[2] = MinCrtHelper::_atoi(lpstr);
|
||||
|
||||
return RGB(c[0], c[1], c[2]);
|
||||
}
|
||||
|
@ -1532,15 +1569,17 @@ public:
|
|||
// get label part rects
|
||||
HFONT hFontOld = dc.SelectFont(m_hFontNormal);
|
||||
|
||||
UINT uFormat = IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK;
|
||||
|
||||
RECT rcLeft = rcClient;
|
||||
if(lpstrLeft != NULL)
|
||||
dc.DrawText(lpstrLeft, cchLeft, &rcLeft, DT_LEFT | DT_WORDBREAK | DT_CALCRECT);
|
||||
dc.DrawText(lpstrLeft, cchLeft, &rcLeft, DT_LEFT | uFormat | DT_CALCRECT);
|
||||
|
||||
dc.SelectFont(m_hFont);
|
||||
dc.SelectFont(m_hFontLink);
|
||||
RECT rcLink = rcClient;
|
||||
if(lpstrLeft != NULL)
|
||||
rcLink.left = rcLeft.right;
|
||||
dc.DrawText(lpstrLink, cchLink, &rcLink, DT_LEFT | DT_WORDBREAK | DT_CALCRECT);
|
||||
dc.DrawText(lpstrLink, cchLink, &rcLink, DT_LEFT | uFormat | DT_CALCRECT);
|
||||
|
||||
dc.SelectFont(hFontOld);
|
||||
|
||||
|
@ -1549,17 +1588,18 @@ public:
|
|||
else
|
||||
{
|
||||
HFONT hOldFont = NULL;
|
||||
if(m_hFont != NULL)
|
||||
hOldFont = dc.SelectFont(m_hFont);
|
||||
if(m_hFontLink != NULL)
|
||||
hOldFont = dc.SelectFont(m_hFontLink);
|
||||
LPTSTR lpstrText = (m_lpstrLabel != NULL) ? m_lpstrLabel : m_lpstrHyperLink;
|
||||
DWORD dwStyle = GetStyle();
|
||||
int nDrawStyle = DT_LEFT;
|
||||
UINT uFormat = DT_LEFT;
|
||||
if (dwStyle & SS_CENTER)
|
||||
nDrawStyle = DT_CENTER;
|
||||
uFormat = DT_CENTER;
|
||||
else if (dwStyle & SS_RIGHT)
|
||||
nDrawStyle = DT_RIGHT;
|
||||
dc.DrawText(lpstrText, -1, &m_rcLink, nDrawStyle | DT_WORDBREAK | DT_CALCRECT);
|
||||
if(m_hFont != NULL)
|
||||
uFormat = DT_RIGHT;
|
||||
uFormat |= IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK;
|
||||
dc.DrawText(lpstrText, -1, &m_rcLink, uFormat | DT_CALCRECT);
|
||||
if(m_hFontLink != NULL)
|
||||
dc.SelectFont(hOldFont);
|
||||
if (dwStyle & SS_CENTER)
|
||||
{
|
||||
|
@ -1656,23 +1696,25 @@ public:
|
|||
dc.SetBkMode(TRANSPARENT);
|
||||
HFONT hFontOld = dc.SelectFont(m_hFontNormal);
|
||||
|
||||
UINT uFormat = IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK;
|
||||
|
||||
if(lpstrLeft != NULL)
|
||||
dc.DrawText(lpstrLeft, cchLeft, &rcClient, DT_LEFT | DT_WORDBREAK);
|
||||
dc.DrawText(lpstrLeft, cchLeft, &rcClient, DT_LEFT | uFormat);
|
||||
|
||||
COLORREF clrOld = dc.SetTextColor(IsWindowEnabled() ? (m_bVisited ? m_clrVisited : m_clrLink) : (::GetSysColor(COLOR_GRAYTEXT)));
|
||||
if(m_hFont != NULL && (!IsUnderlineHover() || (IsUnderlineHover() && m_bHover)))
|
||||
dc.SelectFont(m_hFont);
|
||||
if(m_hFontLink != NULL && (!IsUnderlineHover() || (IsUnderlineHover() && m_bHover)))
|
||||
dc.SelectFont(m_hFontLink);
|
||||
else
|
||||
dc.SelectFont(m_hFontNormal);
|
||||
|
||||
dc.DrawText(lpstrLink, cchLink, &m_rcLink, DT_LEFT | DT_WORDBREAK);
|
||||
dc.DrawText(lpstrLink, cchLink, &m_rcLink, DT_LEFT | uFormat);
|
||||
|
||||
dc.SetTextColor(clrOld);
|
||||
dc.SelectFont(m_hFontNormal);
|
||||
if(lpstrRight != NULL)
|
||||
{
|
||||
RECT rcRight = { m_rcLink.right, m_rcLink.top, rcClient.right, rcClient.bottom };
|
||||
dc.DrawText(lpstrRight, cchRight, &rcRight, DT_LEFT | DT_WORDBREAK);
|
||||
dc.DrawText(lpstrRight, cchRight, &rcRight, DT_LEFT | uFormat);
|
||||
}
|
||||
|
||||
if(GetFocus() == m_hWnd)
|
||||
|
@ -1686,21 +1728,22 @@ public:
|
|||
COLORREF clrOld = dc.SetTextColor(IsWindowEnabled() ? (m_bVisited ? m_clrVisited : m_clrLink) : (::GetSysColor(COLOR_GRAYTEXT)));
|
||||
|
||||
HFONT hFontOld = NULL;
|
||||
if(m_hFont != NULL && (!IsUnderlineHover() || (IsUnderlineHover() && m_bHover)))
|
||||
hFontOld = dc.SelectFont(m_hFont);
|
||||
if(m_hFontLink != NULL && (!IsUnderlineHover() || (IsUnderlineHover() && m_bHover)))
|
||||
hFontOld = dc.SelectFont(m_hFontLink);
|
||||
else
|
||||
hFontOld = dc.SelectFont(m_hFontNormal);
|
||||
|
||||
LPTSTR lpstrText = (m_lpstrLabel != NULL) ? m_lpstrLabel : m_lpstrHyperLink;
|
||||
|
||||
DWORD dwStyle = GetStyle();
|
||||
int nDrawStyle = DT_LEFT;
|
||||
UINT uFormat = DT_LEFT;
|
||||
if (dwStyle & SS_CENTER)
|
||||
nDrawStyle = DT_CENTER;
|
||||
uFormat = DT_CENTER;
|
||||
else if (dwStyle & SS_RIGHT)
|
||||
nDrawStyle = DT_RIGHT;
|
||||
uFormat = DT_RIGHT;
|
||||
uFormat |= IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK;
|
||||
|
||||
dc.DrawText(lpstrText, -1, &m_rcLink, nDrawStyle | DT_WORDBREAK);
|
||||
dc.DrawText(lpstrText, -1, &m_rcLink, uFormat);
|
||||
|
||||
if(GetFocus() == m_hWnd)
|
||||
dc.DrawFocusRect(&m_rcLink);
|
||||
|
@ -1762,33 +1805,17 @@ public:
|
|||
return ((m_dwExtendedStyle & HLINK_NOTOOLTIP) == 0);
|
||||
}
|
||||
|
||||
static int _xttoi(const TCHAR* nptr)
|
||||
bool IsAutoCreateLinkFont() const
|
||||
{
|
||||
#ifndef _ATL_MIN_CRT
|
||||
return _ttoi(nptr);
|
||||
#else // _ATL_MIN_CRT
|
||||
while(*nptr == _T(' ')) // skip spaces
|
||||
++nptr;
|
||||
return ((m_dwExtendedStyle & HLINK_AUTOCREATELINKFONT) == HLINK_AUTOCREATELINKFONT);
|
||||
}
|
||||
|
||||
int c = (int)(_TUCHAR)*nptr++;
|
||||
int sign = c; // save sign indication
|
||||
if (c == _T('-') || c == _T('+'))
|
||||
c = (int)(_TUCHAR)*nptr++; // skip sign
|
||||
|
||||
int total = 0;
|
||||
while((TCHAR)c >= _T('0') && (TCHAR)c <= _T('9'))
|
||||
{
|
||||
total = 10 * total + ((TCHAR)c - _T('0')); // accumulate digit
|
||||
c = (int)(_TUCHAR)*nptr++; // get next char
|
||||
}
|
||||
|
||||
// return result, negated if necessary
|
||||
return ((TCHAR)sign != _T('-')) ? total : -total;
|
||||
#endif // _ATL_MIN_CRT
|
||||
bool IsSingleLine() const
|
||||
{
|
||||
return ((m_dwExtendedStyle & HLINK_SINGLELINE) == HLINK_SINGLELINE);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class CHyperLink : public CHyperLinkImpl<CHyperLink>
|
||||
{
|
||||
public:
|
||||
|
@ -2244,10 +2271,12 @@ public:
|
|||
int m_cxyHeader;
|
||||
TCHAR m_szTitle[m_cchTitle];
|
||||
DWORD m_dwExtendedStyle; // Pane container specific extended styles
|
||||
HFONT m_hFont;
|
||||
bool m_bInternalFont;
|
||||
|
||||
|
||||
// Constructor
|
||||
CPaneContainerImpl() : m_cxyHeader(0), m_dwExtendedStyle(0)
|
||||
CPaneContainerImpl() : m_cxyHeader(0), m_dwExtendedStyle(0), m_hFont(NULL), m_bInternalFont(false)
|
||||
{
|
||||
m_szTitle[0] = 0;
|
||||
}
|
||||
|
@ -2391,8 +2420,11 @@ public:
|
|||
// Message map and handlers
|
||||
BEGIN_MSG_MAP(CPaneContainerImpl)
|
||||
MESSAGE_HANDLER(WM_CREATE, OnCreate)
|
||||
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
|
||||
MESSAGE_HANDLER(WM_SIZE, OnSize)
|
||||
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
|
||||
MESSAGE_HANDLER(WM_GETFONT, OnGetFont)
|
||||
MESSAGE_HANDLER(WM_SETFONT, OnSetFont)
|
||||
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
|
||||
MESSAGE_HANDLER(WM_PAINT, OnPaint)
|
||||
#ifndef _WIN32_WCE
|
||||
|
@ -2405,6 +2437,27 @@ public:
|
|||
|
||||
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||
{
|
||||
if(m_hFont == NULL)
|
||||
{
|
||||
// The same as AtlCreateControlFont() for horizontal pane
|
||||
#ifndef _WIN32_WCE
|
||||
LOGFONT lf = { 0 };
|
||||
ATLVERIFY(::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &lf, 0) != FALSE);
|
||||
if(IsVertical())
|
||||
lf.lfEscapement = 900; // 90 degrees
|
||||
m_hFont = ::CreateFontIndirect(&lf);
|
||||
#else // CE specific
|
||||
m_hFont = (HFONT)::GetStockObject(SYSTEM_FONT);
|
||||
if(IsVertical())
|
||||
{
|
||||
CLogFont lf(m_hFont);
|
||||
lf.lfEscapement = 900; // 90 degrees
|
||||
m_hFont = ::CreateFontIndirect(&lf);
|
||||
}
|
||||
#endif // _WIN32_WCE
|
||||
m_bInternalFont = true;
|
||||
}
|
||||
|
||||
T* pT = static_cast<T*>(this);
|
||||
pT->CalcSize();
|
||||
|
||||
|
@ -2414,6 +2467,18 @@ public:
|
|||
return 0;
|
||||
}
|
||||
|
||||
LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||
{
|
||||
if(m_bInternalFont)
|
||||
{
|
||||
::DeleteObject(m_hFont);
|
||||
m_hFont = NULL;
|
||||
m_bInternalFont = false;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
|
||||
{
|
||||
T* pT = static_cast<T*>(this);
|
||||
|
@ -2428,6 +2493,30 @@ public:
|
|||
return 0;
|
||||
}
|
||||
|
||||
LRESULT OnGetFont(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||
{
|
||||
return (LRESULT)m_hFont;
|
||||
}
|
||||
|
||||
LRESULT OnSetFont(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
|
||||
{
|
||||
if(m_bInternalFont)
|
||||
{
|
||||
::DeleteObject(m_hFont);
|
||||
m_bInternalFont = false;
|
||||
}
|
||||
|
||||
m_hFont = (HFONT)wParam;
|
||||
|
||||
T* pT = static_cast<T*>(this);
|
||||
pT->CalcSize();
|
||||
|
||||
if((BOOL)lParam != FALSE)
|
||||
pT->UpdateLayout();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT OnEraseBackground(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||
{
|
||||
return 1; // no background needed
|
||||
|
@ -2624,6 +2713,8 @@ public:
|
|||
{
|
||||
T* pT = static_cast<T*>(this);
|
||||
CFontHandle font = pT->GetTitleFont();
|
||||
if(font.IsNull())
|
||||
font = (HFONT)::GetStockObject(SYSTEM_FONT);
|
||||
LOGFONT lf = { 0 };
|
||||
font.GetLogFont(lf);
|
||||
if(IsVertical())
|
||||
|
@ -2640,7 +2731,7 @@ public:
|
|||
|
||||
HFONT GetTitleFont() const
|
||||
{
|
||||
return AtlGetDefaultGuiFont();
|
||||
return m_hFont;
|
||||
}
|
||||
|
||||
#ifndef _WIN32_WCE
|
||||
|
@ -2675,23 +2766,42 @@ public:
|
|||
}
|
||||
dc.FillRect(&rect, COLOR_3DFACE);
|
||||
|
||||
if(!IsVertical()) // draw title only for horizontal pane container
|
||||
// draw title text
|
||||
dc.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
|
||||
dc.SetBkMode(TRANSPARENT);
|
||||
T* pT = static_cast<T*>(this);
|
||||
HFONT hFontOld = dc.SelectFont(pT->GetTitleFont());
|
||||
#ifdef _WIN32_WCE
|
||||
const UINT DT_END_ELLIPSIS = 0;
|
||||
#endif // _WIN32_WCE
|
||||
|
||||
if(IsVertical())
|
||||
{
|
||||
rect.top += m_cxyTextOffset;
|
||||
rect.bottom -= m_cxyTextOffset;
|
||||
if(m_tb.m_hWnd != NULL)
|
||||
rect.top += m_cxToolBar;;
|
||||
|
||||
RECT rcCalc = { rect.left, rect.bottom, rect.right, rect.top };
|
||||
int cxFont = dc.DrawText(m_szTitle, -1, &rcCalc, DT_TOP | DT_SINGLELINE | DT_END_ELLIPSIS | DT_CALCRECT);
|
||||
RECT rcText = { 0 };
|
||||
rcText.left = (rect.right - rect.left - cxFont) / 2;
|
||||
rcText.right = rcText.left + (rect.bottom - rect.top);
|
||||
rcText.top = rect.bottom;
|
||||
rcText.bottom = rect.top;
|
||||
dc.DrawText(m_szTitle, -1, &rcText, DT_TOP | DT_SINGLELINE | DT_END_ELLIPSIS);
|
||||
}
|
||||
else
|
||||
{
|
||||
dc.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
|
||||
dc.SetBkMode(TRANSPARENT);
|
||||
T* pT = static_cast<T*>(this);
|
||||
HFONT hFontOld = dc.SelectFont(pT->GetTitleFont());
|
||||
rect.left += m_cxyTextOffset;
|
||||
rect.right -= m_cxyTextOffset;
|
||||
if(m_tb.m_hWnd != NULL)
|
||||
rect.right -= m_cxToolBar;;
|
||||
#ifndef _WIN32_WCE
|
||||
|
||||
dc.DrawText(m_szTitle, -1, &rect, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS);
|
||||
#else // CE specific
|
||||
dc.DrawText(m_szTitle, -1, &rect, DT_LEFT | DT_SINGLELINE | DT_VCENTER);
|
||||
#endif // _WIN32_WCE
|
||||
dc.SelectFont(hFontOld);
|
||||
}
|
||||
|
||||
dc.SelectFont(hFontOld);
|
||||
}
|
||||
|
||||
// called only if pane is empty
|
||||
|
@ -3687,9 +3797,11 @@ public:
|
|||
bool m_bActiveAsDefaultMenuItem:1;
|
||||
bool m_bEmptyMenuItem:1;
|
||||
bool m_bWindowsMenuItem:1;
|
||||
bool m_bNoTabDrag:1;
|
||||
// internal
|
||||
bool m_bTabCapture:1;
|
||||
bool m_bTabDrag:1;
|
||||
bool m_bInternalFont:1;
|
||||
|
||||
// Constructor/destructor
|
||||
CTabViewImpl() :
|
||||
|
@ -3707,8 +3819,10 @@ public:
|
|||
m_bActiveAsDefaultMenuItem(false),
|
||||
m_bEmptyMenuItem(false),
|
||||
m_bWindowsMenuItem(false),
|
||||
m_bNoTabDrag(false),
|
||||
m_bTabCapture(false),
|
||||
m_bTabDrag(false)
|
||||
m_bTabDrag(false),
|
||||
m_bInternalFont(false)
|
||||
{
|
||||
m_ptStartDrag.x = 0;
|
||||
m_ptStartDrag.y = 0;
|
||||
|
@ -4260,6 +4374,8 @@ public:
|
|||
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
|
||||
MESSAGE_HANDLER(WM_SIZE, OnSize)
|
||||
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
|
||||
MESSAGE_HANDLER(WM_GETFONT, OnGetFont)
|
||||
MESSAGE_HANDLER(WM_SETFONT, OnSetFont)
|
||||
NOTIFY_HANDLER(m_nTabID, TCN_SELCHANGE, OnTabChanged)
|
||||
NOTIFY_ID_HANDLER(m_nTabID, OnTabNotification)
|
||||
#ifndef _WIN32_WCE
|
||||
|
@ -4294,6 +4410,14 @@ public:
|
|||
il.Destroy();
|
||||
}
|
||||
|
||||
if(m_bInternalFont)
|
||||
{
|
||||
HFONT hFont = m_tab.GetFont();
|
||||
m_tab.SetFont(NULL, FALSE);
|
||||
::DeleteObject(hFont);
|
||||
m_bInternalFont = false;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -4311,6 +4435,32 @@ public:
|
|||
return 0;
|
||||
}
|
||||
|
||||
LRESULT OnGetFont(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||
{
|
||||
return m_tab.SendMessage(WM_GETFONT);
|
||||
}
|
||||
|
||||
LRESULT OnSetFont(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
|
||||
{
|
||||
if(m_bInternalFont)
|
||||
{
|
||||
HFONT hFont = m_tab.GetFont();
|
||||
m_tab.SetFont(NULL, FALSE);
|
||||
::DeleteObject(hFont);
|
||||
m_bInternalFont = false;
|
||||
}
|
||||
|
||||
m_tab.SendMessage(WM_SETFONT, wParam, lParam);
|
||||
|
||||
T* pT = static_cast<T*>(this);
|
||||
m_cyTabHeight = pT->CalcTabHeight();
|
||||
|
||||
if((BOOL)lParam != FALSE)
|
||||
pT->UpdateLayout();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT OnTabChanged(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)
|
||||
{
|
||||
SetActivePage(m_tab.GetCurSel());
|
||||
|
@ -4348,7 +4498,7 @@ public:
|
|||
// Tab control message handlers
|
||||
LRESULT OnTabLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled)
|
||||
{
|
||||
if(m_tab.GetItemCount() > 1)
|
||||
if(!m_bNoTabDrag && (m_tab.GetItemCount() > 1))
|
||||
{
|
||||
m_bTabCapture = true;
|
||||
m_tab.SetCapture();
|
||||
|
@ -4565,7 +4715,8 @@ public:
|
|||
if(m_tab.m_hWnd == NULL)
|
||||
return false;
|
||||
|
||||
m_tab.SetFont(AtlGetDefaultGuiFont());
|
||||
m_tab.SetFont(AtlCreateControlFont());
|
||||
m_bInternalFont = true;
|
||||
|
||||
m_tab.SetItemExtra(sizeof(TABVIEWPAGE));
|
||||
|
||||
|
@ -4817,7 +4968,6 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
class CTabView : public CTabViewImpl<CTabView>
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atlddx.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
@ -142,6 +138,23 @@ namespace WTL
|
|||
return TRUE; \
|
||||
}
|
||||
|
||||
// DDX support for Tab, Combo, ListBox and ListView selection index
|
||||
// Note: Specialized versions require atlctrls.h to be included first
|
||||
#if (_MSC_VER >= 1300)
|
||||
|
||||
#define DDX_INDEX(CtrlClass, nID, var) \
|
||||
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||
DDX_Index<CtrlClass>(nID, var, bSaveAndValidate);
|
||||
|
||||
#ifdef __ATLCTRLS_H__
|
||||
#define DDX_TAB_INDEX(nID, var) DDX_INDEX(WTL::CTabCtrl, nID, var)
|
||||
#define DDX_COMBO_INDEX(nID, var) DDX_INDEX(WTL::CComboBox, nID, var)
|
||||
#define DDX_LISTBOX_INDEX(nID, var) DDX_INDEX(WTL::CListBox, nID, var)
|
||||
#define DDX_LISTVIEW_INDEX(nID, var) DDX_INDEX(WTL::CListViewCtrl, nID, var)
|
||||
#endif // __ATLCTRLS_H__
|
||||
|
||||
#endif // (_MSC_VER >= 1300)
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// CWinDataExchange - provides support for DDX
|
||||
|
@ -601,6 +614,54 @@ public:
|
|||
while (hWndCtrl != NULL && !(GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP));
|
||||
}
|
||||
|
||||
// DDX support for Tab, Combo, ListBox and ListView selection index
|
||||
#if (_MSC_VER >= 1300)
|
||||
template <class TCtrl>
|
||||
INT _getSel(TCtrl& tCtrl)
|
||||
{
|
||||
return tCtrl.GetCurSel();
|
||||
}
|
||||
|
||||
template <class TCtrl>
|
||||
void _setSel(TCtrl& tCtrl, INT iSel)
|
||||
{
|
||||
if(iSel < 0)
|
||||
tCtrl.SetCurSel(-1);
|
||||
else
|
||||
tCtrl.SetCurSel(iSel);
|
||||
}
|
||||
|
||||
#ifdef __ATLCTRLS_H__
|
||||
// ListViewCtrl specialization
|
||||
template <>
|
||||
INT _getSel(WTL::CListViewCtrl& tCtrl)
|
||||
{
|
||||
return tCtrl.GetSelectedIndex();
|
||||
}
|
||||
|
||||
template <>
|
||||
void _setSel(WTL::CListViewCtrl& tCtrl, INT iSel)
|
||||
{
|
||||
if(iSel < 0)
|
||||
tCtrl.SelectItem(-1);
|
||||
else
|
||||
tCtrl.SelectItem(iSel);
|
||||
}
|
||||
#endif // __ATLCTRLS_H__
|
||||
|
||||
template <class TCtrl>
|
||||
void DDX_Index(UINT nID, INT& nVal, BOOL bSave)
|
||||
{
|
||||
T* pT = static_cast<T*>(this);
|
||||
TCtrl ctrl(pT->GetDlgItem(nID));
|
||||
|
||||
if(bSave)
|
||||
nVal = _getSel(ctrl);
|
||||
else
|
||||
_setSel(ctrl, nVal);
|
||||
}
|
||||
#endif // (_MSC_VER >= 1300)
|
||||
|
||||
// Overrideables
|
||||
void OnDataExchangeError(UINT nCtrlID, BOOL /*bSave*/)
|
||||
{
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atldlgs.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
@ -64,6 +60,7 @@
|
|||
// CFindReplaceDialogImpl<T>
|
||||
// CFindReplaceDialog
|
||||
//
|
||||
// CDialogBaseUnits
|
||||
// CMemDlgTemplate
|
||||
// CIndirectDialogImpl<T, TDlgTemplate, TBase>
|
||||
//
|
||||
|
@ -151,7 +148,12 @@ public:
|
|||
|
||||
m_bOpenFileDialog = bOpenFileDialog;
|
||||
|
||||
#if defined(__AYGSHELL_H__) && (_WIN32_WCE >= 0x0501)
|
||||
m_ofn.lStructSize = bOpenFileDialog ? sizeof(m_ofn) : sizeof(OPENFILENAME);
|
||||
#else
|
||||
m_ofn.lStructSize = sizeof(m_ofn);
|
||||
#endif
|
||||
|
||||
#if (_WIN32_WINNT >= 0x0500)
|
||||
// adjust struct size if running on older version of Windows
|
||||
if(AtlIsOldWindows())
|
||||
|
@ -512,7 +514,7 @@ public:
|
|||
if (pStr[nLength + 1] == 0)
|
||||
{
|
||||
// The OFN buffer contains a single item so extract its path.
|
||||
LPCTSTR pSep = _strrchr(pStr, _T('\\'));
|
||||
LPCTSTR pSep = MinCrtHelper::_strrchr(pStr, _T('\\'));
|
||||
if (pSep != NULL)
|
||||
nLength = (int)(DWORD_PTR)(pSep - pStr);
|
||||
}
|
||||
|
@ -570,7 +572,7 @@ public:
|
|||
else
|
||||
{
|
||||
// A single item was selected. Skip forward past the path.
|
||||
LPCTSTR pSep = _strrchr(pStr, _T('\\'));
|
||||
LPCTSTR pSep = MinCrtHelper::_strrchr(pStr, _T('\\'));
|
||||
if (pSep != NULL)
|
||||
pStr = pSep + 1;
|
||||
}
|
||||
|
@ -652,7 +654,7 @@ public:
|
|||
int nRet = 0;
|
||||
LPCTSTR pStr = m_pNextFile;
|
||||
// Does the filename contain a backslash?
|
||||
if (_strrchr(pStr, _T('\\')) != NULL)
|
||||
if (MinCrtHelper::_strrchr(pStr, _T('\\')) != NULL)
|
||||
{
|
||||
// Yes, so we'll assume it's a full path.
|
||||
int nLength = lstrlen(pStr);
|
||||
|
@ -846,23 +848,6 @@ public:
|
|||
if (nExtraChars > 0)
|
||||
ATLVERIFY(ResizeFilenameBuffer(m_ofn.nMaxFile + nExtraChars));
|
||||
}
|
||||
|
||||
// Helper for _ATM_MIN_CRT
|
||||
static const TCHAR* _strrchr(const TCHAR* p, TCHAR ch)
|
||||
{
|
||||
#ifndef _ATL_MIN_CRT
|
||||
return _tcsrchr(p, ch);
|
||||
#else // _ATL_MIN_CRT
|
||||
const TCHAR* lpsz = NULL;
|
||||
while (*p != 0)
|
||||
{
|
||||
if (*p == ch)
|
||||
lpsz = p;
|
||||
p = ::CharNext(p);
|
||||
}
|
||||
return lpsz;
|
||||
#endif // _ATL_MIN_CRT
|
||||
}
|
||||
};
|
||||
|
||||
class CMultiFileDialog : public CMultiFileDialogImpl<CMultiFileDialog>
|
||||
|
@ -1538,7 +1523,7 @@ public:
|
|||
ATLASSERT(m_hWnd != NULL);
|
||||
USES_CONVERSION;
|
||||
LPCWSTR lpstr = T2CW(lpstrOKText);
|
||||
::SendMessage(m_hWnd, BFFM_SETOKTEXT, (WPARAM)lpstr, 0L);
|
||||
::SendMessage(m_hWnd, BFFM_SETOKTEXT, 0, (LPARAM)lpstr);
|
||||
}
|
||||
|
||||
void SetExpanded(LPCITEMIDLIST pItemIDList)
|
||||
|
@ -2957,14 +2942,159 @@ public:
|
|||
#endif // !_WIN32_WCE
|
||||
|
||||
|
||||
#if (_ATL_VER >= 0x800)
|
||||
typedef ATL::_DialogSplitHelper::DLGTEMPLATEEX DLGTEMPLATEEX;
|
||||
typedef ATL::_DialogSplitHelper::DLGITEMTEMPLATEEX DLGITEMTEMPLATEEX;
|
||||
#else // (_ATL_VER >= 0x800)
|
||||
typedef ATL::_DialogSizeHelper::_ATL_DLGTEMPLATEEX DLGTEMPLATEEX;
|
||||
#pragma pack(push, 4)
|
||||
struct DLGITEMTEMPLATEEX
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// CDialogBaseUnits - Dialog Units helper
|
||||
//
|
||||
|
||||
class CDialogBaseUnits
|
||||
{
|
||||
public:
|
||||
SIZE m_sizeUnits;
|
||||
|
||||
// Constructors
|
||||
CDialogBaseUnits()
|
||||
{
|
||||
// The base units of the out-dated System Font
|
||||
LONG nDlgBaseUnits = ::GetDialogBaseUnits();
|
||||
m_sizeUnits.cx = LOWORD(nDlgBaseUnits);
|
||||
m_sizeUnits.cy = HIWORD(nDlgBaseUnits);
|
||||
}
|
||||
|
||||
CDialogBaseUnits(HWND hWnd)
|
||||
{
|
||||
if(!InitDialogBaseUnits(hWnd)) {
|
||||
LONG nDlgBaseUnits = ::GetDialogBaseUnits();
|
||||
m_sizeUnits.cx = LOWORD(nDlgBaseUnits);
|
||||
m_sizeUnits.cy = HIWORD(nDlgBaseUnits);
|
||||
}
|
||||
}
|
||||
|
||||
CDialogBaseUnits(HFONT hFont, HWND hWnd = NULL)
|
||||
{
|
||||
if(!InitDialogBaseUnits(hFont, hWnd)) {
|
||||
LONG nDlgBaseUnits = ::GetDialogBaseUnits();
|
||||
m_sizeUnits.cx = LOWORD(nDlgBaseUnits);
|
||||
m_sizeUnits.cy = HIWORD(nDlgBaseUnits);
|
||||
}
|
||||
}
|
||||
|
||||
CDialogBaseUnits(LOGFONT lf, HWND hWnd = NULL)
|
||||
{
|
||||
if(!InitDialogBaseUnits(lf, hWnd)) {
|
||||
LONG nDlgBaseUnits = ::GetDialogBaseUnits();
|
||||
m_sizeUnits.cx = LOWORD(nDlgBaseUnits);
|
||||
m_sizeUnits.cy = HIWORD(nDlgBaseUnits);
|
||||
}
|
||||
}
|
||||
|
||||
// Operations
|
||||
BOOL InitDialogBaseUnits(HWND hWnd)
|
||||
{
|
||||
ATLASSERT(::IsWindow(hWnd));
|
||||
RECT rc = { 0, 0, 4, 8 };
|
||||
if(!::MapDialogRect(hWnd, &rc)) return FALSE;
|
||||
m_sizeUnits.cx = rc.right;
|
||||
m_sizeUnits.cy = rc.bottom;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL InitDialogBaseUnits(LOGFONT lf, HWND hWnd = NULL)
|
||||
{
|
||||
CFont font;
|
||||
font.CreateFontIndirect(&lf);
|
||||
if(font.IsNull()) return FALSE;
|
||||
return InitDialogBaseUnits(font, hWnd);
|
||||
}
|
||||
|
||||
BOOL InitDialogBaseUnits(HFONT hFont, HWND hWnd = NULL)
|
||||
{
|
||||
ATLASSERT(hFont != NULL);
|
||||
CWindowDC dc = hWnd;
|
||||
TEXTMETRIC tmText = { 0 };
|
||||
SIZE sizeText = { 0 };
|
||||
HFONT hFontOld = dc.SelectFont(hFont);
|
||||
dc.GetTextMetrics(&tmText);
|
||||
m_sizeUnits.cy = tmText.tmHeight + tmText.tmExternalLeading;
|
||||
dc.GetTextExtent(_T("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), 52, &sizeText);
|
||||
m_sizeUnits.cx = (sizeText.cx + 26) / 52;
|
||||
dc.SelectFont(hFontOld);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
SIZE GetDialogBaseUnits() const
|
||||
{
|
||||
return m_sizeUnits;
|
||||
}
|
||||
|
||||
INT MapDialogPixelsX(INT x) const
|
||||
{
|
||||
return ::MulDiv(x, 4, m_sizeUnits.cx); // Pixels X to DLU
|
||||
}
|
||||
|
||||
INT MapDialogPixelsY(INT y) const
|
||||
{
|
||||
return ::MulDiv(y, 8, m_sizeUnits.cy); // Pixels Y to DLU
|
||||
}
|
||||
|
||||
POINT MapDialogPixels(POINT pt) const
|
||||
{
|
||||
POINT out = { MapDialogPixelsX(pt.x), MapDialogPixelsY(pt.y) };
|
||||
return out;
|
||||
}
|
||||
|
||||
SIZE MapDialogPixels(SIZE input) const
|
||||
{
|
||||
SIZE out = { MapDialogPixelsX(input.cx), MapDialogPixelsY(input.cy) };
|
||||
return out;
|
||||
}
|
||||
|
||||
RECT MapDialogPixels(RECT input) const
|
||||
{
|
||||
RECT out = { MapDialogPixelsX(input.left), MapDialogPixelsY(input.top), MapDialogPixelsX(input.right), MapDialogPixelsY(input.bottom) };
|
||||
return out;
|
||||
}
|
||||
|
||||
INT MapDialogUnitsX(INT x) const
|
||||
{
|
||||
return ::MulDiv(x, m_sizeUnits.cx, 4); // DLU to Pixels X
|
||||
}
|
||||
|
||||
INT MapDialogUnitsY(INT y) const
|
||||
{
|
||||
return ::MulDiv(y, m_sizeUnits.cx, 8); // DLU to Pixels Y
|
||||
}
|
||||
|
||||
POINT MapDialogUnits(POINT pt) const
|
||||
{
|
||||
POINT out = { MapDialogUnitsX(pt.x), MapDialogUnitsY(pt.y) };
|
||||
return out;
|
||||
}
|
||||
|
||||
SIZE MapDialogUnits(SIZE input) const
|
||||
{
|
||||
SIZE out = { MapDialogUnitsX(input.cx), MapDialogUnitsY(input.cy) };
|
||||
return out;
|
||||
}
|
||||
|
||||
RECT MapDialogUnits(RECT input) const
|
||||
{
|
||||
RECT out = { MapDialogUnitsX(input.left), MapDialogUnitsY(input.top), MapDialogUnitsX(input.right), MapDialogUnitsY(input.bottom) };
|
||||
return out;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// CMemDlgTemplate - in-memory dialog template - DLGTEMPLATE or DLGTEMPLATEEX
|
||||
|
||||
#if (_ATL_VER >= 0x800)
|
||||
typedef ATL::_DialogSplitHelper::DLGTEMPLATEEX DLGTEMPLATEEX;
|
||||
typedef ATL::_DialogSplitHelper::DLGITEMTEMPLATEEX DLGITEMTEMPLATEEX;
|
||||
#else // (_ATL_VER >= 0x800)
|
||||
typedef ATL::_DialogSizeHelper::_ATL_DLGTEMPLATEEX DLGTEMPLATEEX;
|
||||
#pragma pack(push, 4)
|
||||
struct DLGITEMTEMPLATEEX
|
||||
{
|
||||
DWORD helpID;
|
||||
DWORD exStyle;
|
||||
DWORD style;
|
||||
|
@ -2972,15 +3102,12 @@ struct DLGITEMTEMPLATEEX
|
|||
short y;
|
||||
short cx;
|
||||
short cy;
|
||||
WORD id;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
DWORD id;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
#endif // (_ATL_VER >= 0x800)
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// CMemDlgTemplate - in-memory dialog template - DLGTEMPLATE or DLGTEMPLATEEX
|
||||
|
||||
class CMemDlgTemplate
|
||||
{
|
||||
public:
|
||||
|
@ -2994,7 +3121,7 @@ public:
|
|||
CTRL_COMBOBOX = 0x0085
|
||||
};
|
||||
|
||||
CMemDlgTemplate() : m_pData(NULL), m_pPtr(NULL), m_cAllocated(0)
|
||||
CMemDlgTemplate() : m_hData(NULL), m_pData(NULL), m_pPtr(NULL), m_cAllocated(0)
|
||||
{ }
|
||||
|
||||
~CMemDlgTemplate()
|
||||
|
@ -3024,17 +3151,30 @@ public:
|
|||
|
||||
void Reset()
|
||||
{
|
||||
if (IsValid())
|
||||
ATLVERIFY(::GlobalFree(m_pData) == NULL);
|
||||
if (IsValid()) {
|
||||
#ifndef UNDER_CE
|
||||
::GlobalUnlock(m_pData);
|
||||
#endif
|
||||
ATLVERIFY(::GlobalFree(m_hData) == NULL);
|
||||
}
|
||||
|
||||
m_hData = NULL;
|
||||
m_pData = NULL;
|
||||
m_pPtr = NULL;
|
||||
m_cAllocated = 0;
|
||||
}
|
||||
|
||||
void Create(bool bDlgEx, LPCTSTR lpszCaption, short nX, short nY, short nWidth, short nHeight, DWORD dwStyle = 0, DWORD dwExStyle = 0,
|
||||
LPCTSTR lpstrFontName = NULL, WORD wFontSize = 0, WORD wWeight = 0, BYTE bItalic = 0, BYTE bCharset = 0, DWORD dwHelpID = 0,
|
||||
ATL::_U_STRINGorID ClassName = 0U, ATL::_U_STRINGorID Menu = 0U)
|
||||
void Create(bool bDlgEx, LPCTSTR lpszCaption, RECT rc, DWORD dwStyle = 0, DWORD dwExStyle = 0,
|
||||
LPCTSTR lpstrFontName = NULL, WORD wFontSize = 0, WORD wWeight = 0, BYTE bItalic = 0, BYTE bCharset = 0, DWORD dwHelpID = 0,
|
||||
ATL::_U_STRINGorID ClassName = 0U, ATL::_U_STRINGorID Menu = 0U)
|
||||
{
|
||||
Create(bDlgEx, lpszCaption, (short) rc.left, (short) rc.top, (short) (rc.right - rc.left), (short) (rc.bottom - rc.top), dwStyle, dwExStyle,
|
||||
lpstrFontName, wFontSize, wWeight, bItalic, bCharset, dwHelpID, ClassName.m_lpstr, Menu.m_lpstr);
|
||||
}
|
||||
|
||||
void Create(bool bDlgEx, LPCTSTR lpszCaption, short nX, short nY, short nWidth, short nHeight, DWORD dwStyle = 0, DWORD dwExStyle = 0,
|
||||
LPCTSTR lpstrFontName = NULL, WORD wFontSize = 0, WORD wWeight = 0, BYTE bItalic = 0, BYTE bCharset = 0, DWORD dwHelpID = 0,
|
||||
ATL::_U_STRINGorID ClassName = 0U, ATL::_U_STRINGorID Menu = 0U)
|
||||
{
|
||||
// Should have DS_SETFONT style to set the dialog font name and size
|
||||
if (lpstrFontName != NULL)
|
||||
|
@ -3113,6 +3253,13 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
void AddControl(ATL::_U_STRINGorID ClassName, WORD wId, RECT rc, DWORD dwStyle, DWORD dwExStyle,
|
||||
ATL::_U_STRINGorID Text, const WORD* pCreationData = NULL, WORD nCreationData = 0, DWORD dwHelpID = 0)
|
||||
{
|
||||
AddControl(ClassName.m_lpstr, wId, (short) rc.left, (short) rc.top, (short) (rc.right - rc.left), (short) (rc.bottom - rc.top), dwStyle, dwExStyle,
|
||||
Text.m_lpstr, pCreationData, nCreationData, dwHelpID);
|
||||
}
|
||||
|
||||
void AddControl(ATL::_U_STRINGorID ClassName, WORD wId, short nX, short nY, short nWidth, short nHeight, DWORD dwStyle, DWORD dwExStyle,
|
||||
ATL::_U_STRINGorID Text, const WORD* pCreationData = NULL, WORD nCreationData = 0, DWORD dwHelpID = 0)
|
||||
{
|
||||
|
@ -3179,24 +3326,38 @@ public:
|
|||
AddControl(CtrlType, wId, nX, nY, nWidth, nHeight, dwStyle, dwExStyle, Text, pCreationData, nCreationData, dwHelpID);
|
||||
}
|
||||
|
||||
protected:
|
||||
void AddData(LPCVOID pData, size_t nData)
|
||||
{
|
||||
ATLASSERT(pData != NULL);
|
||||
|
||||
const size_t ALLOCATION_INCREMENT = 1024;
|
||||
const SIZE_T ALLOCATION_INCREMENT = 1024;
|
||||
|
||||
if (m_pData == NULL)
|
||||
{
|
||||
m_cAllocated = ((nData / ALLOCATION_INCREMENT) + 1) * ALLOCATION_INCREMENT;
|
||||
m_pPtr = m_pData = static_cast<LPBYTE>(::GlobalAlloc(GPTR, m_cAllocated));
|
||||
m_hData = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, m_cAllocated);
|
||||
ATLASSERT(m_hData != NULL);
|
||||
#ifndef UNDER_CE
|
||||
m_pPtr = m_pData = static_cast<LPBYTE>(::GlobalLock(m_hData));
|
||||
#else
|
||||
m_pPtr = m_pData = static_cast<LPBYTE>(m_hData);
|
||||
#endif
|
||||
ATLASSERT(m_pData != NULL);
|
||||
}
|
||||
else if (((m_pPtr - m_pData) + nData) > m_cAllocated)
|
||||
{
|
||||
size_t ptrPos = (m_pPtr - m_pData);
|
||||
SIZE_T ptrPos = (m_pPtr - m_pData);
|
||||
m_cAllocated += ((nData / ALLOCATION_INCREMENT) + 1) * ALLOCATION_INCREMENT;
|
||||
m_pData = static_cast<LPBYTE>(::GlobalReAlloc(m_pData, m_cAllocated, 0));
|
||||
#ifndef UNDER_CE
|
||||
::GlobalUnlock(m_pData);
|
||||
#endif
|
||||
m_hData = ::GlobalReAlloc(m_hData, m_cAllocated, GMEM_MOVEABLE | GMEM_ZEROINIT);
|
||||
ATLASSERT(m_hData != NULL);
|
||||
#ifndef UNDER_CE
|
||||
m_pData = static_cast<LPBYTE>(::GlobalLock(m_hData));
|
||||
#else
|
||||
m_pData = static_cast<LPBYTE>(m_hData);
|
||||
#endif
|
||||
ATLASSERT(m_pData != NULL);
|
||||
m_pPtr = m_pData + ptrPos;
|
||||
}
|
||||
|
@ -3222,6 +3383,7 @@ protected:
|
|||
}
|
||||
}
|
||||
|
||||
HANDLE m_hData;
|
||||
LPBYTE m_pData;
|
||||
LPBYTE m_pPtr;
|
||||
SIZE_T m_cAllocated;
|
||||
|
@ -5628,7 +5790,13 @@ inline int AtlTaskDialog(HWND hWndParent,
|
|||
|
||||
#ifdef _WTL_TASKDIALOG_DIRECT
|
||||
USES_CONVERSION;
|
||||
HRESULT hRet = ::TaskDialog(hWndParent, ModuleHelper::GetResourceInstance(), T2CW(WindowTitle.m_lpstr), T2CW(MainInstructionText.m_lpstr), T2CW(ContentText.m_lpstr), dwCommonButtons, T2CW(Icon.m_lpstr), &nRet);
|
||||
HRESULT hRet = ::TaskDialog(hWndParent, ModuleHelper::GetResourceInstance(),
|
||||
IS_INTRESOURCE(WindowTitle.m_lpstr) ? (LPCWSTR) WindowTitle.m_lpstr : T2CW(WindowTitle.m_lpstr),
|
||||
IS_INTRESOURCE(MainInstructionText.m_lpstr) ? (LPCWSTR) MainInstructionText.m_lpstr : T2CW(MainInstructionText.m_lpstr),
|
||||
IS_INTRESOURCE(ContentText.m_lpstr) ? (LPCWSTR) ContentText.m_lpstr : T2CW(ContentText.m_lpstr),
|
||||
dwCommonButtons,
|
||||
IS_INTRESOURCE(Icon.m_lpstr) ? (LPCWSTR) Icon.m_lpstr : T2CW(Icon.m_lpstr),
|
||||
&nRet);
|
||||
ATLVERIFY(SUCCEEDED(hRet));
|
||||
#else
|
||||
// This allows apps to run on older versions of Windows
|
||||
|
@ -5641,7 +5809,13 @@ inline int AtlTaskDialog(HWND hWndParent,
|
|||
if(pfnTaskDialog != NULL)
|
||||
{
|
||||
USES_CONVERSION;
|
||||
HRESULT hRet = pfnTaskDialog(hWndParent, ModuleHelper::GetResourceInstance(), T2CW(WindowTitle.m_lpstr), T2CW(MainInstructionText.m_lpstr), T2CW(ContentText.m_lpstr), dwCommonButtons, T2CW(Icon.m_lpstr), &nRet);
|
||||
HRESULT hRet = pfnTaskDialog(hWndParent, ModuleHelper::GetResourceInstance(),
|
||||
IS_INTRESOURCE(WindowTitle.m_lpstr) ? (LPCWSTR) WindowTitle.m_lpstr : T2CW(WindowTitle.m_lpstr),
|
||||
IS_INTRESOURCE(MainInstructionText.m_lpstr) ? (LPCWSTR) MainInstructionText.m_lpstr : T2CW(MainInstructionText.m_lpstr),
|
||||
IS_INTRESOURCE(ContentText.m_lpstr) ? (LPCWSTR) ContentText.m_lpstr : T2CW(ContentText.m_lpstr),
|
||||
dwCommonButtons,
|
||||
IS_INTRESOURCE(Icon.m_lpstr) ? (LPCWSTR) Icon.m_lpstr : T2CW(Icon.m_lpstr),
|
||||
&nRet);
|
||||
ATLVERIFY(SUCCEEDED(hRet));
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,461 @@
|
|||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
// any other, from this software.
|
||||
|
||||
#ifndef __ATLDWM_H__
|
||||
#define __ATLDWM_H__
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
#error atldwm.h is not supported on Windows CE
|
||||
#endif
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atldwm.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
||||
#ifndef __ATLWIN_H__
|
||||
#error atldwm.h requires atlwin.h to be included first
|
||||
#endif
|
||||
|
||||
#if (_WIN32_WINNT < 0x0600)
|
||||
#error atldwm.h requires _WIN32_WINNT >= 0x0600
|
||||
#endif // (_WIN32_WINNT < 0x0600)
|
||||
|
||||
#ifndef _DWMAPI_H_
|
||||
#include <dwmapi.h>
|
||||
#endif // _DWMAPI_H_
|
||||
#pragma comment(lib, "dwmapi.lib")
|
||||
|
||||
// Note: To create an application that also runs on older versions of Windows,
|
||||
// use delay load of dwmapi.dll and ensure that no calls to the DWM API are
|
||||
// Delay load is NOT AUTOMATIC for VC++ 7, you have to link to delayimp.lib,
|
||||
// and add dwmapi.dll in the Linker.Input.Delay Loaded DLLs section of the
|
||||
// project properties.
|
||||
#if (_MSC_VER < 1300) && !defined(_WTL_NO_DWMAPI_DELAYLOAD)
|
||||
#pragma comment(lib, "delayimp.lib")
|
||||
#pragma comment(linker, "/delayload:dwmapi.dll")
|
||||
#endif // (_MSC_VER < 1300) && !defined(_WTL_NO_DWMAPI_DELAYLOAD)
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Classes in this file:
|
||||
//
|
||||
// CDwm
|
||||
// CDwmImpl<T, TBase>
|
||||
// CDwmWindowT<TBase> - CDwmWindow
|
||||
// CDwmThumbnailT<t_bManaged, TBase>
|
||||
// CDwmThumbnail
|
||||
// CDwmThumbnailHandle
|
||||
// CAeroControlImpl
|
||||
|
||||
|
||||
namespace WTL
|
||||
{
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// CDwm - wrapper for DWM handle
|
||||
|
||||
class CDwm
|
||||
{
|
||||
public:
|
||||
// Data members
|
||||
static int m_nIsDwmSupported;
|
||||
|
||||
// Constructor
|
||||
CDwm()
|
||||
{
|
||||
IsDwmSupported();
|
||||
}
|
||||
|
||||
// Dwm support helper
|
||||
static bool IsDwmSupported()
|
||||
{
|
||||
if(m_nIsDwmSupported == -1)
|
||||
{
|
||||
CStaticDataInitCriticalSectionLock lock;
|
||||
if(FAILED(lock.Lock()))
|
||||
{
|
||||
ATLTRACE2(atlTraceUI, 0, _T("ERROR : Unable to lock critical section in CDwm::IsDwmSupported.\n"));
|
||||
ATLASSERT(FALSE);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(m_nIsDwmSupported == -1)
|
||||
{
|
||||
HMODULE hDwmDLL = ::LoadLibrary(_T("dwmapi.dll"));
|
||||
m_nIsDwmSupported = (hDwmDLL != NULL) ? 1 : 0;
|
||||
if(hDwmDLL != NULL)
|
||||
::FreeLibrary(hDwmDLL);
|
||||
}
|
||||
|
||||
lock.Unlock();
|
||||
}
|
||||
|
||||
ATLASSERT(m_nIsDwmSupported != -1);
|
||||
return (m_nIsDwmSupported == 1);
|
||||
}
|
||||
|
||||
// Operations
|
||||
BOOL DwmIsCompositionEnabled() const
|
||||
{
|
||||
if(!IsDwmSupported()) return FALSE;
|
||||
BOOL bRes = FALSE;
|
||||
return SUCCEEDED(::DwmIsCompositionEnabled(&bRes)) && bRes;
|
||||
}
|
||||
|
||||
BOOL DwmEnableComposition(UINT fEnable)
|
||||
{
|
||||
if(!IsDwmSupported()) return FALSE;
|
||||
return SUCCEEDED(::DwmEnableComposition(fEnable));
|
||||
}
|
||||
|
||||
BOOL DwmEnableMMCSS(BOOL fEnableMMCSS)
|
||||
{
|
||||
if(!IsDwmSupported()) return FALSE;
|
||||
return SUCCEEDED(::DwmEnableMMCSS(fEnableMMCSS));
|
||||
}
|
||||
|
||||
HRESULT DwmGetColorizationColor(DWORD* pcrColorization, BOOL* pfOpaqueBlend)
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
return ::DwmGetColorizationColor(pcrColorization, pfOpaqueBlend);
|
||||
}
|
||||
|
||||
HRESULT DwmFlush()
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
return ::DwmFlush();
|
||||
}
|
||||
};
|
||||
|
||||
__declspec(selectany) int CDwm::m_nIsDwmSupported = -1;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// CDwmImpl - DWM window support
|
||||
|
||||
template <class T, class TBase = CDwm>
|
||||
class CDwmImpl : public TBase
|
||||
{
|
||||
public:
|
||||
HRESULT DwmEnableBlurBehindWindow(const DWM_BLURBEHIND* pBB)
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
T* pT = static_cast<T*>(this);
|
||||
ATLASSERT(::IsWindow(pT->m_hWnd));
|
||||
return ::DwmEnableBlurBehindWindow(pT->m_hWnd, pBB);
|
||||
}
|
||||
|
||||
HRESULT DwmExtendFrameIntoClientArea(const MARGINS* pMargins)
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
T* pT = static_cast<T*>(this);
|
||||
ATLASSERT(::IsWindow(pT->m_hWnd));
|
||||
return ::DwmExtendFrameIntoClientArea(pT->m_hWnd, pMargins);
|
||||
}
|
||||
|
||||
HRESULT DwmExtendFrameIntoEntireClientArea()
|
||||
{
|
||||
MARGINS margins = { -1 };
|
||||
return DwmExtendFrameIntoClientArea(&margins);
|
||||
}
|
||||
|
||||
HRESULT DwmGetCompositionTimingInfo(DWM_TIMING_INFO* pTimingInfo)
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
T* pT = static_cast<T*>(this);
|
||||
ATLASSERT(::IsWindow(pT->m_hWnd));
|
||||
return ::DwmGetCompositionTimingInfo(pT->m_hWnd, pTimingInfo);
|
||||
}
|
||||
|
||||
HRESULT DwmGetWindowAttribute(DWORD dwAttribute, PVOID pvAttribute, DWORD cbAttribute)
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
T* pT = static_cast<T*>(this);
|
||||
ATLASSERT(::IsWindow(pT->m_hWnd));
|
||||
return ::DwmGetWindowAttribute(pT->m_hWnd, dwAttribute, pvAttribute, cbAttribute);
|
||||
}
|
||||
|
||||
HRESULT DwmModifyPreviousDxFrameDuration(INT cRefreshes, BOOL fRelative)
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
T* pT = static_cast<T*>(this);
|
||||
ATLASSERT(::IsWindow(pT->m_hWnd));
|
||||
return ::DwmModifyPreviousDxFrameDuration(pT->m_hWnd, cRefreshes, fRelative);
|
||||
}
|
||||
|
||||
HRESULT DwmSetDxFrameDuration(INT cRefreshes)
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
T* pT = static_cast<T*>(this);
|
||||
ATLASSERT(::IsWindow(pT->m_hWnd));
|
||||
return ::DwmSetDxFrameDuration(pT->m_hWnd, cRefreshes);
|
||||
}
|
||||
|
||||
HRESULT DwmSetPresentParameters(DWM_PRESENT_PARAMETERS* pPresentParams)
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
T* pT = static_cast<T*>(this);
|
||||
ATLASSERT(::IsWindow(pT->m_hWnd));
|
||||
return ::DwmSetPresentParameters(pT->m_hWnd, pPresentParams);
|
||||
}
|
||||
|
||||
HRESULT DwmSetWindowAttribute(DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute)
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
T* pT = static_cast<T*>(this);
|
||||
ATLASSERT(::IsWindow(pT->m_hWnd));
|
||||
return ::DwmSetWindowAttribute(pT->m_hWnd, dwAttribute, pvAttribute, cbAttribute);
|
||||
}
|
||||
|
||||
HRESULT DwmAttachMilContent()
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
T* pT = static_cast<T*>(this);
|
||||
ATLASSERT(::IsWindow(pT->m_hWnd));
|
||||
return ::DwmAttachMilContent(pT->m_hWnd);
|
||||
}
|
||||
|
||||
HRESULT DwmDetachMilContent()
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
T* pT = static_cast<T*>(this);
|
||||
ATLASSERT(::IsWindow(pT->m_hWnd));
|
||||
return ::DwmDetachMilContent(pT->m_hWnd);
|
||||
}
|
||||
};
|
||||
|
||||
template <class TBase>
|
||||
class CDwmWindowT : public TBase, public CDwmImpl<CDwmWindowT< TBase > >
|
||||
{
|
||||
public:
|
||||
CDwmWindowT(HWND hWnd = NULL) : TBase(hWnd)
|
||||
{ }
|
||||
|
||||
CDwmWindowT< TBase >& operator =(HWND hWnd)
|
||||
{
|
||||
m_hWnd = hWnd;
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
typedef CDwmWindowT<ATL::CWindow> CDwmWindow;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// CDwmThumbnail - provides DWM thumbnail support
|
||||
|
||||
template <bool t_bManaged, class TBase = CDwm>
|
||||
class CDwmThumbnailT : public TBase
|
||||
{
|
||||
public:
|
||||
// Data members
|
||||
HTHUMBNAIL m_hThumbnail;
|
||||
|
||||
// Constructor
|
||||
CDwmThumbnailT(HTHUMBNAIL hThumbnail = NULL) : m_hThumbnail(hThumbnail)
|
||||
{
|
||||
}
|
||||
|
||||
~CDwmThumbnailT()
|
||||
{
|
||||
if(t_bManaged && m_hThumbnail != NULL)
|
||||
Unregister();
|
||||
}
|
||||
|
||||
// Operations
|
||||
CDwmThumbnailT<t_bManaged, TBase>& operator =(HTHUMBNAIL hThumbnail)
|
||||
{
|
||||
Attach(hThumbnail);
|
||||
return *this;
|
||||
}
|
||||
|
||||
void Attach(HTHUMBNAIL hThumbnailNew)
|
||||
{
|
||||
if(t_bManaged && m_hThumbnail != NULL && m_hThumbnail != hThumbnailNew)
|
||||
Unregister();
|
||||
m_hThumbnail = hThumbnailNew;
|
||||
}
|
||||
|
||||
HTHUMBNAIL Detach()
|
||||
{
|
||||
HTHUMBNAIL hThumbnail = m_hThumbnail;
|
||||
m_hThumbnail = NULL;
|
||||
return hThumbnail;
|
||||
}
|
||||
|
||||
HRESULT Register(HWND hwndDestination, HWND hwndSource)
|
||||
{
|
||||
ATLASSERT(::IsWindow(hwndDestination));
|
||||
ATLASSERT(::IsWindow(hwndSource));
|
||||
ATLASSERT(m_hThumbnail==NULL);
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
return ::DwmRegisterThumbnail(hwndDestination, hwndSource, &m_hThumbnail);
|
||||
}
|
||||
|
||||
HRESULT Unregister()
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
if(m_hThumbnail == NULL) return S_FALSE;
|
||||
HRESULT Hr = ::DwmUnregisterThumbnail(m_hThumbnail);
|
||||
if(SUCCEEDED(Hr)) m_hThumbnail = NULL;
|
||||
return Hr;
|
||||
}
|
||||
|
||||
operator HTHUMBNAIL() const { return m_hThumbnail; }
|
||||
|
||||
bool IsNull() const { return (m_hThumbnail == NULL); }
|
||||
|
||||
HRESULT UpdateProperties(const DWM_THUMBNAIL_PROPERTIES* ptnProperties)
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
ATLASSERT(m_hThumbnail != NULL);
|
||||
return ::DwmUpdateThumbnailProperties(m_hThumbnail, ptnProperties);
|
||||
}
|
||||
|
||||
// Attributes
|
||||
HRESULT QuerySourceSize(PSIZE pSize)
|
||||
{
|
||||
if(!IsDwmSupported()) return E_NOTIMPL;
|
||||
ATLASSERT(m_hThumbnail != NULL);
|
||||
return ::DwmQueryThumbnailSourceSize(m_hThumbnail, pSize);
|
||||
}
|
||||
};
|
||||
|
||||
typedef CDwmThumbnailT<true, CDwm> CDwmThumbnail;
|
||||
typedef CDwmThumbnailT<false, CDwm> CDwmThumbnailHandle;
|
||||
|
||||
|
||||
#ifdef __ATLTHEME_H__
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// CAeroControlImpl - Base class for controls on Glass
|
||||
|
||||
template <class T, class TBase = ATL::CWindow, class TWinTraits = ATL::CControlWinTraits>
|
||||
class CAeroControlImpl :
|
||||
public CThemeImpl<T>,
|
||||
public CBufferedPaintImpl<T>,
|
||||
public ATL::CWindowImpl<T, TBase, TWinTraits>
|
||||
{
|
||||
public:
|
||||
typedef CThemeImpl<T> _themeClass;
|
||||
typedef CBufferedPaintImpl<T> _baseClass;
|
||||
typedef ATL::CWindowImpl<T, TBase, TWinTraits> _windowClass;
|
||||
|
||||
CAeroControlImpl()
|
||||
{
|
||||
m_PaintParams.dwFlags = BPPF_ERASE;
|
||||
}
|
||||
|
||||
static LPCWSTR GetThemeName()
|
||||
{
|
||||
#ifdef _UNICODE
|
||||
return TBase::GetWndClassName();
|
||||
#else
|
||||
ATLASSERT(!_T("Return UNICODE string of window classname / theme class"));
|
||||
return NULL;
|
||||
#endif // _UNICODE
|
||||
}
|
||||
|
||||
// Message map and handlers
|
||||
BEGIN_MSG_MAP(CAeroControlImpl)
|
||||
MESSAGE_HANDLER(WM_CREATE, OnCreate)
|
||||
MESSAGE_HANDLER(WM_ACTIVATE, OnActivate)
|
||||
CHAIN_MSG_MAP(_themeClass)
|
||||
CHAIN_MSG_MAP(_baseClass)
|
||||
END_MSG_MAP()
|
||||
|
||||
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
|
||||
{
|
||||
T* pT = static_cast<T*>(this);
|
||||
pT->Init();
|
||||
bHandled = FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT OnActivate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
|
||||
{
|
||||
if(IsThemingSupported()) Invalidate(FALSE);
|
||||
bHandled = FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Operations
|
||||
BOOL SubclassWindow(HWND hWnd)
|
||||
{
|
||||
ATLASSERT(m_hWnd == NULL);
|
||||
ATLASSERT(::IsWindow(hWnd));
|
||||
BOOL bRet = _windowClass::SubclassWindow(hWnd);
|
||||
if(bRet) {
|
||||
T* pT = static_cast<T*>(this);
|
||||
pT->Init();
|
||||
}
|
||||
return bRet;
|
||||
}
|
||||
|
||||
// Implementation
|
||||
LRESULT DefWindowProc()
|
||||
{
|
||||
const _ATL_MSG* pMsg = m_pCurrentMsg;
|
||||
LRESULT lRes = 0;
|
||||
if(pMsg != NULL)
|
||||
lRes = DefWindowProc(pMsg->message, pMsg->wParam, pMsg->lParam);
|
||||
return lRes;
|
||||
}
|
||||
|
||||
LRESULT DefWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
T* pT = static_cast<T*>(this);
|
||||
LRESULT lRes = 0;
|
||||
if( ::DwmDefWindowProc(pT->m_hWnd, uMsg, wParam, lParam, &lRes) ) return lRes;
|
||||
return _windowClass::DefWindowProc(uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
void DoBufferedPaint(HDC hDC, RECT& rcPaint)
|
||||
{
|
||||
T* pT = static_cast<T*>(this);
|
||||
HDC hDCPaint = NULL;
|
||||
RECT rcClient = { 0 };
|
||||
GetClientRect(&rcClient);
|
||||
m_BufferedPaint.Begin(hDC, &rcClient, m_dwFormat, &m_PaintParams, &hDCPaint);
|
||||
ATLASSERT(hDCPaint != NULL);
|
||||
pT->DoAeroPaint(hDCPaint, rcClient, rcPaint);
|
||||
m_BufferedPaint.End();
|
||||
}
|
||||
|
||||
void DoPaint(HDC /*hdc*/, RECT& /*rcClient*/)
|
||||
{
|
||||
DefWindowProc();
|
||||
}
|
||||
|
||||
// Overridables
|
||||
void Init()
|
||||
{
|
||||
T* pT = static_cast<T*>(this);
|
||||
SetThemeClassList(pT->GetThemeName());
|
||||
if(m_lpstrThemeClassList != NULL)
|
||||
OpenThemeData();
|
||||
}
|
||||
|
||||
void DoAeroPaint(HDC hDC, RECT& /*rcClient*/, RECT& rcPaint)
|
||||
{
|
||||
DefWindowProc(WM_PAINT, (WPARAM) hDC, 0L);
|
||||
m_BufferedPaint.MakeOpaque(&rcPaint);
|
||||
}
|
||||
};
|
||||
|
||||
#endif // __ATLTHEME_H__
|
||||
|
||||
|
||||
}; // namespace WTL
|
||||
|
||||
|
||||
#endif // __ATLDWM_H__
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
#error atlfind.h is not supported on Windows CE
|
||||
#endif
|
||||
|
@ -897,7 +893,7 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
return (pT->m_bShadowBufferNeeded == TRUE);
|
||||
return (pT->m_bShadowBufferNeeded != FALSE);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atlframe.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
@ -38,6 +34,7 @@
|
|||
// CUpdateUIBase
|
||||
// CUpdateUI<T>
|
||||
// CDynamicUpdateUI<T>
|
||||
// CAutoUpdateUI<T>
|
||||
// CDialogResize<T>
|
||||
// CDoubleBufferImpl<T>
|
||||
// CDoubleBufferWindowImpl<T, TBase, TWinTraits>
|
||||
|
@ -375,29 +372,6 @@ class ATL_NO_VTABLE CFrameWindowImplBase : public ATL::CWindowImplBaseT< TBase,
|
|||
public:
|
||||
DECLARE_FRAME_WND_CLASS(NULL, 0)
|
||||
|
||||
// Data members
|
||||
HWND m_hWndToolBar;
|
||||
HWND m_hWndStatusBar;
|
||||
HWND m_hWndClient;
|
||||
|
||||
HACCEL m_hAccel;
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
HWND m_hWndCECommandBar;
|
||||
#endif // _WIN32_WCE
|
||||
|
||||
struct _AtlToolBarData
|
||||
{
|
||||
WORD wVersion;
|
||||
WORD wWidth;
|
||||
WORD wHeight;
|
||||
WORD wItemCount;
|
||||
//WORD aItems[wItemCount]
|
||||
|
||||
WORD* items()
|
||||
{ return (WORD*)(this+1); }
|
||||
};
|
||||
|
||||
#if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
|
||||
struct _ChevronMenuInfo
|
||||
{
|
||||
|
@ -407,14 +381,25 @@ public:
|
|||
};
|
||||
#endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
|
||||
|
||||
// Data members
|
||||
HWND m_hWndToolBar;
|
||||
HWND m_hWndStatusBar;
|
||||
HWND m_hWndClient;
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
HWND m_hWndCECommandBar;
|
||||
#endif // _WIN32_WCE
|
||||
|
||||
HACCEL m_hAccel;
|
||||
|
||||
// Constructor
|
||||
CFrameWindowImplBase() :
|
||||
#ifdef _WIN32_WCE
|
||||
m_hWndCECommandBar(NULL),
|
||||
#endif // _WIN32_WCE
|
||||
m_hWndToolBar(NULL),
|
||||
m_hWndStatusBar(NULL),
|
||||
m_hWndClient(NULL),
|
||||
#ifdef _WIN32_WCE
|
||||
m_hWndCECommandBar(NULL),
|
||||
#endif // _WIN32_WCE
|
||||
m_hAccel(NULL)
|
||||
{ }
|
||||
|
||||
|
@ -523,7 +508,7 @@ public:
|
|||
// check if font is taller than our bitmaps
|
||||
CFontHandle font = (HFONT)::SendMessage(hWnd, WM_GETFONT, 0, 0L);
|
||||
if(font.IsNull())
|
||||
font = AtlGetDefaultGuiFont();
|
||||
font = (HFONT)::GetStockObject(SYSTEM_FONT);
|
||||
LOGFONT lf = { 0 };
|
||||
font.GetLogFont(lf);
|
||||
WORD cyFontHeight = (WORD)abs(lf.lfHeight);
|
||||
|
@ -825,10 +810,10 @@ public:
|
|||
// resize toolbar
|
||||
if(m_hWndToolBar != NULL && ((DWORD)::GetWindowLong(m_hWndToolBar, GWL_STYLE) & WS_VISIBLE))
|
||||
{
|
||||
if(bResizeBars)
|
||||
if(bResizeBars != FALSE)
|
||||
{
|
||||
::SendMessage(m_hWndToolBar, WM_SIZE, 0, 0);
|
||||
::InvalidateRect(m_hWndToolBar, NULL, FALSE);
|
||||
::InvalidateRect(m_hWndToolBar, NULL, TRUE);
|
||||
}
|
||||
RECT rectTB = { 0 };
|
||||
::GetWindowRect(m_hWndToolBar, &rectTB);
|
||||
|
@ -838,7 +823,7 @@ public:
|
|||
// resize status bar
|
||||
if(m_hWndStatusBar != NULL && ((DWORD)::GetWindowLong(m_hWndStatusBar, GWL_STYLE) & WS_VISIBLE))
|
||||
{
|
||||
if(bResizeBars)
|
||||
if(bResizeBars != FALSE)
|
||||
::SendMessage(m_hWndStatusBar, WM_SIZE, 0, 0);
|
||||
RECT rectSB = { 0 };
|
||||
::GetWindowRect(m_hWndStatusBar, &rectSB);
|
||||
|
@ -2115,6 +2100,11 @@ public:
|
|||
{
|
||||
void* m_lpData;
|
||||
LPTSTR m_lpstrText;
|
||||
struct
|
||||
{
|
||||
WORD m_nIDFirst;
|
||||
WORD m_nIDLast;
|
||||
};
|
||||
};
|
||||
|
||||
bool operator ==(const _AtlUpdateUIData& e) const
|
||||
|
@ -2223,7 +2213,12 @@ public:
|
|||
while(pMap->m_nID != (WORD)-1)
|
||||
{
|
||||
if(pMap->m_wType & UPDUI_MENUPOPUP)
|
||||
{
|
||||
UIUpdateMenuBarElement(pMap->m_nID, pUIData, hMenu);
|
||||
|
||||
if((pUIData->m_wState & UPDUI_RADIO) != 0)
|
||||
::CheckMenuRadioItem(hMenu, pUIData->m_nIDFirst, pUIData->m_nIDLast, pMap->m_nID, MF_BYCOMMAND);
|
||||
}
|
||||
pMap++;
|
||||
pUIData++;
|
||||
}
|
||||
|
@ -2382,6 +2377,46 @@ public:
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
// for menu items
|
||||
BOOL UISetRadioMenuItem(int nID, int nIDFirst, int nIDLast, BOOL bForceUpdate = FALSE)
|
||||
{
|
||||
const _AtlUpdateUIMap* pMap = m_pUIMap;
|
||||
_AtlUpdateUIData* pUIData = m_pUIData;
|
||||
if(pUIData == NULL)
|
||||
return FALSE;
|
||||
|
||||
for( ; pMap->m_nID != (WORD)-1; pMap++, pUIData++)
|
||||
{
|
||||
if(nID == (int)pMap->m_nID)
|
||||
{
|
||||
pUIData->m_wState |= pMap->m_wType;
|
||||
pUIData->m_wState |= UPDUI_RADIO;
|
||||
pUIData->m_nIDFirst = (WORD)nIDFirst;
|
||||
pUIData->m_nIDLast = (WORD)nIDLast;
|
||||
|
||||
if(bForceUpdate)
|
||||
pUIData->m_wState |= pMap->m_wType;
|
||||
if(pUIData->m_wState & pMap->m_wType)
|
||||
m_wDirtyType |= pMap->m_wType;
|
||||
}
|
||||
else if(pMap->m_nID >= nIDFirst && pMap->m_nID <= nIDLast)
|
||||
{
|
||||
if(pUIData->m_wState & UPDUI_RADIO)
|
||||
{
|
||||
pUIData->m_wState &= ~pMap->m_wType;
|
||||
pUIData->m_wState &= ~UPDUI_RADIO;
|
||||
pUIData->m_nIDFirst = 0;
|
||||
pUIData->m_nIDLast = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(pMap->m_nID == nIDLast)
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL UISetText(int nID, LPCTSTR lpstrText, BOOL bForceUpdate = FALSE)
|
||||
{
|
||||
const _AtlUpdateUIMap* pMap = m_pUIMap;
|
||||
|
@ -2922,6 +2957,194 @@ public:
|
|||
};
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// CAutoUpdateUI : Automatic mapping of UI elements
|
||||
|
||||
template <class T>
|
||||
class CAutoUpdateUI : public CDynamicUpdateUI<T>
|
||||
{
|
||||
public:
|
||||
LPCTSTR UIGetText(int nID)
|
||||
{
|
||||
for(int i = 0; i < m_arrUIMap.GetSize(); i++)
|
||||
{
|
||||
if(m_arrUIMap[i].m_nID == nID)
|
||||
return m_arrUIData[i].m_lpstrText;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Element
|
||||
template <WORD t_wType>
|
||||
bool UIAddElement(UINT nID)
|
||||
{
|
||||
// check for existing UI map element
|
||||
for(int i = 0; i < m_arrUIMap.GetSize(); i++)
|
||||
{
|
||||
if(m_arrUIMap[i].m_nID == nID)
|
||||
{
|
||||
// set requested type
|
||||
m_arrUIMap[i].m_wType |= t_wType;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Add element to UI map with requested type
|
||||
return UIAddUpdateElement((WORD)nID, t_wType);
|
||||
}
|
||||
|
||||
template <WORD t_wType>
|
||||
bool UIRemoveElement(UINT nID)
|
||||
{
|
||||
for(int i = 0; i < m_arrUIMap.GetSize(); i++)
|
||||
{
|
||||
if(m_arrUIMap[i].m_nID == nID) // matching UI map element
|
||||
{
|
||||
WORD wType = m_arrUIMap[i].m_wType & ~t_wType;
|
||||
if (wType) // has other types
|
||||
{
|
||||
m_arrUIMap[i].m_wType = wType; // keep other types
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return UIRemoveUpdateElement((WORD)nID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Menu
|
||||
bool UIAddMenu(HMENU hMenu, bool bSetText = false)
|
||||
{
|
||||
#if defined(_WIN32_WCE) && (_ATL_VER >= 0x0800)
|
||||
using ATL::GetMenuString;
|
||||
#endif
|
||||
ATLASSERT(::IsMenu(hMenu));
|
||||
MENUITEMINFO mii = {sizeof(MENUITEMINFO), MIIM_TYPE | MIIM_ID | MIIM_SUBMENU};
|
||||
|
||||
// Complete the UI map
|
||||
for (INT uItem = 0; CMenuHandle(hMenu).GetMenuItemInfo(uItem, TRUE, &mii); uItem++)
|
||||
{
|
||||
if(mii.hSubMenu)
|
||||
{
|
||||
// Add submenu to UI map
|
||||
UIAddMenu(mii.hSubMenu, bSetText);
|
||||
}
|
||||
else if (mii.wID)
|
||||
{
|
||||
// Add element to UI map
|
||||
UIAddElement<UPDUI_MENUPOPUP>(mii.wID);
|
||||
#if !defined(_WIN32_WCE) || (_ATL_VER >= 0x0800)
|
||||
if (bSetText)
|
||||
{
|
||||
TCHAR sText[64] = { 0 };
|
||||
if (GetMenuString(hMenu, uItem, sText, 64, MF_BYPOSITION))
|
||||
UISetText(mii.wID, sText);
|
||||
}
|
||||
#else
|
||||
bSetText;
|
||||
#endif // !defined(_WIN32_WCE) || (_ATL_VER >= 0x0800)
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool UIAddMenu(UINT uID, bool bSetText = false)
|
||||
{
|
||||
CMenu menu;
|
||||
ATLVERIFY(menu.LoadMenu(uID));
|
||||
return UIAddMenu(menu, bSetText);
|
||||
}
|
||||
|
||||
// ToolBar
|
||||
#ifndef BTNS_SEP
|
||||
#define BTNS_SEP TBSTYLE_SEP
|
||||
#endif // BTNS_SEP compatibility
|
||||
|
||||
#if !defined(_WIN32_WCE) || (defined(_AUTOUI_CE_TOOLBAR) && defined(TBIF_BYINDEX))
|
||||
bool UIAddToolBar(HWND hWndToolBar)
|
||||
{
|
||||
ATLASSERT(::IsWindow(hWndToolBar));
|
||||
TBBUTTONINFO tbbi = {sizeof TBBUTTONINFO, TBIF_COMMAND | TBIF_STYLE | TBIF_BYINDEX};
|
||||
|
||||
// Add toolbar buttons
|
||||
for (int uItem = 0; ::SendMessage(hWndToolBar, TB_GETBUTTONINFO, uItem, (LPARAM)&tbbi) != -1; uItem++)
|
||||
{
|
||||
if (tbbi.fsStyle ^ BTNS_SEP)
|
||||
UIAddElement<UPDUI_TOOLBAR>(tbbi.idCommand);
|
||||
}
|
||||
|
||||
// Add embedded controls if any
|
||||
if (::GetWindow(hWndToolBar, GW_CHILD))
|
||||
UIAddChildWindowContainer(hWndToolBar);
|
||||
|
||||
return (CUpdateUIBase::UIAddToolBar(hWndToolBar) != FALSE);
|
||||
}
|
||||
#endif // !defined(_WIN32_WCE) || (defined(_AUTOUI_CE_TOOLBAR) && defined(TBIF_BYINDEX))
|
||||
|
||||
// Container
|
||||
bool UIAddChildWindowContainer(HWND hWnd)
|
||||
{
|
||||
ATLASSERT(::IsWindow(hWnd));
|
||||
|
||||
// Add children controls if any
|
||||
for (ATL::CWindow wCtl = ::GetWindow(hWnd, GW_CHILD); wCtl.IsWindow(); wCtl = wCtl.GetWindow(GW_HWNDNEXT))
|
||||
{
|
||||
if (int id = wCtl.GetDlgCtrlID())
|
||||
UIAddElement<UPDUI_CHILDWINDOW>(id);
|
||||
}
|
||||
|
||||
return (CUpdateUIBase::UIAddChildWindowContainer(hWnd) != FALSE);
|
||||
}
|
||||
|
||||
// StatusBar
|
||||
BOOL UIUpdateStatusBar(BOOL bForceUpdate = FALSE)
|
||||
{
|
||||
if(!(m_wDirtyType & UPDUI_STATUSBAR) && !bForceUpdate)
|
||||
return TRUE;
|
||||
|
||||
for(int i = 0; i < m_arrUIMap.GetSize(); i++)
|
||||
{
|
||||
for(int e = 0; e < m_UIElements.GetSize(); e++)
|
||||
{
|
||||
if((m_UIElements[e].m_wType == UPDUI_STATUSBAR) &&
|
||||
(m_arrUIMap[i].m_wType & UPDUI_STATUSBAR) &&
|
||||
(m_arrUIData[i].m_wState & UPDUI_STATUSBAR))
|
||||
{
|
||||
UIUpdateStatusBarElement(m_arrUIMap[i].m_nID, &m_arrUIData[i], m_UIElements[e].m_hWnd);
|
||||
m_arrUIData[i].m_wState &= ~UPDUI_STATUSBAR;
|
||||
if(m_arrUIData[i].m_wState & UPDUI_TEXT)
|
||||
m_arrUIData[i].m_wState &= ~UPDUI_TEXT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_wDirtyType &= ~UPDUI_STATUSBAR;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool UIAddStatusBar(HWND hWndStatusBar, INT nPanes = 1)
|
||||
{
|
||||
ATLASSERT(::IsWindow(hWndStatusBar));
|
||||
|
||||
// Add StatusBar panes
|
||||
for (int iPane = 0; iPane < nPanes; iPane++)
|
||||
UIAddElement<UPDUI_STATUSBAR>(ID_DEFAULT_PANE + iPane);
|
||||
|
||||
return (CUpdateUIBase::UIAddStatusBar(hWndStatusBar) != FALSE);
|
||||
}
|
||||
|
||||
// UI Map used if derived class has none
|
||||
BEGIN_UPDATE_UI_MAP(CAutoUpdateUI)
|
||||
END_UPDATE_UI_MAP()
|
||||
};
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// CDialogResize - provides support for resizing dialog controls
|
||||
// (works for any window that has child controls)
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atlgdi.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
@ -411,44 +407,60 @@ public:
|
|||
|
||||
void SetHeight(LONG nPointSize, HDC hDC = NULL)
|
||||
{
|
||||
HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL);
|
||||
// For MM_TEXT mapping mode
|
||||
lfHeight = -::MulDiv(nPointSize, ::GetDeviceCaps(hDC, LOGPIXELSY), 72);
|
||||
lfHeight = -::MulDiv(nPointSize, ::GetDeviceCaps(hDC1, LOGPIXELSY), 72);
|
||||
if(hDC == NULL)
|
||||
::ReleaseDC(NULL, hDC1);
|
||||
}
|
||||
|
||||
LONG GetHeight(HDC hDC = NULL) const
|
||||
{
|
||||
HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL);
|
||||
// For MM_TEXT mapping mode
|
||||
return ::MulDiv(-lfHeight, 72, ::GetDeviceCaps(hDC, LOGPIXELSY));
|
||||
LONG nPointSize = ::MulDiv(-lfHeight, 72, ::GetDeviceCaps(hDC1, LOGPIXELSY));
|
||||
if(hDC == NULL)
|
||||
::ReleaseDC(NULL, hDC1);
|
||||
|
||||
return nPointSize;
|
||||
}
|
||||
|
||||
LONG GetDeciPointHeight(HDC hDC = NULL) const
|
||||
{
|
||||
HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL);
|
||||
#ifndef _WIN32_WCE
|
||||
POINT ptOrg = { 0, 0 };
|
||||
::DPtoLP(hDC, &ptOrg, 1);
|
||||
::DPtoLP(hDC1, &ptOrg, 1);
|
||||
POINT pt = { 0, 0 };
|
||||
pt.y = abs(lfHeight) + ptOrg.y;
|
||||
::LPtoDP(hDC,&pt,1);
|
||||
return ::MulDiv(pt.y, 720, ::GetDeviceCaps(hDC, LOGPIXELSY)); // 72 points/inch, 10 decipoints/point
|
||||
::LPtoDP(hDC1, &pt,1);
|
||||
LONG nDeciPoint = ::MulDiv(pt.y, 720, ::GetDeviceCaps(hDC1, LOGPIXELSY)); // 72 points/inch, 10 decipoints/point
|
||||
#else // CE specific
|
||||
// DP and LP are always the same on CE
|
||||
return ::MulDiv(abs(lfHeight), 720, ::GetDeviceCaps(hDC, LOGPIXELSY)); // 72 points/inch, 10 decipoints/point
|
||||
LONG nDeciPoint = ::MulDiv(abs(lfHeight), 720, ::GetDeviceCaps(hDC1, LOGPIXELSY)); // 72 points/inch, 10 decipoints/point
|
||||
#endif // _WIN32_WCE
|
||||
if(hDC == NULL)
|
||||
::ReleaseDC(NULL, hDC1);
|
||||
|
||||
return nDeciPoint;
|
||||
}
|
||||
|
||||
void SetHeightFromDeciPoint(LONG nDeciPtHeight, HDC hDC = NULL)
|
||||
{
|
||||
HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL);
|
||||
#ifndef _WIN32_WCE
|
||||
POINT pt = { 0, 0 };
|
||||
pt.y = ::MulDiv(::GetDeviceCaps(hDC, LOGPIXELSY), nDeciPtHeight, 720); // 72 points/inch, 10 decipoints/point
|
||||
::DPtoLP(hDC, &pt, 1);
|
||||
pt.y = ::MulDiv(::GetDeviceCaps(hDC1, LOGPIXELSY), nDeciPtHeight, 720); // 72 points/inch, 10 decipoints/point
|
||||
::DPtoLP(hDC1, &pt, 1);
|
||||
POINT ptOrg = { 0, 0 };
|
||||
::DPtoLP(hDC, &ptOrg, 1);
|
||||
::DPtoLP(hDC1, &ptOrg, 1);
|
||||
lfHeight = -abs(pt.y - ptOrg.y);
|
||||
#else // CE specific
|
||||
// DP and LP are always the same on CE
|
||||
lfHeight = -abs(::MulDiv(::GetDeviceCaps(hDC, LOGPIXELSY), nDeciPtHeight, 720)); // 72 points/inch, 10 decipoints/point
|
||||
lfHeight = -abs(::MulDiv(::GetDeviceCaps(hDC1, LOGPIXELSY), nDeciPtHeight, 720)); // 72 points/inch, 10 decipoints/point
|
||||
#endif // _WIN32_WCE
|
||||
if(hDC == NULL)
|
||||
::ReleaseDC(NULL, hDC1);
|
||||
}
|
||||
|
||||
#ifndef _WIN32_WCE
|
||||
|
@ -2321,6 +2333,31 @@ public:
|
|||
ATLASSERT(m_hDC != NULL);
|
||||
return ::GradientFill(m_hDC, pVertices, nVertices, pMeshElements, nMeshElements, dwMode);
|
||||
}
|
||||
|
||||
BOOL GradientFillRect(RECT& rect, COLORREF clr1, COLORREF clr2, bool bHorizontal)
|
||||
{
|
||||
ATLASSERT(m_hDC != NULL);
|
||||
|
||||
TRIVERTEX arrTvx[2] = { { 0 }, { 0 } };
|
||||
|
||||
arrTvx[0].x = rect.left;
|
||||
arrTvx[0].y = rect.top;
|
||||
arrTvx[0].Red = MAKEWORD(0, GetRValue(clr1));
|
||||
arrTvx[0].Green = MAKEWORD(0, GetGValue(clr1));
|
||||
arrTvx[0].Blue = MAKEWORD(0, GetBValue(clr1));
|
||||
arrTvx[0].Alpha = 0;
|
||||
|
||||
arrTvx[1].x = rect.right;
|
||||
arrTvx[1].y = rect.bottom;
|
||||
arrTvx[1].Red = MAKEWORD(0, GetRValue(clr2));
|
||||
arrTvx[1].Green = MAKEWORD(0, GetGValue(clr2));
|
||||
arrTvx[1].Blue = MAKEWORD(0, GetBValue(clr2));
|
||||
arrTvx[1].Alpha = 0;
|
||||
|
||||
GRADIENT_RECT gr = { 0, 1 };
|
||||
|
||||
return ::GradientFill(m_hDC, arrTvx, 2, &gr, 1, bHorizontal ? GRADIENT_FILL_RECT_H : GRADIENT_FILL_RECT_V);
|
||||
}
|
||||
#endif // !defined(_WIN32_WCE) || (_WIN32_WCE >= 420)
|
||||
|
||||
#if !defined(_WIN32_WCE) || (_WIN32_WCE > 0x500)
|
||||
|
@ -3646,7 +3683,7 @@ struct DIBINFO16 // a BITMAPINFO with 2 additional color bitfields
|
|||
DWORD dw[3] = DIBINFO16_BITFIELDS ;
|
||||
|
||||
bmiHeader = bmih;
|
||||
memcpy(bmiColors, dw, 3 * sizeof(DWORD));
|
||||
SecureHelper::memcpy_x(bmiColors, sizeof(bmiColors), dw, 3 * sizeof(DWORD));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -3710,18 +3747,21 @@ inline int AtlGetDibNumColors(LPBITMAPINFOHEADER pbmih)
|
|||
|
||||
inline HBITMAP AtlGetDibBitmap(LPBITMAPINFO pbmi)
|
||||
{
|
||||
HBITMAP hbm = NULL;
|
||||
CDC dc(NULL);
|
||||
void * pBits = NULL;
|
||||
void* pBits = NULL;
|
||||
|
||||
LPBYTE pDibBits = (LPBYTE)pbmi + sizeof(BITMAPINFOHEADER) + AtlGetDibColorTableSize(&pbmi->bmiHeader) * sizeof(RGBQUAD);
|
||||
if (hbm = CreateDIBSection(dc, pbmi, DIB_RGB_COLORS, &pBits, NULL, NULL))
|
||||
memcpy(pBits, pDibBits, pbmi->bmiHeader.biSizeImage);
|
||||
HBITMAP hbm = CreateDIBSection(dc, pbmi, DIB_RGB_COLORS, &pBits, NULL, NULL);
|
||||
if (hbm != NULL)
|
||||
{
|
||||
int cbBits = pbmi->bmiHeader.biWidth * pbmi->bmiHeader.biHeight * pbmi->bmiHeader.biBitCount / 8;
|
||||
SecureHelper::memcpy_x(pBits, cbBits, pDibBits, pbmi->bmiHeader.biSizeImage);
|
||||
}
|
||||
|
||||
return hbm;
|
||||
}
|
||||
|
||||
inline HBITMAP AtlCopyBitmap(HBITMAP hbm , SIZE sizeDst, bool bAsBitmap = false)
|
||||
inline HBITMAP AtlCopyBitmap(HBITMAP hbm, SIZE sizeDst, bool bAsBitmap = false)
|
||||
{
|
||||
CDC hdcSrc = CreateCompatibleDC(NULL);
|
||||
CDC hdcDst = CreateCompatibleDC(NULL);
|
||||
|
@ -3786,13 +3826,13 @@ inline HLOCAL AtlCreatePackedDib16(HBITMAP hbm, SIZE size)
|
|||
}
|
||||
}
|
||||
|
||||
if((bOK == TRUE) && (AtlIsDib16(&ds.dsBmih) == TRUE) && (ds.dsBm.bmBits != NULL))
|
||||
if((bOK != FALSE) && (AtlIsDib16(&ds.dsBmih) != FALSE) && (ds.dsBm.bmBits != NULL))
|
||||
{
|
||||
pDib = (LPBYTE)LocalAlloc(LMEM_ZEROINIT, sizeof(DIBINFO16) + ds.dsBmih.biSizeImage);
|
||||
if (pDib != NULL)
|
||||
{
|
||||
memcpy(pDib , &ds.dsBmih, sizeof(DIBINFO16));
|
||||
memcpy(pDib + sizeof(DIBINFO16), ds.dsBm.bmBits, ds.dsBmih.biSizeImage);
|
||||
SecureHelper::memcpy_x(pDib, sizeof(DIBINFO16) + ds.dsBmih.biSizeImage, &ds.dsBmih, sizeof(DIBINFO16));
|
||||
SecureHelper::memcpy_x(pDib + sizeof(DIBINFO16), ds.dsBmih.biSizeImage, ds.dsBm.bmBits, ds.dsBmih.biSizeImage);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3806,9 +3846,10 @@ inline bool AtlSetClipboardDib16(HBITMAP hbm, SIZE size, HWND hWnd)
|
|||
{
|
||||
ATLASSERT(::IsWindow(hWnd));
|
||||
BOOL bOK = OpenClipboard(hWnd);
|
||||
if (bOK == TRUE)
|
||||
if (bOK != FALSE)
|
||||
{
|
||||
if ((bOK = EmptyClipboard()) == TRUE)
|
||||
bOK = EmptyClipboard();
|
||||
if (bOK != FALSE)
|
||||
{
|
||||
HLOCAL hDib = AtlCreatePackedDib16(hbm, size);
|
||||
if (hDib != NULL)
|
||||
|
@ -3825,14 +3866,14 @@ inline bool AtlSetClipboardDib16(HBITMAP hbm, SIZE size, HWND hWnd)
|
|||
CloseClipboard();
|
||||
}
|
||||
|
||||
return bOK == TRUE;
|
||||
return (bOK != FALSE);
|
||||
}
|
||||
|
||||
inline HBITMAP AtlGetClipboardDib(HWND hWnd)
|
||||
{
|
||||
ATLASSERT(::IsWindow(hWnd) == TRUE);
|
||||
ATLASSERT(::IsWindow(hWnd) != FALSE);
|
||||
HBITMAP hbm = NULL;
|
||||
if (OpenClipboard(hWnd) == TRUE)
|
||||
if (OpenClipboard(hWnd) != FALSE)
|
||||
{
|
||||
LPBITMAPINFO pbmi = (LPBITMAPINFO)GetClipboardData(CF_DIB);
|
||||
if (pbmi != NULL)
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atlmisc.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
@ -55,22 +51,6 @@
|
|||
// CFindFile
|
||||
//
|
||||
// Global functions:
|
||||
// AtlLoadAccelerators()
|
||||
// AtlLoadMenu()
|
||||
// AtlLoadBitmap()
|
||||
// AtlLoadSysBitmap()
|
||||
// AtlLoadCursor()
|
||||
// AtlLoadSysCursor()
|
||||
// AtlLoadIcon()
|
||||
// AtlLoadSysIcon()
|
||||
// AtlLoadBitmapImage()
|
||||
// AtlLoadCursorImage()
|
||||
// AtlLoadIconImage()
|
||||
// AtlLoadSysBitmapImage()
|
||||
// AtlLoadSysCursorImage()
|
||||
// AtlLoadSysIconImage()
|
||||
// AtlLoadString()
|
||||
//
|
||||
// AtlGetStockPen()
|
||||
// AtlGetStockBrush()
|
||||
// AtlGetStockFont()
|
||||
|
@ -2481,18 +2461,6 @@ protected:
|
|||
return (*p == ch) ? p : NULL;
|
||||
}
|
||||
|
||||
static const TCHAR* _cstrrchr(const TCHAR* p, TCHAR ch)
|
||||
{
|
||||
const TCHAR* lpsz = NULL;
|
||||
while (*p != 0)
|
||||
{
|
||||
if (*p == ch)
|
||||
lpsz = p;
|
||||
p = ::CharNext(p);
|
||||
}
|
||||
return lpsz;
|
||||
}
|
||||
|
||||
static TCHAR* _cstrrev(TCHAR* pStr)
|
||||
{
|
||||
// optimize NULL, zero-length, and single-char case
|
||||
|
@ -2601,20 +2569,6 @@ protected:
|
|||
return (p[n] != 0) ? &p[n] : NULL;
|
||||
}
|
||||
|
||||
static int _cstrisdigit(TCHAR ch)
|
||||
{
|
||||
WORD type;
|
||||
GetStringTypeEx(GetThreadLocale(), CT_CTYPE1, &ch, 1, &type);
|
||||
return (type & C1_DIGIT) == C1_DIGIT;
|
||||
}
|
||||
|
||||
static int _cstrisspace(TCHAR ch)
|
||||
{
|
||||
WORD type;
|
||||
GetStringTypeEx(GetThreadLocale(), CT_CTYPE1, &ch, 1, &type);
|
||||
return (type & C1_SPACE) == C1_SPACE;
|
||||
}
|
||||
|
||||
static int _cstrcmp(const TCHAR* pstrOne, const TCHAR* pstrOther)
|
||||
{
|
||||
return lstrcmp(pstrOne, pstrOther);
|
||||
|
@ -2638,45 +2592,12 @@ protected:
|
|||
ATLASSERT(nRet != 0);
|
||||
return nRet - 2; // convert to strcmp convention
|
||||
}
|
||||
|
||||
static int _cstrtoi(const TCHAR* nptr)
|
||||
{
|
||||
int c; // current char
|
||||
int total; // current total
|
||||
int sign; // if '-', then negative, otherwise positive
|
||||
|
||||
while (_cstrisspace(*nptr))
|
||||
++nptr;
|
||||
|
||||
c = (int)(_TUCHAR)*nptr++;
|
||||
sign = c; // save sign indication
|
||||
if (c == _T('-') || c == _T('+'))
|
||||
c = (int)(_TUCHAR)*nptr++; // skip sign
|
||||
|
||||
total = 0;
|
||||
|
||||
while (_cstrisdigit((TCHAR)c))
|
||||
{
|
||||
total = 10 * total + (c - '0'); // accumulate digit
|
||||
c = (int)(_TUCHAR)*nptr++; // get next char
|
||||
}
|
||||
|
||||
if (sign == '-')
|
||||
return -total;
|
||||
else
|
||||
return total; // return result, negated if necessary
|
||||
}
|
||||
#else // !_ATL_MIN_CRT
|
||||
static const TCHAR* _cstrchr(const TCHAR* p, TCHAR ch)
|
||||
{
|
||||
return _tcschr(p, ch);
|
||||
}
|
||||
|
||||
static const TCHAR* _cstrrchr(const TCHAR* p, TCHAR ch)
|
||||
{
|
||||
return _tcsrchr(p, ch);
|
||||
}
|
||||
|
||||
static TCHAR* _cstrrev(TCHAR* pStr)
|
||||
{
|
||||
return _tcsrev(pStr);
|
||||
|
@ -2702,16 +2623,6 @@ protected:
|
|||
return _tcspbrk(p, lpszCharSet);
|
||||
}
|
||||
|
||||
static int _cstrisdigit(TCHAR ch)
|
||||
{
|
||||
return _istdigit(ch);
|
||||
}
|
||||
|
||||
static int _cstrisspace(TCHAR ch)
|
||||
{
|
||||
return _istspace((_TUCHAR)ch);
|
||||
}
|
||||
|
||||
static int _cstrcmp(const TCHAR* pstrOne, const TCHAR* pstrOther)
|
||||
{
|
||||
return _tcscmp(pstrOne, pstrOther);
|
||||
|
@ -2733,12 +2644,27 @@ protected:
|
|||
return _tcsicoll(pstrOne, pstrOther);
|
||||
}
|
||||
#endif // !_WIN32_WCE
|
||||
#endif // !_ATL_MIN_CRT
|
||||
|
||||
static const TCHAR* _cstrrchr(const TCHAR* p, TCHAR ch)
|
||||
{
|
||||
return MinCrtHelper::_strrchr(p, ch);
|
||||
}
|
||||
|
||||
static int _cstrisdigit(TCHAR ch)
|
||||
{
|
||||
return MinCrtHelper::_isdigit(ch);
|
||||
}
|
||||
|
||||
static int _cstrisspace(TCHAR ch)
|
||||
{
|
||||
return MinCrtHelper::_isspace(ch);
|
||||
}
|
||||
|
||||
static int _cstrtoi(const TCHAR* nptr)
|
||||
{
|
||||
return _ttoi(nptr);
|
||||
return MinCrtHelper::_atoi(nptr);
|
||||
}
|
||||
#endif // !_ATL_MIN_CRT
|
||||
|
||||
static const TCHAR* _cstrchr_db(const TCHAR* p, TCHAR ch1, TCHAR ch2)
|
||||
{
|
||||
|
@ -3066,8 +2992,8 @@ public:
|
|||
BOOL ReadFromRegistry(LPCTSTR lpstrRegKey)
|
||||
{
|
||||
T* pT = static_cast<T*>(this);
|
||||
ATL::CRegKey rkParent;
|
||||
ATL::CRegKey rk;
|
||||
CRegKeyEx rkParent;
|
||||
CRegKeyEx rk;
|
||||
|
||||
LONG lRet = rkParent.Open(HKEY_CURRENT_USER, lpstrRegKey);
|
||||
if(lRet != ERROR_SUCCESS)
|
||||
|
@ -3077,11 +3003,7 @@ public:
|
|||
return FALSE;
|
||||
|
||||
DWORD dwRet = 0;
|
||||
#if (_ATL_VER >= 0x0700)
|
||||
lRet = rk.QueryDWORDValue(pT->GetRegCountName(), dwRet);
|
||||
#else
|
||||
lRet = rk.QueryValue(dwRet, pT->GetRegCountName());
|
||||
#endif
|
||||
if(lRet != ERROR_SUCCESS)
|
||||
return FALSE;
|
||||
SetMaxEntries(dwRet);
|
||||
|
@ -3095,13 +3017,8 @@ public:
|
|||
{
|
||||
TCHAR szBuff[m_cchItemNameLen] = { 0 };
|
||||
SecureHelper::wsprintf_x(szBuff, m_cchItemNameLen, pT->GetRegItemName(), nItem);
|
||||
#if (_ATL_VER >= 0x0700)
|
||||
ULONG ulCount = t_cchItemLen;
|
||||
lRet = rk.QueryStringValue(szBuff, szRetString, &ulCount);
|
||||
#else
|
||||
DWORD dwCount = t_cchItemLen * sizeof(TCHAR);
|
||||
lRet = rk.QueryValue(szRetString, szBuff, &dwCount);
|
||||
#endif
|
||||
if(lRet == ERROR_SUCCESS)
|
||||
{
|
||||
SecureHelper::strcpy_x(de.szDocName, _countof(de.szDocName), szRetString);
|
||||
|
@ -3119,8 +3036,8 @@ public:
|
|||
{
|
||||
T* pT = static_cast<T*>(this);
|
||||
pT; // avoid level 4 warning
|
||||
ATL::CRegKey rkParent;
|
||||
ATL::CRegKey rk;
|
||||
CRegKeyEx rkParent;
|
||||
CRegKeyEx rk;
|
||||
|
||||
LONG lRet = rkParent.Create(HKEY_CURRENT_USER, lpstrRegKey);
|
||||
if(lRet != ERROR_SUCCESS)
|
||||
|
@ -3129,11 +3046,7 @@ public:
|
|||
if(lRet != ERROR_SUCCESS)
|
||||
return FALSE;
|
||||
|
||||
#if (_ATL_VER >= 0x0700)
|
||||
lRet = rk.SetDWORDValue(pT->GetRegCountName(), m_nMaxEntries);
|
||||
#else
|
||||
lRet = rk.SetValue(m_nMaxEntries, pT->GetRegCountName());
|
||||
#endif
|
||||
ATLASSERT(lRet == ERROR_SUCCESS);
|
||||
|
||||
// set new values
|
||||
|
@ -3144,11 +3057,7 @@ public:
|
|||
SecureHelper::wsprintf_x(szBuff, m_cchItemNameLen, pT->GetRegItemName(), nItem);
|
||||
TCHAR szDocName[t_cchItemLen] = { 0 };
|
||||
GetFromList(t_nFirstID + nItem - 1, szDocName, t_cchItemLen);
|
||||
#if (_ATL_VER >= 0x0700)
|
||||
lRet = rk.SetStringValue(szBuff, szDocName);
|
||||
#else
|
||||
lRet = rk.SetValue(szDocName, szBuff);
|
||||
#endif
|
||||
ATLASSERT(lRet == ERROR_SUCCESS);
|
||||
}
|
||||
|
||||
|
@ -3367,7 +3276,7 @@ public:
|
|||
return FALSE;
|
||||
|
||||
// find the last dot
|
||||
LPTSTR pstrDot = (LPTSTR)_cstrrchr(szBuff, _T('.'));
|
||||
LPTSTR pstrDot = MinCrtHelper::_strrchr(szBuff, _T('.'));
|
||||
if(pstrDot != NULL)
|
||||
*pstrDot = 0;
|
||||
|
||||
|
@ -3616,8 +3525,8 @@ public:
|
|||
else
|
||||
{
|
||||
// find the last forward or backward whack
|
||||
LPTSTR pstrBack = (LPTSTR)_cstrrchr(m_lpszRoot, _T('\\'));
|
||||
LPTSTR pstrFront = (LPTSTR)_cstrrchr(m_lpszRoot, _T('/'));
|
||||
LPTSTR pstrBack = MinCrtHelper::_strrchr(m_lpszRoot, _T('\\'));
|
||||
LPTSTR pstrFront = MinCrtHelper::_strrchr(m_lpszRoot, _T('/'));
|
||||
|
||||
if(pstrFront != NULL || pstrBack != NULL)
|
||||
{
|
||||
|
@ -3665,193 +3574,9 @@ public:
|
|||
m_hFind = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// Helper
|
||||
static const TCHAR* _cstrrchr(const TCHAR* p, TCHAR ch)
|
||||
{
|
||||
#ifdef _ATL_MIN_CRT
|
||||
const TCHAR* lpsz = NULL;
|
||||
while (*p != 0)
|
||||
{
|
||||
if (*p == ch)
|
||||
lpsz = p;
|
||||
p = ::CharNext(p);
|
||||
}
|
||||
return lpsz;
|
||||
#else // !_ATL_MIN_CRT
|
||||
return _tcsrchr(p, ch);
|
||||
#endif // !_ATL_MIN_CRT
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Global functions for loading resources
|
||||
|
||||
inline HACCEL AtlLoadAccelerators(ATL::_U_STRINGorID table)
|
||||
{
|
||||
return ::LoadAccelerators(ModuleHelper::GetResourceInstance(), table.m_lpstr);
|
||||
}
|
||||
|
||||
inline HMENU AtlLoadMenu(ATL::_U_STRINGorID menu)
|
||||
{
|
||||
return ::LoadMenu(ModuleHelper::GetResourceInstance(), menu.m_lpstr);
|
||||
}
|
||||
|
||||
inline HBITMAP AtlLoadBitmap(ATL::_U_STRINGorID bitmap)
|
||||
{
|
||||
return ::LoadBitmap(ModuleHelper::GetResourceInstance(), bitmap.m_lpstr);
|
||||
}
|
||||
|
||||
#ifdef OEMRESOURCE
|
||||
inline HBITMAP AtlLoadSysBitmap(ATL::_U_STRINGorID bitmap)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
WORD wID = (WORD)bitmap.m_lpstr;
|
||||
ATLASSERT(wID >= 32734 && wID <= 32767);
|
||||
#endif // _DEBUG
|
||||
return ::LoadBitmap(NULL, bitmap.m_lpstr);
|
||||
}
|
||||
#endif // OEMRESOURCE
|
||||
|
||||
inline HCURSOR AtlLoadCursor(ATL::_U_STRINGorID cursor)
|
||||
{
|
||||
return ::LoadCursor(ModuleHelper::GetResourceInstance(), cursor.m_lpstr);
|
||||
}
|
||||
|
||||
inline HCURSOR AtlLoadSysCursor(LPCTSTR lpCursorName)
|
||||
{
|
||||
#if (WINVER >= 0x0500)
|
||||
ATLASSERT(lpCursorName == IDC_ARROW || lpCursorName == IDC_IBEAM || lpCursorName == IDC_WAIT ||
|
||||
lpCursorName == IDC_CROSS || lpCursorName == IDC_UPARROW || lpCursorName == IDC_SIZE ||
|
||||
lpCursorName == IDC_ICON || lpCursorName == IDC_SIZENWSE || lpCursorName == IDC_SIZENESW ||
|
||||
lpCursorName == IDC_SIZEWE || lpCursorName == IDC_SIZENS || lpCursorName == IDC_SIZEALL ||
|
||||
lpCursorName == IDC_NO || lpCursorName == IDC_APPSTARTING || lpCursorName == IDC_HELP ||
|
||||
lpCursorName == IDC_HAND);
|
||||
#else // !(WINVER >= 0x0500)
|
||||
ATLASSERT(lpCursorName == IDC_ARROW || lpCursorName == IDC_IBEAM || lpCursorName == IDC_WAIT ||
|
||||
lpCursorName == IDC_CROSS || lpCursorName == IDC_UPARROW || lpCursorName == IDC_SIZE ||
|
||||
lpCursorName == IDC_ICON || lpCursorName == IDC_SIZENWSE || lpCursorName == IDC_SIZENESW ||
|
||||
lpCursorName == IDC_SIZEWE || lpCursorName == IDC_SIZENS || lpCursorName == IDC_SIZEALL ||
|
||||
lpCursorName == IDC_NO || lpCursorName == IDC_APPSTARTING || lpCursorName == IDC_HELP);
|
||||
#endif // !(WINVER >= 0x0500)
|
||||
return ::LoadCursor(NULL, lpCursorName);
|
||||
}
|
||||
|
||||
inline HICON AtlLoadIcon(ATL::_U_STRINGorID icon)
|
||||
{
|
||||
return ::LoadIcon(ModuleHelper::GetResourceInstance(), icon.m_lpstr);
|
||||
}
|
||||
|
||||
#ifndef _WIN32_WCE
|
||||
inline HICON AtlLoadSysIcon(LPCTSTR lpIconName)
|
||||
{
|
||||
#if (WINVER >= 0x0600)
|
||||
ATLASSERT(lpIconName == IDI_APPLICATION || lpIconName == IDI_ASTERISK || lpIconName == IDI_EXCLAMATION ||
|
||||
lpIconName == IDI_HAND || lpIconName == IDI_QUESTION || lpIconName == IDI_WINLOGO ||
|
||||
lpIconName == IDI_SHIELD);
|
||||
#else // !(WINVER >= 0x0600)
|
||||
ATLASSERT(lpIconName == IDI_APPLICATION || lpIconName == IDI_ASTERISK || lpIconName == IDI_EXCLAMATION ||
|
||||
lpIconName == IDI_HAND || lpIconName == IDI_QUESTION || lpIconName == IDI_WINLOGO);
|
||||
#endif // !(WINVER >= 0x0600)
|
||||
return ::LoadIcon(NULL, lpIconName);
|
||||
}
|
||||
#endif // !_WIN32_WCE
|
||||
|
||||
inline HBITMAP AtlLoadBitmapImage(ATL::_U_STRINGorID bitmap, UINT fuLoad = LR_DEFAULTCOLOR)
|
||||
{
|
||||
return (HBITMAP)::LoadImage(ModuleHelper::GetResourceInstance(), bitmap.m_lpstr, IMAGE_BITMAP, 0, 0, fuLoad);
|
||||
}
|
||||
|
||||
inline HCURSOR AtlLoadCursorImage(ATL::_U_STRINGorID cursor, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
|
||||
{
|
||||
return (HCURSOR)::LoadImage(ModuleHelper::GetResourceInstance(), cursor.m_lpstr, IMAGE_CURSOR, cxDesired, cyDesired, fuLoad);
|
||||
}
|
||||
|
||||
inline HICON AtlLoadIconImage(ATL::_U_STRINGorID icon, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
|
||||
{
|
||||
return (HICON)::LoadImage(ModuleHelper::GetResourceInstance(), icon.m_lpstr, IMAGE_ICON, cxDesired, cyDesired, fuLoad);
|
||||
}
|
||||
|
||||
#ifdef OEMRESOURCE
|
||||
inline HBITMAP AtlLoadSysBitmapImage(WORD wBitmapID, UINT fuLoad = LR_DEFAULTCOLOR)
|
||||
{
|
||||
ATLASSERT(wBitmapID >= 32734 && wBitmapID <= 32767);
|
||||
ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0); // this one doesn't load from a file
|
||||
return (HBITMAP)::LoadImage(NULL, MAKEINTRESOURCE(wBitmapID), IMAGE_BITMAP, 0, 0, fuLoad);
|
||||
}
|
||||
#endif // OEMRESOURCE
|
||||
|
||||
inline HCURSOR AtlLoadSysCursorImage(ATL::_U_STRINGorID cursor, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
WORD wID = (WORD)cursor.m_lpstr;
|
||||
ATLASSERT((wID >= 32512 && wID <= 32516) || (wID >= 32640 && wID <= 32648) || (wID == 32650) || (wID == 32651));
|
||||
ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0); // this one doesn't load from a file
|
||||
#endif // _DEBUG
|
||||
return (HCURSOR)::LoadImage(NULL, cursor.m_lpstr, IMAGE_CURSOR, cxDesired, cyDesired, fuLoad);
|
||||
}
|
||||
|
||||
inline HICON AtlLoadSysIconImage(ATL::_U_STRINGorID icon, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
WORD wID = (WORD)icon.m_lpstr;
|
||||
ATLASSERT(wID >= 32512 && wID <= 32517);
|
||||
ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0); // this one doesn't load from a file
|
||||
#endif // _DEBUG
|
||||
return (HICON)::LoadImage(NULL, icon.m_lpstr, IMAGE_ICON, cxDesired, cyDesired, fuLoad);
|
||||
}
|
||||
|
||||
#if (_ATL_VER < 0x0700)
|
||||
inline int AtlLoadString(UINT uID, LPTSTR lpBuffer, int nBufferMax)
|
||||
{
|
||||
return ::LoadString(_Module.GetResourceInstance(), uID, lpBuffer, nBufferMax);
|
||||
}
|
||||
#endif // (_ATL_VER < 0x0700)
|
||||
|
||||
#ifdef _WIN32_WCE // CE only direct access to the resource
|
||||
inline LPCTSTR AtlLoadString(UINT uID)
|
||||
{
|
||||
LPCTSTR s = (LPCTSTR)::LoadString(ModuleHelper::GetResourceInstance(), uID, NULL, 0);
|
||||
#ifdef DEBUG // Check for null-termination
|
||||
if(s != NULL)
|
||||
// Note: RC -n <file.rc> compiles null-terminated resource strings
|
||||
ATLASSERT(s[*((WORD*)s -1) - 1] == L'\0');
|
||||
#endif
|
||||
return s;
|
||||
}
|
||||
#endif // _WIN32_WCE
|
||||
|
||||
inline bool AtlLoadString(UINT uID, BSTR& bstrText)
|
||||
{
|
||||
USES_CONVERSION;
|
||||
ATLASSERT(bstrText == NULL);
|
||||
|
||||
LPTSTR lpstrText = NULL;
|
||||
int nRes = 0;
|
||||
for(int nLen = 256; ; nLen *= 2)
|
||||
{
|
||||
ATLTRY(lpstrText = new TCHAR[nLen]);
|
||||
if(lpstrText == NULL)
|
||||
break;
|
||||
nRes = ::LoadString(ModuleHelper::GetResourceInstance(), uID, lpstrText, nLen);
|
||||
if(nRes < nLen - 1)
|
||||
break;
|
||||
delete [] lpstrText;
|
||||
lpstrText = NULL;
|
||||
}
|
||||
|
||||
if(lpstrText != NULL)
|
||||
{
|
||||
if(nRes != 0)
|
||||
bstrText = ::SysAllocString(T2OLE(lpstrText));
|
||||
delete [] lpstrText;
|
||||
}
|
||||
|
||||
return (bstrText != NULL) ? true : false;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Global functions for stock GDI objects
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
#error atlprint.h is not supported on Windows CE
|
||||
#endif
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -217,6 +217,7 @@
|
|||
#define ID_VIEW_TOOLBAR 0xE800
|
||||
#define ID_VIEW_STATUS_BAR 0xE801
|
||||
#define ID_VIEW_REFRESH 0xE803
|
||||
#define ID_VIEW_RIBBON 0xE804 // Ribbon
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Standard control IDs
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atlscrl.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
@ -34,10 +30,6 @@
|
|||
#define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam))
|
||||
#endif
|
||||
|
||||
#ifndef WM_MOUSEHWHEEL
|
||||
#define WM_MOUSEHWHEEL 0x020E
|
||||
#endif
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Classes in this file:
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atlsplit.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
@ -53,6 +49,8 @@ namespace WTL
|
|||
#define SPLIT_NONINTERACTIVE 0x00000002
|
||||
#define SPLIT_RIGHTALIGNED 0x00000004
|
||||
#define SPLIT_BOTTOMALIGNED SPLIT_RIGHTALIGNED
|
||||
#define SPLIT_GRADIENTBAR 0x00000008
|
||||
#define SPLIT_FIXEDBARSIZE 0x00000010
|
||||
|
||||
// Note: SPLIT_PROPORTIONAL and SPLIT_RIGHTALIGNED/SPLIT_BOTTOMALIGNED are
|
||||
// mutually exclusive. If both are set, splitter defaults to SPLIT_PROPORTIONAL
|
||||
|
@ -82,7 +80,7 @@ public:
|
|||
// Constructor
|
||||
CSplitterImpl() :
|
||||
m_xySplitterPos(-1), m_nDefActivePane(SPLIT_PANE_NONE),
|
||||
m_cxySplitBar(0), m_cxyMin(0), m_cxyBarEdge(0), m_bFullDrag(true),
|
||||
m_cxySplitBar(4), m_cxyMin(0), m_cxyBarEdge(0), m_bFullDrag(true),
|
||||
m_cxyDragOffset(0), m_nProportionalPos(0), m_bUpdateProportionalPos(true),
|
||||
m_dwExtendedStyle(SPLIT_PROPORTIONAL),
|
||||
m_nSinglePane(SPLIT_PANE_NONE)
|
||||
|
@ -386,10 +384,24 @@ public:
|
|||
// Overrideables
|
||||
void DrawSplitterBar(CDCHandle dc)
|
||||
{
|
||||
RECT rect;
|
||||
RECT rect = { 0 };
|
||||
if(GetSplitterBarRect(&rect))
|
||||
{
|
||||
dc.FillRect(&rect, COLOR_3DFACE);
|
||||
|
||||
#if (!defined(_WIN32_WCE) || (_WIN32_WCE >= 420))
|
||||
if((m_dwExtendedStyle & SPLIT_GRADIENTBAR) != 0)
|
||||
{
|
||||
RECT rect2 = rect;
|
||||
if(t_bVertical)
|
||||
rect2.left = (rect.left + rect.right) / 2 - 1;
|
||||
else
|
||||
rect2.top = (rect.top + rect.bottom) / 2 - 1;
|
||||
|
||||
dc.GradientFillRect(rect2, ::GetSysColor(COLOR_3DFACE), ::GetSysColor(COLOR_3DSHADOW), t_bVertical);
|
||||
}
|
||||
#endif // !defined(_WIN32_WCE) || (_WIN32_WCE >= 420)
|
||||
|
||||
// draw 3D edge if needed
|
||||
T* pT = static_cast<T*>(this);
|
||||
if((pT->GetExStyle() & WS_EX_CLIENTEDGE) != 0)
|
||||
|
@ -400,7 +412,7 @@ public:
|
|||
// called only if pane is empty
|
||||
void DrawSplitterPane(CDCHandle dc, int nPane)
|
||||
{
|
||||
RECT rect;
|
||||
RECT rect = { 0 };
|
||||
if(GetSplitterPaneRect(nPane, &rect))
|
||||
{
|
||||
T* pT = static_cast<T*>(this);
|
||||
|
@ -435,7 +447,9 @@ public:
|
|||
|
||||
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
|
||||
{
|
||||
GetSystemSettings(false);
|
||||
T* pT = static_cast<T*>(this);
|
||||
pT->GetSystemSettings(false);
|
||||
|
||||
bHandled = FALSE;
|
||||
return 1;
|
||||
}
|
||||
|
@ -580,7 +594,7 @@ public:
|
|||
DWORD dwPos = ::GetMessagePos();
|
||||
POINT pt = { GET_X_LPARAM(dwPos), GET_Y_LPARAM(dwPos) };
|
||||
pT->ScreenToClient(&pt);
|
||||
RECT rcPane;
|
||||
RECT rcPane = { 0 };
|
||||
for(int nPane = 0; nPane < m_nPanesCount; nPane++)
|
||||
{
|
||||
if(GetSplitterPaneRect(nPane, &rcPane) && ::PtInRect(&rcPane, pt))
|
||||
|
@ -596,7 +610,9 @@ public:
|
|||
|
||||
LRESULT OnSettingChange(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||
{
|
||||
GetSystemSettings(true);
|
||||
T* pT = static_cast<T*>(this);
|
||||
pT->GetSystemSettings(true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -607,7 +623,7 @@ public:
|
|||
return;
|
||||
|
||||
T* pT = static_cast<T*>(this);
|
||||
RECT rect = { 0, 0, 0, 0 };
|
||||
RECT rect = { 0 };
|
||||
if(m_nSinglePane == SPLIT_PANE_NONE)
|
||||
{
|
||||
if(GetSplitterBarRect(&rect))
|
||||
|
@ -733,11 +749,17 @@ public:
|
|||
|
||||
void DrawGhostBar()
|
||||
{
|
||||
RECT rect = { 0, 0, 0, 0 };
|
||||
RECT rect = { 0 };
|
||||
if(GetSplitterBarRect(&rect))
|
||||
{
|
||||
// invert the brush pattern (looks just like frame window sizing)
|
||||
// convert client to window coordinates
|
||||
T* pT = static_cast<T*>(this);
|
||||
RECT rcWnd = { 0 };
|
||||
pT->GetWindowRect(&rcWnd);
|
||||
::MapWindowPoints(NULL, pT->m_hWnd, (LPPOINT)&rcWnd, 2);
|
||||
::OffsetRect(&rect, -rcWnd.left, -rcWnd.top);
|
||||
|
||||
// invert the brush pattern (looks just like frame window sizing)
|
||||
CWindowDC dc(pT->m_hWnd);
|
||||
CBrush brush = CDCHandle::GetHalftoneBrush();
|
||||
if(brush.m_hBrush != NULL)
|
||||
|
@ -751,11 +773,14 @@ public:
|
|||
|
||||
void GetSystemSettings(bool bUpdate)
|
||||
{
|
||||
if((m_dwExtendedStyle & SPLIT_FIXEDBARSIZE) == 0)
|
||||
{
|
||||
#ifndef _WIN32_WCE
|
||||
m_cxySplitBar = ::GetSystemMetrics(t_bVertical ? SM_CXSIZEFRAME : SM_CYSIZEFRAME);
|
||||
m_cxySplitBar = ::GetSystemMetrics(t_bVertical ? SM_CXSIZEFRAME : SM_CYSIZEFRAME);
|
||||
#else // CE specific
|
||||
m_cxySplitBar = 2 * ::GetSystemMetrics(t_bVertical ? SM_CXEDGE : SM_CYEDGE);
|
||||
m_cxySplitBar = 2 * ::GetSystemMetrics(t_bVertical ? SM_CXEDGE : SM_CYEDGE);
|
||||
#endif // _WIN32_WCE
|
||||
}
|
||||
|
||||
T* pT = static_cast<T*>(this);
|
||||
if((pT->GetExStyle() & WS_EX_CLIENTEDGE))
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
#error atltheme.h is not supported on Windows CE
|
||||
#endif
|
||||
|
@ -37,10 +33,14 @@
|
|||
#if defined(_WTL_USE_VSSYM32) || (defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN))
|
||||
#include <vssym32.h>
|
||||
#else
|
||||
#ifndef TMSCHEMA_H
|
||||
#include <tmschema.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _UXTHEME_H_
|
||||
#include <uxtheme.h>
|
||||
#endif
|
||||
#pragma comment(lib, "uxtheme.lib")
|
||||
|
||||
// Note: To create an application that also runs on older versions of Windows,
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atluser.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
@ -35,6 +31,22 @@
|
|||
//
|
||||
// Global functions:
|
||||
// AtlMessageBox()
|
||||
//
|
||||
// AtlLoadAccelerators()
|
||||
// AtlLoadMenu()
|
||||
// AtlLoadBitmap()
|
||||
// AtlLoadSysBitmap()
|
||||
// AtlLoadCursor()
|
||||
// AtlLoadSysCursor()
|
||||
// AtlLoadIcon()
|
||||
// AtlLoadSysIcon()
|
||||
// AtlLoadBitmapImage()
|
||||
// AtlLoadCursorImage()
|
||||
// AtlLoadIconImage()
|
||||
// AtlLoadSysBitmapImage()
|
||||
// AtlLoadSysCursorImage()
|
||||
// AtlLoadSysIconImage()
|
||||
// AtlLoadString()
|
||||
|
||||
|
||||
namespace WTL
|
||||
|
@ -401,7 +413,38 @@ public:
|
|||
return (bstrText != NULL) ? TRUE : FALSE;
|
||||
}
|
||||
#endif // !_ATL_NO_COM
|
||||
#endif // !_WIN32_WCE
|
||||
|
||||
#elif (_ATL_VER >= 0x0800)
|
||||
int GetMenuItemCount() const
|
||||
{
|
||||
ATLASSERT(::IsMenu(m_hMenu));
|
||||
return ATL::GetMenuItemCount(m_hMenu);
|
||||
}
|
||||
|
||||
UINT GetMenuItemID(int nPos) const
|
||||
{
|
||||
ATLASSERT(::IsMenu(m_hMenu));
|
||||
return ATL::GetMenuItemID(m_hMenu, nPos);
|
||||
}
|
||||
|
||||
UINT GetMenuState(UINT nID, UINT nFlags) const
|
||||
{
|
||||
ATLASSERT(::IsMenu(m_hMenu));
|
||||
return ATL::GetMenuState(m_hMenu, nID, nFlags);
|
||||
}
|
||||
|
||||
int GetMenuString(UINT nIDItem, LPTSTR lpString, int nMaxCount, UINT nFlags) const
|
||||
{
|
||||
ATLASSERT(::IsMenu(m_hMenu));
|
||||
return ATL::GetMenuString(m_hMenu, nIDItem, lpString, nMaxCount, nFlags);
|
||||
}
|
||||
|
||||
int GetMenuStringLen(UINT nIDItem, UINT nFlags) const
|
||||
{
|
||||
ATLASSERT(::IsMenu(m_hMenu));
|
||||
return ATL::GetMenuString(m_hMenu, nIDItem, NULL, 0, nFlags);
|
||||
}
|
||||
#endif // (_ATL_VER >= 0x0800)
|
||||
|
||||
#if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
|
||||
int GetMenuString(UINT nIDItem, _CSTRING_NS::CString& strText, UINT nFlags) const
|
||||
|
@ -1157,6 +1200,192 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Toolbar resource descriptor
|
||||
|
||||
struct _AtlToolBarData
|
||||
{
|
||||
WORD wVersion;
|
||||
WORD wWidth;
|
||||
WORD wHeight;
|
||||
WORD wItemCount;
|
||||
|
||||
WORD* items()
|
||||
{ return (WORD*)(this+1); }
|
||||
};
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Global functions for loading resources
|
||||
|
||||
inline HACCEL AtlLoadAccelerators(ATL::_U_STRINGorID table)
|
||||
{
|
||||
return ::LoadAccelerators(ModuleHelper::GetResourceInstance(), table.m_lpstr);
|
||||
}
|
||||
|
||||
inline HMENU AtlLoadMenu(ATL::_U_STRINGorID menu)
|
||||
{
|
||||
return ::LoadMenu(ModuleHelper::GetResourceInstance(), menu.m_lpstr);
|
||||
}
|
||||
|
||||
inline HBITMAP AtlLoadBitmap(ATL::_U_STRINGorID bitmap)
|
||||
{
|
||||
return ::LoadBitmap(ModuleHelper::GetResourceInstance(), bitmap.m_lpstr);
|
||||
}
|
||||
|
||||
#ifdef OEMRESOURCE
|
||||
inline HBITMAP AtlLoadSysBitmap(ATL::_U_STRINGorID bitmap)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
WORD wID = (WORD)bitmap.m_lpstr;
|
||||
ATLASSERT(wID >= 32734 && wID <= 32767);
|
||||
#endif // _DEBUG
|
||||
return ::LoadBitmap(NULL, bitmap.m_lpstr);
|
||||
}
|
||||
#endif // OEMRESOURCE
|
||||
|
||||
inline HCURSOR AtlLoadCursor(ATL::_U_STRINGorID cursor)
|
||||
{
|
||||
return ::LoadCursor(ModuleHelper::GetResourceInstance(), cursor.m_lpstr);
|
||||
}
|
||||
|
||||
inline HCURSOR AtlLoadSysCursor(LPCTSTR lpCursorName)
|
||||
{
|
||||
#if (WINVER >= 0x0500)
|
||||
ATLASSERT(lpCursorName == IDC_ARROW || lpCursorName == IDC_IBEAM || lpCursorName == IDC_WAIT ||
|
||||
lpCursorName == IDC_CROSS || lpCursorName == IDC_UPARROW || lpCursorName == IDC_SIZE ||
|
||||
lpCursorName == IDC_ICON || lpCursorName == IDC_SIZENWSE || lpCursorName == IDC_SIZENESW ||
|
||||
lpCursorName == IDC_SIZEWE || lpCursorName == IDC_SIZENS || lpCursorName == IDC_SIZEALL ||
|
||||
lpCursorName == IDC_NO || lpCursorName == IDC_APPSTARTING || lpCursorName == IDC_HELP ||
|
||||
lpCursorName == IDC_HAND);
|
||||
#else // !(WINVER >= 0x0500)
|
||||
ATLASSERT(lpCursorName == IDC_ARROW || lpCursorName == IDC_IBEAM || lpCursorName == IDC_WAIT ||
|
||||
lpCursorName == IDC_CROSS || lpCursorName == IDC_UPARROW || lpCursorName == IDC_SIZE ||
|
||||
lpCursorName == IDC_ICON || lpCursorName == IDC_SIZENWSE || lpCursorName == IDC_SIZENESW ||
|
||||
lpCursorName == IDC_SIZEWE || lpCursorName == IDC_SIZENS || lpCursorName == IDC_SIZEALL ||
|
||||
lpCursorName == IDC_NO || lpCursorName == IDC_APPSTARTING || lpCursorName == IDC_HELP);
|
||||
#endif // !(WINVER >= 0x0500)
|
||||
return ::LoadCursor(NULL, lpCursorName);
|
||||
}
|
||||
|
||||
inline HICON AtlLoadIcon(ATL::_U_STRINGorID icon)
|
||||
{
|
||||
return ::LoadIcon(ModuleHelper::GetResourceInstance(), icon.m_lpstr);
|
||||
}
|
||||
|
||||
#ifndef _WIN32_WCE
|
||||
inline HICON AtlLoadSysIcon(LPCTSTR lpIconName)
|
||||
{
|
||||
#if (WINVER >= 0x0600)
|
||||
ATLASSERT(lpIconName == IDI_APPLICATION || lpIconName == IDI_ASTERISK || lpIconName == IDI_EXCLAMATION ||
|
||||
lpIconName == IDI_HAND || lpIconName == IDI_QUESTION || lpIconName == IDI_WINLOGO ||
|
||||
lpIconName == IDI_SHIELD);
|
||||
#else // !(WINVER >= 0x0600)
|
||||
ATLASSERT(lpIconName == IDI_APPLICATION || lpIconName == IDI_ASTERISK || lpIconName == IDI_EXCLAMATION ||
|
||||
lpIconName == IDI_HAND || lpIconName == IDI_QUESTION || lpIconName == IDI_WINLOGO);
|
||||
#endif // !(WINVER >= 0x0600)
|
||||
return ::LoadIcon(NULL, lpIconName);
|
||||
}
|
||||
#endif // !_WIN32_WCE
|
||||
|
||||
inline HBITMAP AtlLoadBitmapImage(ATL::_U_STRINGorID bitmap, UINT fuLoad = LR_DEFAULTCOLOR)
|
||||
{
|
||||
return (HBITMAP)::LoadImage(ModuleHelper::GetResourceInstance(), bitmap.m_lpstr, IMAGE_BITMAP, 0, 0, fuLoad);
|
||||
}
|
||||
|
||||
inline HCURSOR AtlLoadCursorImage(ATL::_U_STRINGorID cursor, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
|
||||
{
|
||||
return (HCURSOR)::LoadImage(ModuleHelper::GetResourceInstance(), cursor.m_lpstr, IMAGE_CURSOR, cxDesired, cyDesired, fuLoad);
|
||||
}
|
||||
|
||||
inline HICON AtlLoadIconImage(ATL::_U_STRINGorID icon, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
|
||||
{
|
||||
return (HICON)::LoadImage(ModuleHelper::GetResourceInstance(), icon.m_lpstr, IMAGE_ICON, cxDesired, cyDesired, fuLoad);
|
||||
}
|
||||
|
||||
#ifdef OEMRESOURCE
|
||||
inline HBITMAP AtlLoadSysBitmapImage(WORD wBitmapID, UINT fuLoad = LR_DEFAULTCOLOR)
|
||||
{
|
||||
ATLASSERT(wBitmapID >= 32734 && wBitmapID <= 32767);
|
||||
ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0); // this one doesn't load from a file
|
||||
return (HBITMAP)::LoadImage(NULL, MAKEINTRESOURCE(wBitmapID), IMAGE_BITMAP, 0, 0, fuLoad);
|
||||
}
|
||||
#endif // OEMRESOURCE
|
||||
|
||||
inline HCURSOR AtlLoadSysCursorImage(ATL::_U_STRINGorID cursor, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
WORD wID = (WORD)cursor.m_lpstr;
|
||||
ATLASSERT((wID >= 32512 && wID <= 32516) || (wID >= 32640 && wID <= 32648) || (wID == 32650) || (wID == 32651));
|
||||
ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0); // this one doesn't load from a file
|
||||
#endif // _DEBUG
|
||||
return (HCURSOR)::LoadImage(NULL, cursor.m_lpstr, IMAGE_CURSOR, cxDesired, cyDesired, fuLoad);
|
||||
}
|
||||
|
||||
inline HICON AtlLoadSysIconImage(ATL::_U_STRINGorID icon, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
WORD wID = (WORD)icon.m_lpstr;
|
||||
ATLASSERT(wID >= 32512 && wID <= 32517);
|
||||
ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0); // this one doesn't load from a file
|
||||
#endif // _DEBUG
|
||||
return (HICON)::LoadImage(NULL, icon.m_lpstr, IMAGE_ICON, cxDesired, cyDesired, fuLoad);
|
||||
}
|
||||
|
||||
#if (_ATL_VER < 0x0700)
|
||||
inline int AtlLoadString(UINT uID, LPTSTR lpBuffer, int nBufferMax)
|
||||
{
|
||||
return ::LoadString(ModuleHelper::GetResourceInstance(), uID, lpBuffer, nBufferMax);
|
||||
}
|
||||
#else
|
||||
|
||||
using ATL::AtlLoadString;
|
||||
|
||||
#endif // (_ATL_VER < 0x0700)
|
||||
|
||||
#ifdef _WIN32_WCE // CE only direct access to the resource
|
||||
inline LPCTSTR AtlLoadString(UINT uID)
|
||||
{
|
||||
LPCTSTR s = (LPCTSTR)::LoadString(ModuleHelper::GetResourceInstance(), uID, NULL, 0);
|
||||
#ifdef DEBUG // Check for null-termination
|
||||
if(s != NULL)
|
||||
// Note: RC -n <file.rc> compiles null-terminated resource strings
|
||||
ATLASSERT(s[*((WORD*)s -1) - 1] == L'\0');
|
||||
#endif
|
||||
return s;
|
||||
}
|
||||
#endif // _WIN32_WCE
|
||||
|
||||
inline bool AtlLoadString(UINT uID, BSTR& bstrText)
|
||||
{
|
||||
USES_CONVERSION;
|
||||
ATLASSERT(bstrText == NULL);
|
||||
|
||||
LPTSTR lpstrText = NULL;
|
||||
int nRes = 0;
|
||||
for(int nLen = 256; ; nLen *= 2)
|
||||
{
|
||||
ATLTRY(lpstrText = new TCHAR[nLen]);
|
||||
if(lpstrText == NULL)
|
||||
break;
|
||||
nRes = ::LoadString(ModuleHelper::GetResourceInstance(), uID, lpstrText, nLen);
|
||||
if(nRes < nLen - 1)
|
||||
break;
|
||||
delete [] lpstrText;
|
||||
lpstrText = NULL;
|
||||
}
|
||||
|
||||
if(lpstrText != NULL)
|
||||
{
|
||||
if(nRes != 0)
|
||||
bstrText = ::SysAllocString(T2OLE(lpstrText));
|
||||
delete [] lpstrText;
|
||||
}
|
||||
|
||||
return (bstrText != NULL) ? true : false;
|
||||
}
|
||||
|
||||
}; // namespace WTL
|
||||
|
||||
#endif // __ATLUSER_H__
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atlwince.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
@ -28,7 +24,9 @@
|
|||
|
||||
#ifndef _WIN32_WCE
|
||||
#error atlwince.h compiles under Windows CE only
|
||||
#elif (_WIN32_WCE < 300)
|
||||
#endif
|
||||
|
||||
#if (_WIN32_WCE < 300)
|
||||
#error atlwince.h requires Windows CE 3.0 or higher.
|
||||
#endif
|
||||
|
||||
|
@ -249,7 +247,8 @@ public:
|
|||
T* pT = static_cast<T*>(this);
|
||||
ATLASSERT(pT->IsWindow());
|
||||
BOOL bRes = ::GetClientRect(pT->m_hWnd, lpRect);
|
||||
lpRect->top += nTitleHeight;
|
||||
if (nTitleHeight)
|
||||
lpRect->top += nTitleHeight + 1;
|
||||
return bRes;
|
||||
}
|
||||
|
||||
|
@ -546,6 +545,26 @@ public:
|
|||
typedef CIndirectDialogImpl< T, CMemDlgTemplate, CStdDialogImpl<T, t_shidiFlags, t_bModal> > _baseClass;
|
||||
typedef CStdDialogImpl<T, t_shidiFlags, t_bModal> _baseStd;
|
||||
|
||||
void CheckStyle()
|
||||
{
|
||||
// Mobile devices don't support DLGTEMPLATEEX
|
||||
ATLASSERT(!m_Template.IsTemplateEx());
|
||||
|
||||
// Standard dialogs need only DS_CENTER
|
||||
DWORD &dwStyle = m_Template.GetTemplatePtr()->style;
|
||||
if (dwStyle & DS_CENTER)
|
||||
if(t_bModal)
|
||||
{
|
||||
ATLASSERT((dwStyle & WS_CHILD) != WS_CHILD);
|
||||
dwStyle |= WS_POPUP;
|
||||
}
|
||||
else
|
||||
{
|
||||
if((dwStyle & WS_CHILD) != WS_CHILD)
|
||||
dwStyle |= WS_POPUP;
|
||||
}
|
||||
}
|
||||
|
||||
INT_PTR DoModal(HWND hWndParent = ::GetActiveWindow(), LPARAM dwInitParam = NULL)
|
||||
{
|
||||
ATLASSERT(t_bModal);
|
||||
|
@ -553,22 +572,7 @@ public:
|
|||
if (!m_Template.IsValid())
|
||||
CreateTemplate();
|
||||
|
||||
if (m_Template.IsTemplateEx())
|
||||
{
|
||||
if (m_Template.GetTemplateExPtr()->style & DS_CENTER)
|
||||
{
|
||||
ATLASSERT(m_Template.GetTemplateExPtr()->style ^ WS_CHILD);
|
||||
GetTemplateExPtr()->style |= WS_POPUP;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_Template.GetTemplatePtr()->style & DS_CENTER)
|
||||
{
|
||||
ATLASSERT(m_Template.GetTemplatePtr()->style ^ WS_CHILD);
|
||||
m_Template.GetTemplatePtr()->style |= WS_POPUP;
|
||||
}
|
||||
}
|
||||
CheckStyle();
|
||||
|
||||
return _baseClass::DoModal(hWndParent, dwInitParam);
|
||||
}
|
||||
|
@ -580,22 +584,7 @@ public:
|
|||
if (!m_Template.IsValid())
|
||||
CreateTemplate();
|
||||
|
||||
if (m_Template.IsTemplateEx())
|
||||
{
|
||||
if (GetTemplateExPtr()->style & DS_CENTER)
|
||||
{
|
||||
ATLASSERT(GetTemplateExPtr()->style ^ WS_CHILD);
|
||||
GetTemplateExPtr()->style |= WS_POPUP;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetTemplatePtr()->style & DS_CENTER)
|
||||
{
|
||||
ATLASSERT(GetTemplatePtr()->style ^ WS_CHILD);
|
||||
GetTemplatePtr()->style |= WS_POPUP;
|
||||
}
|
||||
}
|
||||
CheckStyle();
|
||||
|
||||
return _baseClass::Create(hWndParent, dwInitParam);
|
||||
}
|
||||
|
@ -905,7 +894,7 @@ public:
|
|||
class CAppInfoBase
|
||||
{
|
||||
public:
|
||||
ATL::CRegKey m_Key;
|
||||
CRegKeyEx m_Key;
|
||||
|
||||
CAppInfoBase(ATL::_U_STRINGorID sAppKey)
|
||||
{
|
||||
|
@ -916,46 +905,30 @@ public:
|
|||
template <class V>
|
||||
LONG Save(V& val, ATL::_U_STRINGorID sName)
|
||||
{
|
||||
return ::RegSetValueEx(m_Key, sName.m_lpstr, 0, REG_BINARY, (LPBYTE)&val, sizeof(V));
|
||||
return m_Key.SetBinaryValue(sName.m_lpstr, &val, sizeof(V));
|
||||
}
|
||||
|
||||
template <class V>
|
||||
LONG Save(int nb, V& val0, ATL::_U_STRINGorID sName)
|
||||
{
|
||||
return ::RegSetValueEx(m_Key, sName.m_lpstr, 0, REG_BINARY, (LPBYTE)&val0, nb * sizeof(V));
|
||||
return m_Key.SetBinaryValue(sName.m_lpstr, &val0, nb * sizeof(V));
|
||||
}
|
||||
|
||||
template <class V>
|
||||
LONG Restore(V& val, ATL::_U_STRINGorID sName)
|
||||
{
|
||||
DWORD valtype;
|
||||
DWORD bufSize = sizeof(V);
|
||||
return ::RegQueryValueEx(m_Key, sName.m_lpstr, 0, &valtype, (LPBYTE)&val, &bufSize);
|
||||
ULONG bufSize = sizeof(V);
|
||||
return m_Key.QueryBinaryValue(sName.m_lpstr, &val, &bufSize);
|
||||
}
|
||||
|
||||
template <class V>
|
||||
LONG Restore(int nb, V& val0, ATL::_U_STRINGorID sName)
|
||||
{
|
||||
DWORD valtype;
|
||||
DWORD bufSize = nb * sizeof(V);
|
||||
return ::RegQueryValueEx(m_Key, sName.m_lpstr, 0, &valtype, (LPBYTE)&val0, &bufSize);
|
||||
ULONG bufSize = nb * sizeof(V);
|
||||
return m_Key.QueryBinaryValue(sName.m_lpstr, &val0, &bufSize);
|
||||
}
|
||||
|
||||
#if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
|
||||
#if (_ATL_VER < 0x0800)
|
||||
LONG Save(_CSTRING_NS::CString& sval, ATL::_U_STRINGorID sName)
|
||||
{
|
||||
return m_Key.SetValue(sval, sName.m_lpstr);
|
||||
}
|
||||
|
||||
LONG Restore(_CSTRING_NS::CString& sval, ATL::_U_STRINGorID sName)
|
||||
{
|
||||
DWORD size = MAX_PATH;
|
||||
LONG res = m_Key.QueryValue(sval.GetBuffer(size), sName.m_lpstr, &size);
|
||||
sval.ReleaseBuffer();
|
||||
return res;
|
||||
}
|
||||
#else // !(_ATL_VER < 0x0800)
|
||||
LONG Save(_CSTRING_NS::CString& sval, ATL::_U_STRINGorID sName)
|
||||
{
|
||||
return m_Key.SetStringValue(sName.m_lpstr, sval);
|
||||
|
@ -968,22 +941,10 @@ public:
|
|||
sval.ReleaseBuffer();
|
||||
return res;
|
||||
}
|
||||
#endif // !(_ATL_VER < 0x0800)
|
||||
#else
|
||||
#pragma message("Warning: CAppInfoBase compiles without CString support. Do not use CString in Save or Restore.")
|
||||
#endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
|
||||
|
||||
#if (_ATL_VER < 0x0800)
|
||||
LONG Save(LPCTSTR sval, ATL::_U_STRINGorID sName)
|
||||
{
|
||||
return m_Key.SetValue(sval, sName.m_lpstr);
|
||||
}
|
||||
|
||||
LONG Restore(LPTSTR sval, ATL::_U_STRINGorID sName, DWORD *plength)
|
||||
{
|
||||
return m_Key.QueryValue(sval, sName.m_lpstr, plength);
|
||||
}
|
||||
#else // !(_ATL_VER < 0x0800)
|
||||
LONG Save(LPCTSTR sval, ATL::_U_STRINGorID sName)
|
||||
{
|
||||
return m_Key.SetStringValue(sName.m_lpstr, sval);
|
||||
|
@ -993,7 +954,6 @@ public:
|
|||
{
|
||||
return m_Key.QueryStringValue(sName.m_lpstr, sval, plength);
|
||||
}
|
||||
#endif // !(_ATL_VER < 0x0800)
|
||||
|
||||
LONG Delete(ATL::_U_STRINGorID sName)
|
||||
{
|
||||
|
@ -1508,7 +1468,7 @@ public:
|
|||
#ifndef SETTINGCHANGE_RESET // not defined for PPC 2002
|
||||
#define SETTINGCHANGE_RESET SPI_SETWORKAREA
|
||||
#endif
|
||||
if (m_bFullScreen && (wParam & SETTINGCHANGE_RESET))
|
||||
if (m_bFullScreen && (wParam == SETTINGCHANGE_RESET))
|
||||
SetFullScreen(m_bFullScreen);
|
||||
return bHandled = FALSE;
|
||||
}
|
||||
|
@ -2223,22 +2183,37 @@ public:
|
|||
::SendMessage(m_hWnd, EM_UNDOEVENT, 0, 0L);
|
||||
}
|
||||
|
||||
void Undo()
|
||||
{
|
||||
UndoEvent();
|
||||
}
|
||||
|
||||
// Standard EM_xxx messages
|
||||
DWORD GetSel() const
|
||||
{
|
||||
ATLASSERT(::IsWindow(m_hWnd));
|
||||
ATLASSERT(GetViewStyle() != VT_DRAWINGVIEW);
|
||||
return (DWORD)::SendMessage(m_hWnd, EM_GETSEL, 0, 0L);
|
||||
}
|
||||
|
||||
void GetSel(int& nStartChar, int& nEndChar) const
|
||||
{
|
||||
ATLASSERT(::IsWindow(m_hWnd));
|
||||
ATLASSERT(GetViewStyle() != VT_DRAWINGVIEW);
|
||||
::SendMessage(m_hWnd, EM_GETSEL, (WPARAM)&nStartChar, (LPARAM)&nEndChar);
|
||||
}
|
||||
|
||||
void SetSel(int nStartChar, int nEndChar)
|
||||
{
|
||||
ATLASSERT(::IsWindow(m_hWnd));
|
||||
ATLASSERT(GetViewStyle() != VT_DRAWINGVIEW);
|
||||
::SendMessage(m_hWnd, EM_SETSEL, nStartChar, nEndChar);
|
||||
}
|
||||
|
||||
void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE)
|
||||
{
|
||||
ATLASSERT(::IsWindow(m_hWnd));
|
||||
ATLASSERT(GetViewStyle() != VT_DRAWINGVIEW);
|
||||
::SendMessage(m_hWnd, EM_REPLACESEL, (WPARAM)bCanUndo, (LPARAM)lpszNewText);
|
||||
}
|
||||
|
||||
|
@ -2504,7 +2479,7 @@ public:
|
|||
::ZeroMemory(&m_dlc, sizeof(DOCLISTCREATE));
|
||||
::ZeroMemory(m_szPath, sizeof(m_szPath));
|
||||
if(pszFolder != NULL)
|
||||
::lstrcpyn(m_szPath, pszFolder, MAX_PATH - 1);
|
||||
SecureHelper::strncpy_x(m_szPath, MAX_PATH, pszFolder, MAX_PATH - 1);
|
||||
m_dlc.dwStructSize = sizeof(DOCLISTCREATE);
|
||||
m_dlc.hwndParent = hWndParent;
|
||||
m_dlc.pszFolder = m_szPath;
|
||||
|
@ -2796,13 +2771,14 @@ public:
|
|||
{
|
||||
ATLASSERT(::IsWindow(m_hWnd));
|
||||
ATLASSERT(pstrTipText);
|
||||
ATLASSERT(lstrlen(pstrTipText)<= 253);
|
||||
ATLASSERT(lstrlen(pstrTipText) <= 253);
|
||||
CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
|
||||
LPTSTR pstr = buff.Allocate(lstrlen(pstrTipText) + 3);
|
||||
int cchLen = lstrlen(pstrTipText) + 3;
|
||||
LPTSTR pstr = buff.Allocate(cchLen);
|
||||
if(pstr == NULL)
|
||||
return FALSE;
|
||||
::lstrcpy(pstr, _T("~~"));
|
||||
::lstrcat(pstr, pstrTipText);
|
||||
SecureHelper::strcpy_x(pstr, cchLen, _T("~~"));
|
||||
SecureHelper::strcat_x(pstr, cchLen, pstrTipText);
|
||||
return SetWindowText(pstr);
|
||||
}
|
||||
};
|
||||
|
@ -2847,13 +2823,14 @@ public:
|
|||
{
|
||||
ATLASSERT(::IsWindow(m_hWnd));
|
||||
ATLASSERT(pstrTipText);
|
||||
ATLASSERT(lstrlen(pstrTipText)<= 253);
|
||||
ATLASSERT(lstrlen(pstrTipText) <= 253);
|
||||
CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
|
||||
LPTSTR pstr = buff.Allocate(lstrlen(pstrTipText) + 3);
|
||||
int cchLen = lstrlen(pstrTipText) + 3;
|
||||
LPTSTR pstr = buff.Allocate(cchLen);
|
||||
if(pstr == NULL)
|
||||
return FALSE;
|
||||
::lstrcpy(pstr, _T("~~"));
|
||||
::lstrcat(pstr, pstrTipText);
|
||||
SecureHelper::strcpy_x(pstr, cchLen, _T("~~"));
|
||||
SecureHelper::strcat_x(pstr, cchLen, pstrTipText);
|
||||
return SetWindowText(pstr);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Windows Template Library - WTL version 8.0
|
||||
// Windows Template Library - WTL version 8.1
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This file is a part of the Windows Template Library.
|
||||
// The use and distribution terms for this software are covered by the
|
||||
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
|
||||
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||
// By using this software in any fashion, you are agreeing to be bound by
|
||||
// the terms of this license. You must not remove this notice, or
|
||||
|
@ -14,10 +14,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||
#endif
|
||||
|
||||
#ifndef __ATLAPP_H__
|
||||
#error atlwinx.h requires atlapp.h to be included first
|
||||
#endif
|
||||
|
|
|
@ -1,44 +0,0 @@
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifndef _WX_RCDEFS_H
|
||||
#define _WX_RCDEFS_H
|
||||
|
||||
|
||||
#define WX_MSC_FULL_VER 160040219
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define WX_CPU_X86
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#include <common/MemTest.h>
|
||||
#include <common/CriticalSection.h>
|
||||
#include <shellapi.h>
|
||||
#include "Multilanguage.h"
|
||||
#include "User Interface.h"
|
||||
#include "N64 System.h"
|
||||
|
|
Loading…
Reference in New Issue