Update wtl to 8.1
This commit is contained in:
parent
2dd4e99ed6
commit
7de6792283
|
@ -17,107 +17,15 @@
|
||||||
<Configurations>
|
<Configurations>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Debug|Win32"
|
Name="Debug|Win32"
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="4"
|
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>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Release|Win32"
|
Name="Release|Win32"
|
||||||
ConfigurationType="4"
|
ConfigurationType="4"
|
||||||
InheritedPropertySheets="$(SolutionDir)PropertySheets/Win32.Release.vsprops"
|
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>
|
</Configuration>
|
||||||
</Configurations>
|
</Configurations>
|
||||||
<References>
|
<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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
#error WTL requires C++ compilation (use a .cpp suffix)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __ATLBASE_H__
|
#ifndef __ATLBASE_H__
|
||||||
|
@ -34,11 +34,15 @@
|
||||||
|
|
||||||
#ifdef _ATL_NO_COMMODULE
|
#ifdef _ATL_NO_COMMODULE
|
||||||
#error WTL requires that _ATL_NO_COMMODULE is not defined
|
#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)
|
#if defined(_WIN32_WCE) && defined(_ATL_MIN_CRT)
|
||||||
#pragma message("Warning: WTL for Windows CE doesn't use _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>
|
#include <limits.h>
|
||||||
#if !defined(_ATL_MIN_CRT) && defined(_MT) && !defined(_WIN32_WCE)
|
#if !defined(_ATL_MIN_CRT) && defined(_MT) && !defined(_WIN32_WCE)
|
||||||
|
@ -51,8 +55,8 @@
|
||||||
|
|
||||||
#include <commctrl.h>
|
#include <commctrl.h>
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
#pragma comment(lib, "comctl32.lib")
|
#pragma comment(lib, "comctl32.lib")
|
||||||
#endif // !_WIN32_WCE
|
#endif
|
||||||
|
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
#include "atlres.h"
|
#include "atlres.h"
|
||||||
|
@ -63,11 +67,15 @@
|
||||||
// We need to disable this warning because of template class arguments
|
// We need to disable this warning because of template class arguments
|
||||||
#pragma warning(disable: 4127)
|
#pragma warning(disable: 4127)
|
||||||
|
|
||||||
|
#if (_ATL_VER >= 0x0900) && !defined(_SECURE_ATL)
|
||||||
|
#define _SECURE_ATL 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// WTL version number
|
// WTL version number
|
||||||
|
|
||||||
#define _WTL_VER 0x0800
|
#define _WTL_VER 0x0810
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -80,8 +88,11 @@
|
||||||
// CAppModule
|
// CAppModule
|
||||||
// CServerAppModule
|
// CServerAppModule
|
||||||
//
|
//
|
||||||
|
// CRegKeyEx
|
||||||
|
//
|
||||||
// Global functions:
|
// Global functions:
|
||||||
// AtlGetDefaultGuiFont()
|
// AtlGetDefaultGuiFont()
|
||||||
|
// AtlCreateControlFont()
|
||||||
// AtlCreateBoldFont()
|
// AtlCreateBoldFont()
|
||||||
// AtlInitCommonControls()
|
// AtlInitCommonControls()
|
||||||
|
|
||||||
|
@ -460,11 +471,15 @@ static CWndClassInfo& GetWndClassInfo() \
|
||||||
#endif // ATLVERIFY
|
#endif // ATLVERIFY
|
||||||
#endif // (_ATL_VER < 0x0700)
|
#endif // (_ATL_VER < 0x0700)
|
||||||
|
|
||||||
// Forward declaration for ATL3 fix
|
// Forward declaration for ATL3 and ATL11 fix
|
||||||
#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 { HRESULT AtlGetCommCtrlVersion(LPDWORD pdwMajor, LPDWORD pdwMinor); };
|
namespace ATL { HRESULT AtlGetCommCtrlVersion(LPDWORD pdwMajor, LPDWORD pdwMinor); };
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef WM_MOUSEHWHEEL
|
||||||
|
#define WM_MOUSEHWHEEL 0x020E
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
namespace WTL
|
namespace WTL
|
||||||
{
|
{
|
||||||
|
@ -490,7 +505,7 @@ inline bool AtlIsOldWindows()
|
||||||
return (!bRet || !((ovi.dwMajorVersion >= 5) || (ovi.dwMajorVersion == 4 && ovi.dwMinorVersion >= 90)));
|
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()
|
inline HFONT AtlGetDefaultGuiFont()
|
||||||
{
|
{
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
|
@ -500,24 +515,39 @@ inline HFONT AtlGetDefaultGuiFont()
|
||||||
#endif // _WIN32_WCE
|
#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)
|
inline HFONT AtlCreateBoldFont(HFONT hFont = NULL)
|
||||||
{
|
{
|
||||||
if(hFont == NULL)
|
|
||||||
hFont = AtlGetDefaultGuiFont();
|
|
||||||
ATLASSERT(hFont != NULL);
|
|
||||||
HFONT hFontBold = NULL;
|
|
||||||
LOGFONT lf = { 0 };
|
LOGFONT lf = { 0 };
|
||||||
if(::GetObject(hFont, sizeof(LOGFONT), &lf) == sizeof(LOGFONT))
|
#ifndef _WIN32_WCE
|
||||||
{
|
if(hFont == NULL)
|
||||||
lf.lfWeight = FW_BOLD;
|
ATLVERIFY(::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &lf, 0) != FALSE);
|
||||||
hFontBold = ::CreateFontIndirect(&lf);
|
|
||||||
ATLASSERT(hFontBold != NULL);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
ATLVERIFY(::GetObject(hFont, sizeof(LOGFONT), &lf) == sizeof(LOGFONT));
|
||||||
ATLASSERT(FALSE);
|
#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;
|
return hFontBold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -583,6 +613,70 @@ namespace RunTimeHelper
|
||||||
BOOL bRet = ::GetVersionEx(&ovi);
|
BOOL bRet = ::GetVersionEx(&ovi);
|
||||||
return ((bRet != FALSE) && (ovi.dwMajorVersion >= 6));
|
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
|
#endif // !_WIN32_WCE
|
||||||
|
|
||||||
inline int SizeOf_REBARBANDINFO()
|
inline int SizeOf_REBARBANDINFO()
|
||||||
|
@ -848,7 +942,9 @@ namespace SecureHelper
|
||||||
return _vstprintf_s(lpstrBuff, cchBuff, lpstrFormat, args);
|
return _vstprintf_s(lpstrBuff, cchBuff, lpstrFormat, args);
|
||||||
#else
|
#else
|
||||||
cchBuff; // Avoid unused argument warning
|
cchBuff; // Avoid unused argument warning
|
||||||
|
#pragma warning(disable: 4996)
|
||||||
return _vstprintf(lpstrBuff, lpstrFormat, args);
|
return _vstprintf(lpstrBuff, lpstrFormat, args);
|
||||||
|
#pragma warning(default: 4996)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -882,6 +978,91 @@ namespace SecureHelper
|
||||||
}; // 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
|
// 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)
|
// 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
|
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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,6 +14,10 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef __ATLAPP_H__
|
||||||
|
#error atlcrack.h requires atlapp.h to be included first
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Message map macro for cracked handlers
|
// Message map macro for cracked handlers
|
||||||
|
@ -566,7 +570,7 @@ public: \
|
||||||
return TRUE; \
|
return TRUE; \
|
||||||
}
|
}
|
||||||
|
|
||||||
// void OnNcPaint(CRgn rgn)
|
// void OnNcPaint(CRgnHandle rgn)
|
||||||
#define MSG_WM_NCPAINT(func) \
|
#define MSG_WM_NCPAINT(func) \
|
||||||
if (uMsg == WM_NCPAINT) \
|
if (uMsg == WM_NCPAINT) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -795,7 +799,7 @@ public: \
|
||||||
return TRUE; \
|
return TRUE; \
|
||||||
}
|
}
|
||||||
|
|
||||||
// void OnSysCommand(UINT nID, LPARAM lParam)
|
// void OnSysCommand(UINT nID, CPoint point)
|
||||||
#define MSG_WM_SYSCOMMAND(func) \
|
#define MSG_WM_SYSCOMMAND(func) \
|
||||||
if (uMsg == WM_SYSCOMMAND) \
|
if (uMsg == WM_SYSCOMMAND) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -850,7 +854,7 @@ public: \
|
||||||
return TRUE; \
|
return TRUE; \
|
||||||
}
|
}
|
||||||
|
|
||||||
// void OnInitMenu(CMenu menu)
|
// void OnInitMenu(CMenuHandle menu)
|
||||||
#define MSG_WM_INITMENU(func) \
|
#define MSG_WM_INITMENU(func) \
|
||||||
if (uMsg == WM_INITMENU) \
|
if (uMsg == WM_INITMENU) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -861,7 +865,7 @@ public: \
|
||||||
return TRUE; \
|
return TRUE; \
|
||||||
}
|
}
|
||||||
|
|
||||||
// void OnInitMenuPopup(CMenu menuPopup, UINT nIndex, BOOL bSysMenu)
|
// void OnInitMenuPopup(CMenuHandle menuPopup, UINT nIndex, BOOL bSysMenu)
|
||||||
#define MSG_WM_INITMENUPOPUP(func) \
|
#define MSG_WM_INITMENUPOPUP(func) \
|
||||||
if (uMsg == WM_INITMENUPOPUP) \
|
if (uMsg == WM_INITMENUPOPUP) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -872,7 +876,7 @@ public: \
|
||||||
return TRUE; \
|
return TRUE; \
|
||||||
}
|
}
|
||||||
|
|
||||||
// void OnMenuSelect(UINT nItemID, UINT nFlags, CMenu menu)
|
// void OnMenuSelect(UINT nItemID, UINT nFlags, CMenuHandle menu)
|
||||||
#define MSG_WM_MENUSELECT(func) \
|
#define MSG_WM_MENUSELECT(func) \
|
||||||
if (uMsg == WM_MENUSELECT) \
|
if (uMsg == WM_MENUSELECT) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -883,7 +887,7 @@ public: \
|
||||||
return TRUE; \
|
return TRUE; \
|
||||||
}
|
}
|
||||||
|
|
||||||
// LRESULT OnMenuChar(UINT nChar, UINT nFlags, CMenu menu)
|
// LRESULT OnMenuChar(UINT nChar, UINT nFlags, CMenuHandle menu)
|
||||||
#define MSG_WM_MENUCHAR(func) \
|
#define MSG_WM_MENUCHAR(func) \
|
||||||
if (uMsg == WM_MENUCHAR) \
|
if (uMsg == WM_MENUCHAR) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -1544,7 +1548,7 @@ public: \
|
||||||
return TRUE; \
|
return TRUE; \
|
||||||
}
|
}
|
||||||
|
|
||||||
// void OnSetFont(CFont font, BOOL bRedraw)
|
// void OnSetFont(CFontHandle font, BOOL bRedraw)
|
||||||
#define MSG_WM_SETFONT(func) \
|
#define MSG_WM_SETFONT(func) \
|
||||||
if (uMsg == WM_SETFONT) \
|
if (uMsg == WM_SETFONT) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -1638,7 +1642,7 @@ public: \
|
||||||
|
|
||||||
#if(WINVER >= 0x0500)
|
#if(WINVER >= 0x0500)
|
||||||
|
|
||||||
// void OnMenuRButtonUp(WPARAM wParam, CMenu menu)
|
// void OnMenuRButtonUp(WPARAM wParam, CMenuHandle menu)
|
||||||
#define MSG_WM_MENURBUTTONUP(func) \
|
#define MSG_WM_MENURBUTTONUP(func) \
|
||||||
if (uMsg == WM_MENURBUTTONUP) \
|
if (uMsg == WM_MENURBUTTONUP) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -1649,7 +1653,7 @@ public: \
|
||||||
return TRUE; \
|
return TRUE; \
|
||||||
}
|
}
|
||||||
|
|
||||||
// LRESULT OnMenuDrag(WPARAM wParam, CMenu menu)
|
// LRESULT OnMenuDrag(WPARAM wParam, CMenuHandle menu)
|
||||||
#define MSG_WM_MENUDRAG(func) \
|
#define MSG_WM_MENUDRAG(func) \
|
||||||
if (uMsg == WM_MENUDRAG) \
|
if (uMsg == WM_MENUDRAG) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -1669,7 +1673,7 @@ public: \
|
||||||
return TRUE; \
|
return TRUE; \
|
||||||
}
|
}
|
||||||
|
|
||||||
// void OnUnInitMenuPopup(UINT nID, CMenu menu)
|
// void OnUnInitMenuPopup(UINT nID, CMenuHandle menu)
|
||||||
#define MSG_WM_UNINITMENUPOPUP(func) \
|
#define MSG_WM_UNINITMENUPOPUP(func) \
|
||||||
if (uMsg == WM_UNINITMENUPOPUP) \
|
if (uMsg == WM_UNINITMENUPOPUP) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -1680,7 +1684,7 @@ public: \
|
||||||
return TRUE; \
|
return TRUE; \
|
||||||
}
|
}
|
||||||
|
|
||||||
// void OnMenuCommand(WPARAM nIndex, CMenu menu)
|
// void OnMenuCommand(WPARAM nIndex, CMenuHandle menu)
|
||||||
#define MSG_WM_MENUCOMMAND(func) \
|
#define MSG_WM_MENUCOMMAND(func) \
|
||||||
if (uMsg == WM_MENUCOMMAND) \
|
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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ATLAPP_H__
|
#ifndef __ATLAPP_H__
|
||||||
#error atlctrls.h requires atlapp.h to be included first
|
#error atlctrls.h requires atlapp.h to be included first
|
||||||
#endif
|
#endif
|
||||||
|
@ -26,10 +22,6 @@
|
||||||
#error atlctrls.h requires atlwin.h to be included first
|
#error atlctrls.h requires atlwin.h to be included first
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (_WIN32_IE < 0x0300)
|
|
||||||
#error atlctrls.h requires IE Version 3.0 or higher
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
#include <richedit.h>
|
#include <richedit.h>
|
||||||
#include <richole.h>
|
#include <richole.h>
|
||||||
|
@ -3922,15 +3914,19 @@ public:
|
||||||
}
|
}
|
||||||
#endif // (_WIN32_WINNT >= 0x0600)
|
#endif // (_WIN32_WINNT >= 0x0600)
|
||||||
|
|
||||||
// single-selection only
|
// Note: selects only one item
|
||||||
BOOL SelectItem(int nIndex)
|
BOOL SelectItem(int nIndex)
|
||||||
{
|
{
|
||||||
ATLASSERT(::IsWindow(m_hWnd));
|
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);
|
BOOL bRet = SetItemState(nIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
|
||||||
if(bRet)
|
if(bRet)
|
||||||
bRet = EnsureVisible(nIndex, FALSE);
|
bRet = EnsureVisible(nIndex, FALSE);
|
||||||
|
|
||||||
return bRet;
|
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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _WIN32_WCE
|
#ifdef _WIN32_WCE
|
||||||
#error atlctrlw.h is not supported on Windows CE
|
#error atlctrlw.h is not supported on Windows CE
|
||||||
#endif
|
#endif
|
||||||
|
@ -3147,16 +3143,16 @@ public:
|
||||||
void _AddVistaBitmapsFromImageList(int nStartIndex, int nCount)
|
void _AddVistaBitmapsFromImageList(int nStartIndex, int nCount)
|
||||||
{
|
{
|
||||||
// Create display compatible memory DC
|
// Create display compatible memory DC
|
||||||
HDC hDC = ::GetDC(NULL);
|
CClientDC dc(NULL);
|
||||||
CDC dcMem;
|
CDC dcMem;
|
||||||
dcMem.CreateCompatibleDC(hDC);
|
dcMem.CreateCompatibleDC(dc);
|
||||||
HBITMAP hBitmapSave = dcMem.GetCurrentBitmap();
|
HBITMAP hBitmapSave = dcMem.GetCurrentBitmap();
|
||||||
|
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
// Create bitmaps for all menu items
|
// Create bitmaps for all menu items
|
||||||
for(int i = 0; i < nCount; i++)
|
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);
|
dcMem.SelectBitmap(hBitmapSave);
|
||||||
m_arrVistaBitmap.Add(hBitmap);
|
m_arrVistaBitmap.Add(hBitmap);
|
||||||
}
|
}
|
||||||
|
@ -3165,14 +3161,14 @@ public:
|
||||||
void _AddVistaBitmapFromImageList(int nIndex)
|
void _AddVistaBitmapFromImageList(int nIndex)
|
||||||
{
|
{
|
||||||
// Create display compatible memory DC
|
// Create display compatible memory DC
|
||||||
HDC hDC = ::GetDC(NULL);
|
CClientDC dc(NULL);
|
||||||
CDC dcMem;
|
CDC dcMem;
|
||||||
dcMem.CreateCompatibleDC(hDC);
|
dcMem.CreateCompatibleDC(dc);
|
||||||
HBITMAP hBitmapSave = dcMem.GetCurrentBitmap();
|
HBITMAP hBitmapSave = dcMem.GetCurrentBitmap();
|
||||||
|
|
||||||
// Create bitmap for menu item
|
// Create bitmap for menu item
|
||||||
T* pT = static_cast<T*>(this);
|
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
|
// Select saved bitmap back and add bitmap to the array
|
||||||
dcMem.SelectBitmap(hBitmapSave);
|
dcMem.SelectBitmap(hBitmapSave);
|
||||||
|
@ -3186,14 +3182,14 @@ public:
|
||||||
::DeleteObject(m_arrVistaBitmap[nIndex]);
|
::DeleteObject(m_arrVistaBitmap[nIndex]);
|
||||||
|
|
||||||
// Create display compatible memory DC
|
// Create display compatible memory DC
|
||||||
HDC hDC = ::GetDC(NULL);
|
CClientDC dc(NULL);
|
||||||
CDC dcMem;
|
CDC dcMem;
|
||||||
dcMem.CreateCompatibleDC(hDC);
|
dcMem.CreateCompatibleDC(dc);
|
||||||
HBITMAP hBitmapSave = dcMem.GetCurrentBitmap();
|
HBITMAP hBitmapSave = dcMem.GetCurrentBitmap();
|
||||||
|
|
||||||
// Create bitmap for menu item
|
// Create bitmap for menu item
|
||||||
T* pT = static_cast<T*>(this);
|
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
|
// Select saved bitmap back and replace bitmap in the array
|
||||||
dcMem.SelectBitmap(hBitmapSave);
|
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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ATLAPP_H__
|
#ifndef __ATLAPP_H__
|
||||||
#error atlctrlx.h requires atlapp.h to be included first
|
#error atlctrlx.h requires atlapp.h to be included first
|
||||||
#endif
|
#endif
|
||||||
|
@ -52,8 +48,6 @@
|
||||||
// CTabViewImpl<T, TBase, TWinTraits>
|
// CTabViewImpl<T, TBase, TWinTraits>
|
||||||
// CTabView
|
// CTabView
|
||||||
|
|
||||||
#include <ShellAPI.h>
|
|
||||||
|
|
||||||
namespace WTL
|
namespace WTL
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -572,7 +566,6 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class CBitmapButton : public CBitmapButtonImpl<CBitmapButton>
|
class CBitmapButton : public CBitmapButtonImpl<CBitmapButton>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -759,14 +752,16 @@ __declspec(selectany) struct
|
||||||
};
|
};
|
||||||
#endif // (WINVER < 0x0500) && !defined(_WIN32_WCE)
|
#endif // (WINVER < 0x0500) && !defined(_WIN32_WCE)
|
||||||
|
|
||||||
#define HLINK_UNDERLINED 0x00000000
|
#define HLINK_UNDERLINED 0x00000000
|
||||||
#define HLINK_NOTUNDERLINED 0x00000001
|
#define HLINK_NOTUNDERLINED 0x00000001
|
||||||
#define HLINK_UNDERLINEHOVER 0x00000002
|
#define HLINK_UNDERLINEHOVER 0x00000002
|
||||||
#define HLINK_COMMANDBUTTON 0x00000004
|
#define HLINK_COMMANDBUTTON 0x00000004
|
||||||
#define HLINK_NOTIFYBUTTON 0x0000000C
|
#define HLINK_NOTIFYBUTTON 0x0000000C
|
||||||
#define HLINK_USETAGS 0x00000010
|
#define HLINK_USETAGS 0x00000010
|
||||||
#define HLINK_USETAGSBOLD 0x00000030
|
#define HLINK_USETAGSBOLD 0x00000030
|
||||||
#define HLINK_NOTOOLTIP 0x00000040
|
#define HLINK_NOTOOLTIP 0x00000040
|
||||||
|
#define HLINK_AUTOCREATELINKFONT 0x00000080
|
||||||
|
#define HLINK_SINGLELINE 0x00000100
|
||||||
|
|
||||||
// Notes:
|
// Notes:
|
||||||
// - HLINK_USETAGS and HLINK_USETAGSBOLD are always left-aligned
|
// - HLINK_USETAGS and HLINK_USETAGSBOLD are always left-aligned
|
||||||
|
@ -780,7 +775,7 @@ public:
|
||||||
LPTSTR m_lpstrHyperLink;
|
LPTSTR m_lpstrHyperLink;
|
||||||
|
|
||||||
HCURSOR m_hCursor;
|
HCURSOR m_hCursor;
|
||||||
HFONT m_hFont;
|
HFONT m_hFontLink;
|
||||||
HFONT m_hFontNormal;
|
HFONT m_hFontNormal;
|
||||||
|
|
||||||
RECT m_rcLink;
|
RECT m_rcLink;
|
||||||
|
@ -797,16 +792,17 @@ public:
|
||||||
bool m_bVisited:1;
|
bool m_bVisited:1;
|
||||||
bool m_bHover:1;
|
bool m_bHover:1;
|
||||||
bool m_bInternalLinkFont:1;
|
bool m_bInternalLinkFont:1;
|
||||||
|
bool m_bInternalNormalFont:1;
|
||||||
|
|
||||||
|
|
||||||
// Constructor/Destructor
|
// Constructor/Destructor
|
||||||
CHyperLinkImpl(DWORD dwExtendedStyle = HLINK_UNDERLINED) :
|
CHyperLinkImpl(DWORD dwExtendedStyle = HLINK_UNDERLINED) :
|
||||||
m_lpstrLabel(NULL), m_lpstrHyperLink(NULL),
|
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_clrLink(RGB(0, 0, 255)), m_clrVisited(RGB(128, 0, 128)),
|
||||||
m_dwExtendedStyle(dwExtendedStyle),
|
m_dwExtendedStyle(dwExtendedStyle),
|
||||||
m_bPaintLabel(true), m_bVisited(false),
|
m_bPaintLabel(true), m_bVisited(false),
|
||||||
m_bHover(false), m_bInternalLinkFont(false)
|
m_bHover(false), m_bInternalLinkFont(false), m_bInternalNormalFont(false)
|
||||||
{
|
{
|
||||||
::SetRectEmpty(&m_rcLink);
|
::SetRectEmpty(&m_rcLink);
|
||||||
}
|
}
|
||||||
|
@ -815,8 +811,6 @@ public:
|
||||||
{
|
{
|
||||||
delete [] m_lpstrLabel;
|
delete [] m_lpstrLabel;
|
||||||
delete [] m_lpstrHyperLink;
|
delete [] m_lpstrHyperLink;
|
||||||
if(m_bInternalLinkFont && m_hFont != NULL)
|
|
||||||
::DeleteObject(m_hFont);
|
|
||||||
#if (WINVER < 0x0500) && !defined(_WIN32_WCE)
|
#if (WINVER < 0x0500) && !defined(_WIN32_WCE)
|
||||||
// It was created, not loaded, so we have to destroy it
|
// It was created, not loaded, so we have to destroy it
|
||||||
if(m_hCursor != NULL)
|
if(m_hCursor != NULL)
|
||||||
|
@ -912,17 +906,21 @@ public:
|
||||||
|
|
||||||
HFONT GetLinkFont() const
|
HFONT GetLinkFont() const
|
||||||
{
|
{
|
||||||
return m_hFont;
|
return m_hFontLink;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetLinkFont(HFONT hFont)
|
void SetLinkFont(HFONT hFont)
|
||||||
{
|
{
|
||||||
if(m_bInternalLinkFont && m_hFont != NULL)
|
if(m_bInternalLinkFont)
|
||||||
{
|
{
|
||||||
::DeleteObject(m_hFont);
|
::DeleteObject(m_hFontLink);
|
||||||
m_bInternalLinkFont = false;
|
m_bInternalLinkFont = false;
|
||||||
}
|
}
|
||||||
m_hFont = hFont;
|
|
||||||
|
m_hFontLink = hFont;
|
||||||
|
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
pT->CalcLabelRect();
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetIdealHeight() const
|
int GetIdealHeight() const
|
||||||
|
@ -933,15 +931,17 @@ public:
|
||||||
if(!m_bPaintLabel)
|
if(!m_bPaintLabel)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
UINT uFormat = IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK;
|
||||||
|
|
||||||
CClientDC dc(m_hWnd);
|
CClientDC dc(m_hWnd);
|
||||||
RECT rect = { 0 };
|
RECT rect = { 0 };
|
||||||
GetClientRect(&rect);
|
GetClientRect(&rect);
|
||||||
HFONT hFontOld = dc.SelectFont(m_hFontNormal);
|
HFONT hFontOld = dc.SelectFont(m_hFontNormal);
|
||||||
RECT rcText = rect;
|
RECT rcText = rect;
|
||||||
dc.DrawText(_T("NS"), -1, &rcText, DT_LEFT | DT_WORDBREAK | DT_CALCRECT);
|
dc.DrawText(_T("NS"), -1, &rcText, DT_LEFT | uFormat | DT_CALCRECT);
|
||||||
dc.SelectFont(m_hFont);
|
dc.SelectFont(m_hFontLink);
|
||||||
RECT rcLink = rect;
|
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);
|
dc.SelectFont(hFontOld);
|
||||||
return max(rcText.bottom - rcText.top, rcLink.bottom - rcLink.top);
|
return max(rcText.bottom - rcText.top, rcLink.bottom - rcLink.top);
|
||||||
}
|
}
|
||||||
|
@ -985,17 +985,19 @@ public:
|
||||||
pT->CalcLabelParts(lpstrLeft, cchLeft, lpstrLink, cchLink, lpstrRight, cchRight);
|
pT->CalcLabelParts(lpstrLeft, cchLeft, lpstrLink, cchLink, lpstrRight, cchRight);
|
||||||
|
|
||||||
// get label part rects
|
// get label part rects
|
||||||
|
UINT uFormat = IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK;
|
||||||
|
|
||||||
HFONT hFontOld = dc.SelectFont(m_hFontNormal);
|
HFONT hFontOld = dc.SelectFont(m_hFontNormal);
|
||||||
RECT rcLeft = rcClient;
|
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 };
|
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);
|
dc.SelectFont(m_hFontNormal);
|
||||||
RECT rcRight = { rcLink.right, rcLink.top, rcClient.right, rcClient.bottom };
|
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);
|
dc.SelectFont(hFontOld);
|
||||||
|
|
||||||
|
@ -1005,17 +1007,18 @@ public:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
HFONT hOldFont = NULL;
|
HFONT hOldFont = NULL;
|
||||||
if(m_hFont != NULL)
|
if(m_hFontLink != NULL)
|
||||||
hOldFont = dc.SelectFont(m_hFont);
|
hOldFont = dc.SelectFont(m_hFontLink);
|
||||||
LPTSTR lpstrText = (m_lpstrLabel != NULL) ? m_lpstrLabel : m_lpstrHyperLink;
|
LPTSTR lpstrText = (m_lpstrLabel != NULL) ? m_lpstrLabel : m_lpstrHyperLink;
|
||||||
DWORD dwStyle = GetStyle();
|
DWORD dwStyle = GetStyle();
|
||||||
int nDrawStyle = DT_LEFT;
|
UINT uFormat = DT_LEFT;
|
||||||
if (dwStyle & SS_CENTER)
|
if (dwStyle & SS_CENTER)
|
||||||
nDrawStyle = DT_CENTER;
|
uFormat = DT_CENTER;
|
||||||
else if (dwStyle & SS_RIGHT)
|
else if (dwStyle & SS_RIGHT)
|
||||||
nDrawStyle = DT_RIGHT;
|
uFormat = DT_RIGHT;
|
||||||
dc.DrawText(lpstrText, -1, &rcAll, nDrawStyle | DT_WORDBREAK | DT_CALCRECT);
|
uFormat |= IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK;
|
||||||
if(m_hFont != NULL)
|
dc.DrawText(lpstrText, -1, &rcAll, uFormat | DT_CALCRECT);
|
||||||
|
if(m_hFontLink != NULL)
|
||||||
dc.SelectFont(hOldFont);
|
dc.SelectFont(hOldFont);
|
||||||
if (dwStyle & SS_CENTER)
|
if (dwStyle & SS_CENTER)
|
||||||
{
|
{
|
||||||
|
@ -1053,6 +1056,8 @@ public:
|
||||||
{
|
{
|
||||||
ATLASSERT(m_hWnd == NULL);
|
ATLASSERT(m_hWnd == NULL);
|
||||||
ATLASSERT(::IsWindow(hWnd));
|
ATLASSERT(::IsWindow(hWnd));
|
||||||
|
if(m_hFontNormal == NULL)
|
||||||
|
m_hFontNormal = (HFONT)::SendMessage(hWnd, WM_GETFONT, 0, 0L);
|
||||||
#if (_MSC_VER >= 1300)
|
#if (_MSC_VER >= 1300)
|
||||||
BOOL bRet = ATL::CWindowImpl< T, TBase, TWinTraits>::SubclassWindow(hWnd);
|
BOOL bRet = ATL::CWindowImpl< T, TBase, TWinTraits>::SubclassWindow(hWnd);
|
||||||
#else // !(_MSC_VER >= 1300)
|
#else // !(_MSC_VER >= 1300)
|
||||||
|
@ -1102,6 +1107,28 @@ public:
|
||||||
return bRet;
|
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
|
// Message map and handlers
|
||||||
BEGIN_MSG_MAP(CHyperLinkImpl)
|
BEGIN_MSG_MAP(CHyperLinkImpl)
|
||||||
MESSAGE_HANDLER(WM_CREATE, OnCreate)
|
MESSAGE_HANDLER(WM_CREATE, OnCreate)
|
||||||
|
@ -1147,6 +1174,21 @@ public:
|
||||||
m_tip.DestroyWindow();
|
m_tip.DestroyWindow();
|
||||||
m_tip.m_hWnd = NULL;
|
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;
|
bHandled = FALSE;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -1315,12 +1357,28 @@ public:
|
||||||
|
|
||||||
LRESULT OnSetFont(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
|
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;
|
m_hFontNormal = (HFONT)wParam;
|
||||||
|
|
||||||
|
if(bCreateLinkFont || IsAutoCreateLinkFont())
|
||||||
|
CreateLinkFontFromNormal();
|
||||||
|
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
pT->CalcLabelRect();
|
||||||
|
|
||||||
if((BOOL)lParam)
|
if((BOOL)lParam)
|
||||||
{
|
{
|
||||||
Invalidate();
|
Invalidate();
|
||||||
UpdateWindow();
|
UpdateWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1373,26 +1431,17 @@ public:
|
||||||
#endif
|
#endif
|
||||||
ATLASSERT(m_hCursor != NULL);
|
ATLASSERT(m_hCursor != NULL);
|
||||||
|
|
||||||
// set font
|
// set fonts
|
||||||
if(m_bPaintLabel)
|
if(m_bPaintLabel)
|
||||||
{
|
{
|
||||||
ATL::CWindow wnd = GetParent();
|
|
||||||
m_hFontNormal = wnd.GetFont();
|
|
||||||
if(m_hFontNormal == NULL)
|
if(m_hFontNormal == NULL)
|
||||||
m_hFontNormal = (HFONT)::GetStockObject(SYSTEM_FONT);
|
|
||||||
if(m_hFontNormal != NULL && m_hFont == NULL)
|
|
||||||
{
|
{
|
||||||
LOGFONT lf = { 0 };
|
m_hFontNormal = AtlCreateControlFont();
|
||||||
CFontHandle font = m_hFontNormal;
|
m_bInternalNormalFont = true;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(m_hFontLink == NULL)
|
||||||
|
CreateLinkFontFromNormal();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
|
@ -1407,11 +1456,9 @@ public:
|
||||||
int nLen = GetWindowTextLength();
|
int nLen = GetWindowTextLength();
|
||||||
if(nLen > 0)
|
if(nLen > 0)
|
||||||
{
|
{
|
||||||
CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
|
ATLTRY(m_lpstrLabel = new TCHAR[nLen + 1]);
|
||||||
LPTSTR lpstrText = buff.Allocate(nLen + 1);
|
if(m_lpstrLabel != NULL)
|
||||||
ATLASSERT(lpstrText != NULL);
|
ATLVERIFY(GetWindowText(m_lpstrLabel, nLen + 1) > 0);
|
||||||
if((lpstrText != NULL) && (GetWindowText(lpstrText, nLen + 1) > 0))
|
|
||||||
SetLabel(lpstrText);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1435,20 +1482,15 @@ public:
|
||||||
// set link colors
|
// set link colors
|
||||||
if(m_bPaintLabel)
|
if(m_bPaintLabel)
|
||||||
{
|
{
|
||||||
ATL::CRegKey rk;
|
CRegKeyEx rk;
|
||||||
LONG lRet = rk.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Internet Explorer\\Settings"));
|
LONG lRet = rk.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Internet Explorer\\Settings"));
|
||||||
if(lRet == 0)
|
if(lRet == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
const int cchValue = 12;
|
const int cchValue = 12;
|
||||||
TCHAR szValue[cchValue] = { 0 };
|
TCHAR szValue[cchValue] = { 0 };
|
||||||
#if (_ATL_VER >= 0x0700)
|
|
||||||
ULONG ulCount = cchValue;
|
ULONG ulCount = cchValue;
|
||||||
lRet = rk.QueryStringValue(_T("Anchor Color"), szValue, &ulCount);
|
lRet = rk.QueryStringValue(_T("Anchor Color"), szValue, &ulCount);
|
||||||
#else
|
if(lRet == ERROR_SUCCESS)
|
||||||
DWORD dwCount = cchValue * sizeof(TCHAR);
|
|
||||||
lRet = rk.QueryValue(szValue, _T("Anchor Color"), &dwCount);
|
|
||||||
#endif
|
|
||||||
if(lRet == 0)
|
|
||||||
{
|
{
|
||||||
COLORREF clr = pT->_ParseColorString(szValue);
|
COLORREF clr = pT->_ParseColorString(szValue);
|
||||||
ATLASSERT(clr != CLR_INVALID);
|
ATLASSERT(clr != CLR_INVALID);
|
||||||
|
@ -1456,14 +1498,9 @@ public:
|
||||||
m_clrLink = clr;
|
m_clrLink = clr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (_ATL_VER >= 0x0700)
|
|
||||||
ulCount = cchValue;
|
ulCount = cchValue;
|
||||||
lRet = rk.QueryStringValue(_T("Anchor Color Visited"), szValue, &ulCount);
|
lRet = rk.QueryStringValue(_T("Anchor Color Visited"), szValue, &ulCount);
|
||||||
#else
|
if(lRet == ERROR_SUCCESS)
|
||||||
dwCount = cchValue * sizeof(TCHAR);
|
|
||||||
lRet = rk.QueryValue(szValue, _T("Anchor Color Visited"), &dwCount);
|
|
||||||
#endif
|
|
||||||
if(lRet == 0)
|
|
||||||
{
|
{
|
||||||
COLORREF clr = pT->_ParseColorString(szValue);
|
COLORREF clr = pT->_ParseColorString(szValue);
|
||||||
ATLASSERT(clr != CLR_INVALID);
|
ATLASSERT(clr != CLR_INVALID);
|
||||||
|
@ -1485,7 +1522,7 @@ public:
|
||||||
if(*p == _T(','))
|
if(*p == _T(','))
|
||||||
{
|
{
|
||||||
*p = _T('\0');
|
*p = _T('\0');
|
||||||
c[i] = T::_xttoi(lpstr);
|
c[i] = MinCrtHelper::_atoi(lpstr);
|
||||||
lpstr = &p[1];
|
lpstr = &p[1];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1495,7 +1532,7 @@ public:
|
||||||
}
|
}
|
||||||
if(*lpstr == _T('\0'))
|
if(*lpstr == _T('\0'))
|
||||||
return CLR_INVALID;
|
return CLR_INVALID;
|
||||||
c[2] = T::_xttoi(lpstr);
|
c[2] = MinCrtHelper::_atoi(lpstr);
|
||||||
|
|
||||||
return RGB(c[0], c[1], c[2]);
|
return RGB(c[0], c[1], c[2]);
|
||||||
}
|
}
|
||||||
|
@ -1532,15 +1569,17 @@ public:
|
||||||
// get label part rects
|
// get label part rects
|
||||||
HFONT hFontOld = dc.SelectFont(m_hFontNormal);
|
HFONT hFontOld = dc.SelectFont(m_hFontNormal);
|
||||||
|
|
||||||
|
UINT uFormat = IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK;
|
||||||
|
|
||||||
RECT rcLeft = rcClient;
|
RECT rcLeft = rcClient;
|
||||||
if(lpstrLeft != NULL)
|
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;
|
RECT rcLink = rcClient;
|
||||||
if(lpstrLeft != NULL)
|
if(lpstrLeft != NULL)
|
||||||
rcLink.left = rcLeft.right;
|
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);
|
dc.SelectFont(hFontOld);
|
||||||
|
|
||||||
|
@ -1549,17 +1588,18 @@ public:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
HFONT hOldFont = NULL;
|
HFONT hOldFont = NULL;
|
||||||
if(m_hFont != NULL)
|
if(m_hFontLink != NULL)
|
||||||
hOldFont = dc.SelectFont(m_hFont);
|
hOldFont = dc.SelectFont(m_hFontLink);
|
||||||
LPTSTR lpstrText = (m_lpstrLabel != NULL) ? m_lpstrLabel : m_lpstrHyperLink;
|
LPTSTR lpstrText = (m_lpstrLabel != NULL) ? m_lpstrLabel : m_lpstrHyperLink;
|
||||||
DWORD dwStyle = GetStyle();
|
DWORD dwStyle = GetStyle();
|
||||||
int nDrawStyle = DT_LEFT;
|
UINT uFormat = DT_LEFT;
|
||||||
if (dwStyle & SS_CENTER)
|
if (dwStyle & SS_CENTER)
|
||||||
nDrawStyle = DT_CENTER;
|
uFormat = DT_CENTER;
|
||||||
else if (dwStyle & SS_RIGHT)
|
else if (dwStyle & SS_RIGHT)
|
||||||
nDrawStyle = DT_RIGHT;
|
uFormat = DT_RIGHT;
|
||||||
dc.DrawText(lpstrText, -1, &m_rcLink, nDrawStyle | DT_WORDBREAK | DT_CALCRECT);
|
uFormat |= IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK;
|
||||||
if(m_hFont != NULL)
|
dc.DrawText(lpstrText, -1, &m_rcLink, uFormat | DT_CALCRECT);
|
||||||
|
if(m_hFontLink != NULL)
|
||||||
dc.SelectFont(hOldFont);
|
dc.SelectFont(hOldFont);
|
||||||
if (dwStyle & SS_CENTER)
|
if (dwStyle & SS_CENTER)
|
||||||
{
|
{
|
||||||
|
@ -1656,23 +1696,25 @@ public:
|
||||||
dc.SetBkMode(TRANSPARENT);
|
dc.SetBkMode(TRANSPARENT);
|
||||||
HFONT hFontOld = dc.SelectFont(m_hFontNormal);
|
HFONT hFontOld = dc.SelectFont(m_hFontNormal);
|
||||||
|
|
||||||
|
UINT uFormat = IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK;
|
||||||
|
|
||||||
if(lpstrLeft != NULL)
|
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)));
|
COLORREF clrOld = dc.SetTextColor(IsWindowEnabled() ? (m_bVisited ? m_clrVisited : m_clrLink) : (::GetSysColor(COLOR_GRAYTEXT)));
|
||||||
if(m_hFont != NULL && (!IsUnderlineHover() || (IsUnderlineHover() && m_bHover)))
|
if(m_hFontLink != NULL && (!IsUnderlineHover() || (IsUnderlineHover() && m_bHover)))
|
||||||
dc.SelectFont(m_hFont);
|
dc.SelectFont(m_hFontLink);
|
||||||
else
|
else
|
||||||
dc.SelectFont(m_hFontNormal);
|
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.SetTextColor(clrOld);
|
||||||
dc.SelectFont(m_hFontNormal);
|
dc.SelectFont(m_hFontNormal);
|
||||||
if(lpstrRight != NULL)
|
if(lpstrRight != NULL)
|
||||||
{
|
{
|
||||||
RECT rcRight = { m_rcLink.right, m_rcLink.top, rcClient.right, rcClient.bottom };
|
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)
|
if(GetFocus() == m_hWnd)
|
||||||
|
@ -1686,21 +1728,22 @@ public:
|
||||||
COLORREF clrOld = dc.SetTextColor(IsWindowEnabled() ? (m_bVisited ? m_clrVisited : m_clrLink) : (::GetSysColor(COLOR_GRAYTEXT)));
|
COLORREF clrOld = dc.SetTextColor(IsWindowEnabled() ? (m_bVisited ? m_clrVisited : m_clrLink) : (::GetSysColor(COLOR_GRAYTEXT)));
|
||||||
|
|
||||||
HFONT hFontOld = NULL;
|
HFONT hFontOld = NULL;
|
||||||
if(m_hFont != NULL && (!IsUnderlineHover() || (IsUnderlineHover() && m_bHover)))
|
if(m_hFontLink != NULL && (!IsUnderlineHover() || (IsUnderlineHover() && m_bHover)))
|
||||||
hFontOld = dc.SelectFont(m_hFont);
|
hFontOld = dc.SelectFont(m_hFontLink);
|
||||||
else
|
else
|
||||||
hFontOld = dc.SelectFont(m_hFontNormal);
|
hFontOld = dc.SelectFont(m_hFontNormal);
|
||||||
|
|
||||||
LPTSTR lpstrText = (m_lpstrLabel != NULL) ? m_lpstrLabel : m_lpstrHyperLink;
|
LPTSTR lpstrText = (m_lpstrLabel != NULL) ? m_lpstrLabel : m_lpstrHyperLink;
|
||||||
|
|
||||||
DWORD dwStyle = GetStyle();
|
DWORD dwStyle = GetStyle();
|
||||||
int nDrawStyle = DT_LEFT;
|
UINT uFormat = DT_LEFT;
|
||||||
if (dwStyle & SS_CENTER)
|
if (dwStyle & SS_CENTER)
|
||||||
nDrawStyle = DT_CENTER;
|
uFormat = DT_CENTER;
|
||||||
else if (dwStyle & SS_RIGHT)
|
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)
|
if(GetFocus() == m_hWnd)
|
||||||
dc.DrawFocusRect(&m_rcLink);
|
dc.DrawFocusRect(&m_rcLink);
|
||||||
|
@ -1762,33 +1805,17 @@ public:
|
||||||
return ((m_dwExtendedStyle & HLINK_NOTOOLTIP) == 0);
|
return ((m_dwExtendedStyle & HLINK_NOTOOLTIP) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _xttoi(const TCHAR* nptr)
|
bool IsAutoCreateLinkFont() const
|
||||||
{
|
{
|
||||||
#ifndef _ATL_MIN_CRT
|
return ((m_dwExtendedStyle & HLINK_AUTOCREATELINKFONT) == HLINK_AUTOCREATELINKFONT);
|
||||||
return _ttoi(nptr);
|
}
|
||||||
#else // _ATL_MIN_CRT
|
|
||||||
while(*nptr == _T(' ')) // skip spaces
|
|
||||||
++nptr;
|
|
||||||
|
|
||||||
int c = (int)(_TUCHAR)*nptr++;
|
bool IsSingleLine() const
|
||||||
int sign = c; // save sign indication
|
{
|
||||||
if (c == _T('-') || c == _T('+'))
|
return ((m_dwExtendedStyle & HLINK_SINGLELINE) == HLINK_SINGLELINE);
|
||||||
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
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class CHyperLink : public CHyperLinkImpl<CHyperLink>
|
class CHyperLink : public CHyperLinkImpl<CHyperLink>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -2244,10 +2271,12 @@ public:
|
||||||
int m_cxyHeader;
|
int m_cxyHeader;
|
||||||
TCHAR m_szTitle[m_cchTitle];
|
TCHAR m_szTitle[m_cchTitle];
|
||||||
DWORD m_dwExtendedStyle; // Pane container specific extended styles
|
DWORD m_dwExtendedStyle; // Pane container specific extended styles
|
||||||
|
HFONT m_hFont;
|
||||||
|
bool m_bInternalFont;
|
||||||
|
|
||||||
|
|
||||||
// Constructor
|
// 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;
|
m_szTitle[0] = 0;
|
||||||
}
|
}
|
||||||
|
@ -2391,8 +2420,11 @@ public:
|
||||||
// Message map and handlers
|
// Message map and handlers
|
||||||
BEGIN_MSG_MAP(CPaneContainerImpl)
|
BEGIN_MSG_MAP(CPaneContainerImpl)
|
||||||
MESSAGE_HANDLER(WM_CREATE, OnCreate)
|
MESSAGE_HANDLER(WM_CREATE, OnCreate)
|
||||||
|
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
|
||||||
MESSAGE_HANDLER(WM_SIZE, OnSize)
|
MESSAGE_HANDLER(WM_SIZE, OnSize)
|
||||||
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
|
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
|
||||||
|
MESSAGE_HANDLER(WM_GETFONT, OnGetFont)
|
||||||
|
MESSAGE_HANDLER(WM_SETFONT, OnSetFont)
|
||||||
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
|
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
|
||||||
MESSAGE_HANDLER(WM_PAINT, OnPaint)
|
MESSAGE_HANDLER(WM_PAINT, OnPaint)
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
|
@ -2405,6 +2437,27 @@ public:
|
||||||
|
|
||||||
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
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);
|
T* pT = static_cast<T*>(this);
|
||||||
pT->CalcSize();
|
pT->CalcSize();
|
||||||
|
|
||||||
|
@ -2414,6 +2467,18 @@ public:
|
||||||
return 0;
|
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*/)
|
LRESULT OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
|
||||||
{
|
{
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
|
@ -2428,6 +2493,30 @@ public:
|
||||||
return 0;
|
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*/)
|
LRESULT OnEraseBackground(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||||
{
|
{
|
||||||
return 1; // no background needed
|
return 1; // no background needed
|
||||||
|
@ -2624,6 +2713,8 @@ public:
|
||||||
{
|
{
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
CFontHandle font = pT->GetTitleFont();
|
CFontHandle font = pT->GetTitleFont();
|
||||||
|
if(font.IsNull())
|
||||||
|
font = (HFONT)::GetStockObject(SYSTEM_FONT);
|
||||||
LOGFONT lf = { 0 };
|
LOGFONT lf = { 0 };
|
||||||
font.GetLogFont(lf);
|
font.GetLogFont(lf);
|
||||||
if(IsVertical())
|
if(IsVertical())
|
||||||
|
@ -2640,7 +2731,7 @@ public:
|
||||||
|
|
||||||
HFONT GetTitleFont() const
|
HFONT GetTitleFont() const
|
||||||
{
|
{
|
||||||
return AtlGetDefaultGuiFont();
|
return m_hFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
|
@ -2675,23 +2766,42 @@ public:
|
||||||
}
|
}
|
||||||
dc.FillRect(&rect, COLOR_3DFACE);
|
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.left += m_cxyTextOffset;
|
||||||
rect.right -= m_cxyTextOffset;
|
rect.right -= m_cxyTextOffset;
|
||||||
if(m_tb.m_hWnd != NULL)
|
if(m_tb.m_hWnd != NULL)
|
||||||
rect.right -= m_cxToolBar;;
|
rect.right -= m_cxToolBar;;
|
||||||
#ifndef _WIN32_WCE
|
|
||||||
dc.DrawText(m_szTitle, -1, &rect, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS);
|
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
|
// called only if pane is empty
|
||||||
|
@ -3687,9 +3797,11 @@ public:
|
||||||
bool m_bActiveAsDefaultMenuItem:1;
|
bool m_bActiveAsDefaultMenuItem:1;
|
||||||
bool m_bEmptyMenuItem:1;
|
bool m_bEmptyMenuItem:1;
|
||||||
bool m_bWindowsMenuItem:1;
|
bool m_bWindowsMenuItem:1;
|
||||||
|
bool m_bNoTabDrag:1;
|
||||||
// internal
|
// internal
|
||||||
bool m_bTabCapture:1;
|
bool m_bTabCapture:1;
|
||||||
bool m_bTabDrag:1;
|
bool m_bTabDrag:1;
|
||||||
|
bool m_bInternalFont:1;
|
||||||
|
|
||||||
// Constructor/destructor
|
// Constructor/destructor
|
||||||
CTabViewImpl() :
|
CTabViewImpl() :
|
||||||
|
@ -3707,8 +3819,10 @@ public:
|
||||||
m_bActiveAsDefaultMenuItem(false),
|
m_bActiveAsDefaultMenuItem(false),
|
||||||
m_bEmptyMenuItem(false),
|
m_bEmptyMenuItem(false),
|
||||||
m_bWindowsMenuItem(false),
|
m_bWindowsMenuItem(false),
|
||||||
|
m_bNoTabDrag(false),
|
||||||
m_bTabCapture(false),
|
m_bTabCapture(false),
|
||||||
m_bTabDrag(false)
|
m_bTabDrag(false),
|
||||||
|
m_bInternalFont(false)
|
||||||
{
|
{
|
||||||
m_ptStartDrag.x = 0;
|
m_ptStartDrag.x = 0;
|
||||||
m_ptStartDrag.y = 0;
|
m_ptStartDrag.y = 0;
|
||||||
|
@ -4260,6 +4374,8 @@ public:
|
||||||
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
|
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
|
||||||
MESSAGE_HANDLER(WM_SIZE, OnSize)
|
MESSAGE_HANDLER(WM_SIZE, OnSize)
|
||||||
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
|
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
|
||||||
|
MESSAGE_HANDLER(WM_GETFONT, OnGetFont)
|
||||||
|
MESSAGE_HANDLER(WM_SETFONT, OnSetFont)
|
||||||
NOTIFY_HANDLER(m_nTabID, TCN_SELCHANGE, OnTabChanged)
|
NOTIFY_HANDLER(m_nTabID, TCN_SELCHANGE, OnTabChanged)
|
||||||
NOTIFY_ID_HANDLER(m_nTabID, OnTabNotification)
|
NOTIFY_ID_HANDLER(m_nTabID, OnTabNotification)
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
|
@ -4294,6 +4410,14 @@ public:
|
||||||
il.Destroy();
|
il.Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(m_bInternalFont)
|
||||||
|
{
|
||||||
|
HFONT hFont = m_tab.GetFont();
|
||||||
|
m_tab.SetFont(NULL, FALSE);
|
||||||
|
::DeleteObject(hFont);
|
||||||
|
m_bInternalFont = false;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4311,6 +4435,32 @@ public:
|
||||||
return 0;
|
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*/)
|
LRESULT OnTabChanged(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)
|
||||||
{
|
{
|
||||||
SetActivePage(m_tab.GetCurSel());
|
SetActivePage(m_tab.GetCurSel());
|
||||||
|
@ -4348,7 +4498,7 @@ public:
|
||||||
// Tab control message handlers
|
// Tab control message handlers
|
||||||
LRESULT OnTabLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled)
|
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_bTabCapture = true;
|
||||||
m_tab.SetCapture();
|
m_tab.SetCapture();
|
||||||
|
@ -4565,7 +4715,8 @@ public:
|
||||||
if(m_tab.m_hWnd == NULL)
|
if(m_tab.m_hWnd == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
m_tab.SetFont(AtlGetDefaultGuiFont());
|
m_tab.SetFont(AtlCreateControlFont());
|
||||||
|
m_bInternalFont = true;
|
||||||
|
|
||||||
m_tab.SetItemExtra(sizeof(TABVIEWPAGE));
|
m_tab.SetItemExtra(sizeof(TABVIEWPAGE));
|
||||||
|
|
||||||
|
@ -4817,7 +4968,6 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class CTabView : public CTabViewImpl<CTabView>
|
class CTabView : public CTabViewImpl<CTabView>
|
||||||
{
|
{
|
||||||
public:
|
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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ATLAPP_H__
|
#ifndef __ATLAPP_H__
|
||||||
#error atlddx.h requires atlapp.h to be included first
|
#error atlddx.h requires atlapp.h to be included first
|
||||||
#endif
|
#endif
|
||||||
|
@ -142,6 +138,23 @@ namespace WTL
|
||||||
return TRUE; \
|
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
|
// CWinDataExchange - provides support for DDX
|
||||||
|
@ -601,6 +614,54 @@ public:
|
||||||
while (hWndCtrl != NULL && !(GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP));
|
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
|
// Overrideables
|
||||||
void OnDataExchangeError(UINT nCtrlID, BOOL /*bSave*/)
|
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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ATLAPP_H__
|
#ifndef __ATLAPP_H__
|
||||||
#error atldlgs.h requires atlapp.h to be included first
|
#error atldlgs.h requires atlapp.h to be included first
|
||||||
#endif
|
#endif
|
||||||
|
@ -64,6 +60,7 @@
|
||||||
// CFindReplaceDialogImpl<T>
|
// CFindReplaceDialogImpl<T>
|
||||||
// CFindReplaceDialog
|
// CFindReplaceDialog
|
||||||
//
|
//
|
||||||
|
// CDialogBaseUnits
|
||||||
// CMemDlgTemplate
|
// CMemDlgTemplate
|
||||||
// CIndirectDialogImpl<T, TDlgTemplate, TBase>
|
// CIndirectDialogImpl<T, TDlgTemplate, TBase>
|
||||||
//
|
//
|
||||||
|
@ -151,7 +148,12 @@ public:
|
||||||
|
|
||||||
m_bOpenFileDialog = bOpenFileDialog;
|
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);
|
m_ofn.lStructSize = sizeof(m_ofn);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if (_WIN32_WINNT >= 0x0500)
|
#if (_WIN32_WINNT >= 0x0500)
|
||||||
// adjust struct size if running on older version of Windows
|
// adjust struct size if running on older version of Windows
|
||||||
if(AtlIsOldWindows())
|
if(AtlIsOldWindows())
|
||||||
|
@ -512,7 +514,7 @@ public:
|
||||||
if (pStr[nLength + 1] == 0)
|
if (pStr[nLength + 1] == 0)
|
||||||
{
|
{
|
||||||
// The OFN buffer contains a single item so extract its path.
|
// 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)
|
if (pSep != NULL)
|
||||||
nLength = (int)(DWORD_PTR)(pSep - pStr);
|
nLength = (int)(DWORD_PTR)(pSep - pStr);
|
||||||
}
|
}
|
||||||
|
@ -570,7 +572,7 @@ public:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// A single item was selected. Skip forward past the path.
|
// A single item was selected. Skip forward past the path.
|
||||||
LPCTSTR pSep = _strrchr(pStr, _T('\\'));
|
LPCTSTR pSep = MinCrtHelper::_strrchr(pStr, _T('\\'));
|
||||||
if (pSep != NULL)
|
if (pSep != NULL)
|
||||||
pStr = pSep + 1;
|
pStr = pSep + 1;
|
||||||
}
|
}
|
||||||
|
@ -652,7 +654,7 @@ public:
|
||||||
int nRet = 0;
|
int nRet = 0;
|
||||||
LPCTSTR pStr = m_pNextFile;
|
LPCTSTR pStr = m_pNextFile;
|
||||||
// Does the filename contain a backslash?
|
// 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.
|
// Yes, so we'll assume it's a full path.
|
||||||
int nLength = lstrlen(pStr);
|
int nLength = lstrlen(pStr);
|
||||||
|
@ -846,23 +848,6 @@ public:
|
||||||
if (nExtraChars > 0)
|
if (nExtraChars > 0)
|
||||||
ATLVERIFY(ResizeFilenameBuffer(m_ofn.nMaxFile + nExtraChars));
|
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>
|
class CMultiFileDialog : public CMultiFileDialogImpl<CMultiFileDialog>
|
||||||
|
@ -1538,7 +1523,7 @@ public:
|
||||||
ATLASSERT(m_hWnd != NULL);
|
ATLASSERT(m_hWnd != NULL);
|
||||||
USES_CONVERSION;
|
USES_CONVERSION;
|
||||||
LPCWSTR lpstr = T2CW(lpstrOKText);
|
LPCWSTR lpstr = T2CW(lpstrOKText);
|
||||||
::SendMessage(m_hWnd, BFFM_SETOKTEXT, (WPARAM)lpstr, 0L);
|
::SendMessage(m_hWnd, BFFM_SETOKTEXT, 0, (LPARAM)lpstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetExpanded(LPCITEMIDLIST pItemIDList)
|
void SetExpanded(LPCITEMIDLIST pItemIDList)
|
||||||
|
@ -2957,14 +2942,159 @@ public:
|
||||||
#endif // !_WIN32_WCE
|
#endif // !_WIN32_WCE
|
||||||
|
|
||||||
|
|
||||||
#if (_ATL_VER >= 0x800)
|
/////////////////////////////////////////////////////////////////////////
|
||||||
typedef ATL::_DialogSplitHelper::DLGTEMPLATEEX DLGTEMPLATEEX;
|
// CDialogBaseUnits - Dialog Units helper
|
||||||
typedef ATL::_DialogSplitHelper::DLGITEMTEMPLATEEX DLGITEMTEMPLATEEX;
|
//
|
||||||
#else // (_ATL_VER >= 0x800)
|
|
||||||
typedef ATL::_DialogSizeHelper::_ATL_DLGTEMPLATEEX DLGTEMPLATEEX;
|
class CDialogBaseUnits
|
||||||
#pragma pack(push, 4)
|
|
||||||
struct DLGITEMTEMPLATEEX
|
|
||||||
{
|
{
|
||||||
|
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 helpID;
|
||||||
DWORD exStyle;
|
DWORD exStyle;
|
||||||
DWORD style;
|
DWORD style;
|
||||||
|
@ -2972,15 +3102,12 @@ struct DLGITEMTEMPLATEEX
|
||||||
short y;
|
short y;
|
||||||
short cx;
|
short cx;
|
||||||
short cy;
|
short cy;
|
||||||
WORD id;
|
DWORD id;
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
#endif // (_ATL_VER >= 0x800)
|
#endif // (_ATL_VER >= 0x800)
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
// CMemDlgTemplate - in-memory dialog template - DLGTEMPLATE or DLGTEMPLATEEX
|
|
||||||
|
|
||||||
class CMemDlgTemplate
|
class CMemDlgTemplate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -2994,7 +3121,7 @@ public:
|
||||||
CTRL_COMBOBOX = 0x0085
|
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()
|
~CMemDlgTemplate()
|
||||||
|
@ -3024,17 +3151,30 @@ public:
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
if (IsValid())
|
if (IsValid()) {
|
||||||
ATLVERIFY(::GlobalFree(m_pData) == NULL);
|
#ifndef UNDER_CE
|
||||||
|
::GlobalUnlock(m_pData);
|
||||||
|
#endif
|
||||||
|
ATLVERIFY(::GlobalFree(m_hData) == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_hData = NULL;
|
||||||
m_pData = NULL;
|
m_pData = NULL;
|
||||||
m_pPtr = NULL;
|
m_pPtr = NULL;
|
||||||
m_cAllocated = 0;
|
m_cAllocated = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Create(bool bDlgEx, LPCTSTR lpszCaption, short nX, short nY, short nWidth, short nHeight, DWORD dwStyle = 0, DWORD dwExStyle = 0,
|
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,
|
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)
|
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
|
// Should have DS_SETFONT style to set the dialog font name and size
|
||||||
if (lpstrFontName != NULL)
|
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,
|
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)
|
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);
|
AddControl(CtrlType, wId, nX, nY, nWidth, nHeight, dwStyle, dwExStyle, Text, pCreationData, nCreationData, dwHelpID);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
|
||||||
void AddData(LPCVOID pData, size_t nData)
|
void AddData(LPCVOID pData, size_t nData)
|
||||||
{
|
{
|
||||||
ATLASSERT(pData != NULL);
|
ATLASSERT(pData != NULL);
|
||||||
|
|
||||||
const size_t ALLOCATION_INCREMENT = 1024;
|
const SIZE_T ALLOCATION_INCREMENT = 1024;
|
||||||
|
|
||||||
if (m_pData == NULL)
|
if (m_pData == NULL)
|
||||||
{
|
{
|
||||||
m_cAllocated = ((nData / ALLOCATION_INCREMENT) + 1) * ALLOCATION_INCREMENT;
|
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);
|
ATLASSERT(m_pData != NULL);
|
||||||
}
|
}
|
||||||
else if (((m_pPtr - m_pData) + nData) > m_cAllocated)
|
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_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);
|
ATLASSERT(m_pData != NULL);
|
||||||
m_pPtr = m_pData + ptrPos;
|
m_pPtr = m_pData + ptrPos;
|
||||||
}
|
}
|
||||||
|
@ -3222,6 +3383,7 @@ protected:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HANDLE m_hData;
|
||||||
LPBYTE m_pData;
|
LPBYTE m_pData;
|
||||||
LPBYTE m_pPtr;
|
LPBYTE m_pPtr;
|
||||||
SIZE_T m_cAllocated;
|
SIZE_T m_cAllocated;
|
||||||
|
@ -5628,7 +5790,13 @@ inline int AtlTaskDialog(HWND hWndParent,
|
||||||
|
|
||||||
#ifdef _WTL_TASKDIALOG_DIRECT
|
#ifdef _WTL_TASKDIALOG_DIRECT
|
||||||
USES_CONVERSION;
|
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));
|
ATLVERIFY(SUCCEEDED(hRet));
|
||||||
#else
|
#else
|
||||||
// This allows apps to run on older versions of Windows
|
// This allows apps to run on older versions of Windows
|
||||||
|
@ -5641,7 +5809,13 @@ inline int AtlTaskDialog(HWND hWndParent,
|
||||||
if(pfnTaskDialog != NULL)
|
if(pfnTaskDialog != NULL)
|
||||||
{
|
{
|
||||||
USES_CONVERSION;
|
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));
|
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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _WIN32_WCE
|
#ifdef _WIN32_WCE
|
||||||
#error atlfind.h is not supported on Windows CE
|
#error atlfind.h is not supported on Windows CE
|
||||||
#endif
|
#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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ATLAPP_H__
|
#ifndef __ATLAPP_H__
|
||||||
#error atlframe.h requires atlapp.h to be included first
|
#error atlframe.h requires atlapp.h to be included first
|
||||||
#endif
|
#endif
|
||||||
|
@ -38,6 +34,7 @@
|
||||||
// CUpdateUIBase
|
// CUpdateUIBase
|
||||||
// CUpdateUI<T>
|
// CUpdateUI<T>
|
||||||
// CDynamicUpdateUI<T>
|
// CDynamicUpdateUI<T>
|
||||||
|
// CAutoUpdateUI<T>
|
||||||
// CDialogResize<T>
|
// CDialogResize<T>
|
||||||
// CDoubleBufferImpl<T>
|
// CDoubleBufferImpl<T>
|
||||||
// CDoubleBufferWindowImpl<T, TBase, TWinTraits>
|
// CDoubleBufferWindowImpl<T, TBase, TWinTraits>
|
||||||
|
@ -375,29 +372,6 @@ class ATL_NO_VTABLE CFrameWindowImplBase : public ATL::CWindowImplBaseT< TBase,
|
||||||
public:
|
public:
|
||||||
DECLARE_FRAME_WND_CLASS(NULL, 0)
|
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)
|
#if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
|
||||||
struct _ChevronMenuInfo
|
struct _ChevronMenuInfo
|
||||||
{
|
{
|
||||||
|
@ -407,14 +381,25 @@ public:
|
||||||
};
|
};
|
||||||
#endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
|
#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
|
// Constructor
|
||||||
CFrameWindowImplBase() :
|
CFrameWindowImplBase() :
|
||||||
#ifdef _WIN32_WCE
|
|
||||||
m_hWndCECommandBar(NULL),
|
|
||||||
#endif // _WIN32_WCE
|
|
||||||
m_hWndToolBar(NULL),
|
m_hWndToolBar(NULL),
|
||||||
m_hWndStatusBar(NULL),
|
m_hWndStatusBar(NULL),
|
||||||
m_hWndClient(NULL),
|
m_hWndClient(NULL),
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
m_hWndCECommandBar(NULL),
|
||||||
|
#endif // _WIN32_WCE
|
||||||
m_hAccel(NULL)
|
m_hAccel(NULL)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
@ -523,7 +508,7 @@ public:
|
||||||
// check if font is taller than our bitmaps
|
// check if font is taller than our bitmaps
|
||||||
CFontHandle font = (HFONT)::SendMessage(hWnd, WM_GETFONT, 0, 0L);
|
CFontHandle font = (HFONT)::SendMessage(hWnd, WM_GETFONT, 0, 0L);
|
||||||
if(font.IsNull())
|
if(font.IsNull())
|
||||||
font = AtlGetDefaultGuiFont();
|
font = (HFONT)::GetStockObject(SYSTEM_FONT);
|
||||||
LOGFONT lf = { 0 };
|
LOGFONT lf = { 0 };
|
||||||
font.GetLogFont(lf);
|
font.GetLogFont(lf);
|
||||||
WORD cyFontHeight = (WORD)abs(lf.lfHeight);
|
WORD cyFontHeight = (WORD)abs(lf.lfHeight);
|
||||||
|
@ -825,10 +810,10 @@ public:
|
||||||
// resize toolbar
|
// resize toolbar
|
||||||
if(m_hWndToolBar != NULL && ((DWORD)::GetWindowLong(m_hWndToolBar, GWL_STYLE) & WS_VISIBLE))
|
if(m_hWndToolBar != NULL && ((DWORD)::GetWindowLong(m_hWndToolBar, GWL_STYLE) & WS_VISIBLE))
|
||||||
{
|
{
|
||||||
if(bResizeBars)
|
if(bResizeBars != FALSE)
|
||||||
{
|
{
|
||||||
::SendMessage(m_hWndToolBar, WM_SIZE, 0, 0);
|
::SendMessage(m_hWndToolBar, WM_SIZE, 0, 0);
|
||||||
::InvalidateRect(m_hWndToolBar, NULL, FALSE);
|
::InvalidateRect(m_hWndToolBar, NULL, TRUE);
|
||||||
}
|
}
|
||||||
RECT rectTB = { 0 };
|
RECT rectTB = { 0 };
|
||||||
::GetWindowRect(m_hWndToolBar, &rectTB);
|
::GetWindowRect(m_hWndToolBar, &rectTB);
|
||||||
|
@ -838,7 +823,7 @@ public:
|
||||||
// resize status bar
|
// resize status bar
|
||||||
if(m_hWndStatusBar != NULL && ((DWORD)::GetWindowLong(m_hWndStatusBar, GWL_STYLE) & WS_VISIBLE))
|
if(m_hWndStatusBar != NULL && ((DWORD)::GetWindowLong(m_hWndStatusBar, GWL_STYLE) & WS_VISIBLE))
|
||||||
{
|
{
|
||||||
if(bResizeBars)
|
if(bResizeBars != FALSE)
|
||||||
::SendMessage(m_hWndStatusBar, WM_SIZE, 0, 0);
|
::SendMessage(m_hWndStatusBar, WM_SIZE, 0, 0);
|
||||||
RECT rectSB = { 0 };
|
RECT rectSB = { 0 };
|
||||||
::GetWindowRect(m_hWndStatusBar, &rectSB);
|
::GetWindowRect(m_hWndStatusBar, &rectSB);
|
||||||
|
@ -2115,6 +2100,11 @@ public:
|
||||||
{
|
{
|
||||||
void* m_lpData;
|
void* m_lpData;
|
||||||
LPTSTR m_lpstrText;
|
LPTSTR m_lpstrText;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
WORD m_nIDFirst;
|
||||||
|
WORD m_nIDLast;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
bool operator ==(const _AtlUpdateUIData& e) const
|
bool operator ==(const _AtlUpdateUIData& e) const
|
||||||
|
@ -2223,7 +2213,12 @@ public:
|
||||||
while(pMap->m_nID != (WORD)-1)
|
while(pMap->m_nID != (WORD)-1)
|
||||||
{
|
{
|
||||||
if(pMap->m_wType & UPDUI_MENUPOPUP)
|
if(pMap->m_wType & UPDUI_MENUPOPUP)
|
||||||
|
{
|
||||||
UIUpdateMenuBarElement(pMap->m_nID, pUIData, hMenu);
|
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++;
|
pMap++;
|
||||||
pUIData++;
|
pUIData++;
|
||||||
}
|
}
|
||||||
|
@ -2382,6 +2377,46 @@ public:
|
||||||
return TRUE;
|
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)
|
BOOL UISetText(int nID, LPCTSTR lpstrText, BOOL bForceUpdate = FALSE)
|
||||||
{
|
{
|
||||||
const _AtlUpdateUIMap* pMap = m_pUIMap;
|
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
|
// CDialogResize - provides support for resizing dialog controls
|
||||||
// (works for any window that has child 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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ATLAPP_H__
|
#ifndef __ATLAPP_H__
|
||||||
#error atlgdi.h requires atlapp.h to be included first
|
#error atlgdi.h requires atlapp.h to be included first
|
||||||
#endif
|
#endif
|
||||||
|
@ -411,44 +407,60 @@ public:
|
||||||
|
|
||||||
void SetHeight(LONG nPointSize, HDC hDC = NULL)
|
void SetHeight(LONG nPointSize, HDC hDC = NULL)
|
||||||
{
|
{
|
||||||
|
HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL);
|
||||||
// For MM_TEXT mapping mode
|
// 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
|
LONG GetHeight(HDC hDC = NULL) const
|
||||||
{
|
{
|
||||||
|
HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL);
|
||||||
// For MM_TEXT mapping mode
|
// 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
|
LONG GetDeciPointHeight(HDC hDC = NULL) const
|
||||||
{
|
{
|
||||||
|
HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL);
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
POINT ptOrg = { 0, 0 };
|
POINT ptOrg = { 0, 0 };
|
||||||
::DPtoLP(hDC, &ptOrg, 1);
|
::DPtoLP(hDC1, &ptOrg, 1);
|
||||||
POINT pt = { 0, 0 };
|
POINT pt = { 0, 0 };
|
||||||
pt.y = abs(lfHeight) + ptOrg.y;
|
pt.y = abs(lfHeight) + ptOrg.y;
|
||||||
::LPtoDP(hDC,&pt,1);
|
::LPtoDP(hDC1, &pt,1);
|
||||||
return ::MulDiv(pt.y, 720, ::GetDeviceCaps(hDC, LOGPIXELSY)); // 72 points/inch, 10 decipoints/point
|
LONG nDeciPoint = ::MulDiv(pt.y, 720, ::GetDeviceCaps(hDC1, LOGPIXELSY)); // 72 points/inch, 10 decipoints/point
|
||||||
#else // CE specific
|
#else // CE specific
|
||||||
// DP and LP are always the same on CE
|
// 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
|
#endif // _WIN32_WCE
|
||||||
|
if(hDC == NULL)
|
||||||
|
::ReleaseDC(NULL, hDC1);
|
||||||
|
|
||||||
|
return nDeciPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetHeightFromDeciPoint(LONG nDeciPtHeight, HDC hDC = NULL)
|
void SetHeightFromDeciPoint(LONG nDeciPtHeight, HDC hDC = NULL)
|
||||||
{
|
{
|
||||||
|
HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL);
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
POINT pt = { 0, 0 };
|
POINT pt = { 0, 0 };
|
||||||
pt.y = ::MulDiv(::GetDeviceCaps(hDC, LOGPIXELSY), nDeciPtHeight, 720); // 72 points/inch, 10 decipoints/point
|
pt.y = ::MulDiv(::GetDeviceCaps(hDC1, LOGPIXELSY), nDeciPtHeight, 720); // 72 points/inch, 10 decipoints/point
|
||||||
::DPtoLP(hDC, &pt, 1);
|
::DPtoLP(hDC1, &pt, 1);
|
||||||
POINT ptOrg = { 0, 0 };
|
POINT ptOrg = { 0, 0 };
|
||||||
::DPtoLP(hDC, &ptOrg, 1);
|
::DPtoLP(hDC1, &ptOrg, 1);
|
||||||
lfHeight = -abs(pt.y - ptOrg.y);
|
lfHeight = -abs(pt.y - ptOrg.y);
|
||||||
#else // CE specific
|
#else // CE specific
|
||||||
// DP and LP are always the same on CE
|
// 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
|
#endif // _WIN32_WCE
|
||||||
|
if(hDC == NULL)
|
||||||
|
::ReleaseDC(NULL, hDC1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
|
@ -2321,6 +2333,31 @@ public:
|
||||||
ATLASSERT(m_hDC != NULL);
|
ATLASSERT(m_hDC != NULL);
|
||||||
return ::GradientFill(m_hDC, pVertices, nVertices, pMeshElements, nMeshElements, dwMode);
|
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)
|
#endif // !defined(_WIN32_WCE) || (_WIN32_WCE >= 420)
|
||||||
|
|
||||||
#if !defined(_WIN32_WCE) || (_WIN32_WCE > 0x500)
|
#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 ;
|
DWORD dw[3] = DIBINFO16_BITFIELDS ;
|
||||||
|
|
||||||
bmiHeader = bmih;
|
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)
|
inline HBITMAP AtlGetDibBitmap(LPBITMAPINFO pbmi)
|
||||||
{
|
{
|
||||||
HBITMAP hbm = NULL;
|
|
||||||
CDC dc(NULL);
|
CDC dc(NULL);
|
||||||
void * pBits = NULL;
|
void* pBits = NULL;
|
||||||
|
|
||||||
LPBYTE pDibBits = (LPBYTE)pbmi + sizeof(BITMAPINFOHEADER) + AtlGetDibColorTableSize(&pbmi->bmiHeader) * sizeof(RGBQUAD);
|
LPBYTE pDibBits = (LPBYTE)pbmi + sizeof(BITMAPINFOHEADER) + AtlGetDibColorTableSize(&pbmi->bmiHeader) * sizeof(RGBQUAD);
|
||||||
if (hbm = CreateDIBSection(dc, pbmi, DIB_RGB_COLORS, &pBits, NULL, NULL))
|
HBITMAP hbm = CreateDIBSection(dc, pbmi, DIB_RGB_COLORS, &pBits, NULL, NULL);
|
||||||
memcpy(pBits, pDibBits, pbmi->bmiHeader.biSizeImage);
|
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;
|
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 hdcSrc = CreateCompatibleDC(NULL);
|
||||||
CDC hdcDst = 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);
|
pDib = (LPBYTE)LocalAlloc(LMEM_ZEROINIT, sizeof(DIBINFO16) + ds.dsBmih.biSizeImage);
|
||||||
if (pDib != NULL)
|
if (pDib != NULL)
|
||||||
{
|
{
|
||||||
memcpy(pDib , &ds.dsBmih, sizeof(DIBINFO16));
|
SecureHelper::memcpy_x(pDib, sizeof(DIBINFO16) + ds.dsBmih.biSizeImage, &ds.dsBmih, sizeof(DIBINFO16));
|
||||||
memcpy(pDib + sizeof(DIBINFO16), ds.dsBm.bmBits, ds.dsBmih.biSizeImage);
|
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));
|
ATLASSERT(::IsWindow(hWnd));
|
||||||
BOOL bOK = OpenClipboard(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);
|
HLOCAL hDib = AtlCreatePackedDib16(hbm, size);
|
||||||
if (hDib != NULL)
|
if (hDib != NULL)
|
||||||
|
@ -3825,14 +3866,14 @@ inline bool AtlSetClipboardDib16(HBITMAP hbm, SIZE size, HWND hWnd)
|
||||||
CloseClipboard();
|
CloseClipboard();
|
||||||
}
|
}
|
||||||
|
|
||||||
return bOK == TRUE;
|
return (bOK != FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline HBITMAP AtlGetClipboardDib(HWND hWnd)
|
inline HBITMAP AtlGetClipboardDib(HWND hWnd)
|
||||||
{
|
{
|
||||||
ATLASSERT(::IsWindow(hWnd) == TRUE);
|
ATLASSERT(::IsWindow(hWnd) != FALSE);
|
||||||
HBITMAP hbm = NULL;
|
HBITMAP hbm = NULL;
|
||||||
if (OpenClipboard(hWnd) == TRUE)
|
if (OpenClipboard(hWnd) != FALSE)
|
||||||
{
|
{
|
||||||
LPBITMAPINFO pbmi = (LPBITMAPINFO)GetClipboardData(CF_DIB);
|
LPBITMAPINFO pbmi = (LPBITMAPINFO)GetClipboardData(CF_DIB);
|
||||||
if (pbmi != NULL)
|
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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ATLAPP_H__
|
#ifndef __ATLAPP_H__
|
||||||
#error atlmisc.h requires atlapp.h to be included first
|
#error atlmisc.h requires atlapp.h to be included first
|
||||||
#endif
|
#endif
|
||||||
|
@ -55,22 +51,6 @@
|
||||||
// CFindFile
|
// CFindFile
|
||||||
//
|
//
|
||||||
// Global functions:
|
// Global functions:
|
||||||
// AtlLoadAccelerators()
|
|
||||||
// AtlLoadMenu()
|
|
||||||
// AtlLoadBitmap()
|
|
||||||
// AtlLoadSysBitmap()
|
|
||||||
// AtlLoadCursor()
|
|
||||||
// AtlLoadSysCursor()
|
|
||||||
// AtlLoadIcon()
|
|
||||||
// AtlLoadSysIcon()
|
|
||||||
// AtlLoadBitmapImage()
|
|
||||||
// AtlLoadCursorImage()
|
|
||||||
// AtlLoadIconImage()
|
|
||||||
// AtlLoadSysBitmapImage()
|
|
||||||
// AtlLoadSysCursorImage()
|
|
||||||
// AtlLoadSysIconImage()
|
|
||||||
// AtlLoadString()
|
|
||||||
//
|
|
||||||
// AtlGetStockPen()
|
// AtlGetStockPen()
|
||||||
// AtlGetStockBrush()
|
// AtlGetStockBrush()
|
||||||
// AtlGetStockFont()
|
// AtlGetStockFont()
|
||||||
|
@ -2481,18 +2461,6 @@ protected:
|
||||||
return (*p == ch) ? p : NULL;
|
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)
|
static TCHAR* _cstrrev(TCHAR* pStr)
|
||||||
{
|
{
|
||||||
// optimize NULL, zero-length, and single-char case
|
// optimize NULL, zero-length, and single-char case
|
||||||
|
@ -2601,20 +2569,6 @@ protected:
|
||||||
return (p[n] != 0) ? &p[n] : NULL;
|
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)
|
static int _cstrcmp(const TCHAR* pstrOne, const TCHAR* pstrOther)
|
||||||
{
|
{
|
||||||
return lstrcmp(pstrOne, pstrOther);
|
return lstrcmp(pstrOne, pstrOther);
|
||||||
|
@ -2638,45 +2592,12 @@ protected:
|
||||||
ATLASSERT(nRet != 0);
|
ATLASSERT(nRet != 0);
|
||||||
return nRet - 2; // convert to strcmp convention
|
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
|
#else // !_ATL_MIN_CRT
|
||||||
static const TCHAR* _cstrchr(const TCHAR* p, TCHAR ch)
|
static const TCHAR* _cstrchr(const TCHAR* p, TCHAR ch)
|
||||||
{
|
{
|
||||||
return _tcschr(p, ch);
|
return _tcschr(p, ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TCHAR* _cstrrchr(const TCHAR* p, TCHAR ch)
|
|
||||||
{
|
|
||||||
return _tcsrchr(p, ch);
|
|
||||||
}
|
|
||||||
|
|
||||||
static TCHAR* _cstrrev(TCHAR* pStr)
|
static TCHAR* _cstrrev(TCHAR* pStr)
|
||||||
{
|
{
|
||||||
return _tcsrev(pStr);
|
return _tcsrev(pStr);
|
||||||
|
@ -2702,16 +2623,6 @@ protected:
|
||||||
return _tcspbrk(p, lpszCharSet);
|
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)
|
static int _cstrcmp(const TCHAR* pstrOne, const TCHAR* pstrOther)
|
||||||
{
|
{
|
||||||
return _tcscmp(pstrOne, pstrOther);
|
return _tcscmp(pstrOne, pstrOther);
|
||||||
|
@ -2733,12 +2644,27 @@ protected:
|
||||||
return _tcsicoll(pstrOne, pstrOther);
|
return _tcsicoll(pstrOne, pstrOther);
|
||||||
}
|
}
|
||||||
#endif // !_WIN32_WCE
|
#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)
|
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)
|
static const TCHAR* _cstrchr_db(const TCHAR* p, TCHAR ch1, TCHAR ch2)
|
||||||
{
|
{
|
||||||
|
@ -3066,8 +2992,8 @@ public:
|
||||||
BOOL ReadFromRegistry(LPCTSTR lpstrRegKey)
|
BOOL ReadFromRegistry(LPCTSTR lpstrRegKey)
|
||||||
{
|
{
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
ATL::CRegKey rkParent;
|
CRegKeyEx rkParent;
|
||||||
ATL::CRegKey rk;
|
CRegKeyEx rk;
|
||||||
|
|
||||||
LONG lRet = rkParent.Open(HKEY_CURRENT_USER, lpstrRegKey);
|
LONG lRet = rkParent.Open(HKEY_CURRENT_USER, lpstrRegKey);
|
||||||
if(lRet != ERROR_SUCCESS)
|
if(lRet != ERROR_SUCCESS)
|
||||||
|
@ -3077,11 +3003,7 @@ public:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
DWORD dwRet = 0;
|
DWORD dwRet = 0;
|
||||||
#if (_ATL_VER >= 0x0700)
|
|
||||||
lRet = rk.QueryDWORDValue(pT->GetRegCountName(), dwRet);
|
lRet = rk.QueryDWORDValue(pT->GetRegCountName(), dwRet);
|
||||||
#else
|
|
||||||
lRet = rk.QueryValue(dwRet, pT->GetRegCountName());
|
|
||||||
#endif
|
|
||||||
if(lRet != ERROR_SUCCESS)
|
if(lRet != ERROR_SUCCESS)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
SetMaxEntries(dwRet);
|
SetMaxEntries(dwRet);
|
||||||
|
@ -3095,13 +3017,8 @@ public:
|
||||||
{
|
{
|
||||||
TCHAR szBuff[m_cchItemNameLen] = { 0 };
|
TCHAR szBuff[m_cchItemNameLen] = { 0 };
|
||||||
SecureHelper::wsprintf_x(szBuff, m_cchItemNameLen, pT->GetRegItemName(), nItem);
|
SecureHelper::wsprintf_x(szBuff, m_cchItemNameLen, pT->GetRegItemName(), nItem);
|
||||||
#if (_ATL_VER >= 0x0700)
|
|
||||||
ULONG ulCount = t_cchItemLen;
|
ULONG ulCount = t_cchItemLen;
|
||||||
lRet = rk.QueryStringValue(szBuff, szRetString, &ulCount);
|
lRet = rk.QueryStringValue(szBuff, szRetString, &ulCount);
|
||||||
#else
|
|
||||||
DWORD dwCount = t_cchItemLen * sizeof(TCHAR);
|
|
||||||
lRet = rk.QueryValue(szRetString, szBuff, &dwCount);
|
|
||||||
#endif
|
|
||||||
if(lRet == ERROR_SUCCESS)
|
if(lRet == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
SecureHelper::strcpy_x(de.szDocName, _countof(de.szDocName), szRetString);
|
SecureHelper::strcpy_x(de.szDocName, _countof(de.szDocName), szRetString);
|
||||||
|
@ -3119,8 +3036,8 @@ public:
|
||||||
{
|
{
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
pT; // avoid level 4 warning
|
pT; // avoid level 4 warning
|
||||||
ATL::CRegKey rkParent;
|
CRegKeyEx rkParent;
|
||||||
ATL::CRegKey rk;
|
CRegKeyEx rk;
|
||||||
|
|
||||||
LONG lRet = rkParent.Create(HKEY_CURRENT_USER, lpstrRegKey);
|
LONG lRet = rkParent.Create(HKEY_CURRENT_USER, lpstrRegKey);
|
||||||
if(lRet != ERROR_SUCCESS)
|
if(lRet != ERROR_SUCCESS)
|
||||||
|
@ -3129,11 +3046,7 @@ public:
|
||||||
if(lRet != ERROR_SUCCESS)
|
if(lRet != ERROR_SUCCESS)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
#if (_ATL_VER >= 0x0700)
|
|
||||||
lRet = rk.SetDWORDValue(pT->GetRegCountName(), m_nMaxEntries);
|
lRet = rk.SetDWORDValue(pT->GetRegCountName(), m_nMaxEntries);
|
||||||
#else
|
|
||||||
lRet = rk.SetValue(m_nMaxEntries, pT->GetRegCountName());
|
|
||||||
#endif
|
|
||||||
ATLASSERT(lRet == ERROR_SUCCESS);
|
ATLASSERT(lRet == ERROR_SUCCESS);
|
||||||
|
|
||||||
// set new values
|
// set new values
|
||||||
|
@ -3144,11 +3057,7 @@ public:
|
||||||
SecureHelper::wsprintf_x(szBuff, m_cchItemNameLen, pT->GetRegItemName(), nItem);
|
SecureHelper::wsprintf_x(szBuff, m_cchItemNameLen, pT->GetRegItemName(), nItem);
|
||||||
TCHAR szDocName[t_cchItemLen] = { 0 };
|
TCHAR szDocName[t_cchItemLen] = { 0 };
|
||||||
GetFromList(t_nFirstID + nItem - 1, szDocName, t_cchItemLen);
|
GetFromList(t_nFirstID + nItem - 1, szDocName, t_cchItemLen);
|
||||||
#if (_ATL_VER >= 0x0700)
|
|
||||||
lRet = rk.SetStringValue(szBuff, szDocName);
|
lRet = rk.SetStringValue(szBuff, szDocName);
|
||||||
#else
|
|
||||||
lRet = rk.SetValue(szDocName, szBuff);
|
|
||||||
#endif
|
|
||||||
ATLASSERT(lRet == ERROR_SUCCESS);
|
ATLASSERT(lRet == ERROR_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3367,7 +3276,7 @@ public:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
// find the last dot
|
// find the last dot
|
||||||
LPTSTR pstrDot = (LPTSTR)_cstrrchr(szBuff, _T('.'));
|
LPTSTR pstrDot = MinCrtHelper::_strrchr(szBuff, _T('.'));
|
||||||
if(pstrDot != NULL)
|
if(pstrDot != NULL)
|
||||||
*pstrDot = 0;
|
*pstrDot = 0;
|
||||||
|
|
||||||
|
@ -3616,8 +3525,8 @@ public:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// find the last forward or backward whack
|
// find the last forward or backward whack
|
||||||
LPTSTR pstrBack = (LPTSTR)_cstrrchr(m_lpszRoot, _T('\\'));
|
LPTSTR pstrBack = MinCrtHelper::_strrchr(m_lpszRoot, _T('\\'));
|
||||||
LPTSTR pstrFront = (LPTSTR)_cstrrchr(m_lpszRoot, _T('/'));
|
LPTSTR pstrFront = MinCrtHelper::_strrchr(m_lpszRoot, _T('/'));
|
||||||
|
|
||||||
if(pstrFront != NULL || pstrBack != NULL)
|
if(pstrFront != NULL || pstrBack != NULL)
|
||||||
{
|
{
|
||||||
|
@ -3665,193 +3574,9 @@ public:
|
||||||
m_hFind = NULL;
|
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
|
// 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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _WIN32_WCE
|
#ifdef _WIN32_WCE
|
||||||
#error atlprint.h is not supported on Windows CE
|
#error atlprint.h is not supported on Windows CE
|
||||||
#endif
|
#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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -217,6 +217,7 @@
|
||||||
#define ID_VIEW_TOOLBAR 0xE800
|
#define ID_VIEW_TOOLBAR 0xE800
|
||||||
#define ID_VIEW_STATUS_BAR 0xE801
|
#define ID_VIEW_STATUS_BAR 0xE801
|
||||||
#define ID_VIEW_REFRESH 0xE803
|
#define ID_VIEW_REFRESH 0xE803
|
||||||
|
#define ID_VIEW_RIBBON 0xE804 // Ribbon
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Standard control IDs
|
// 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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// 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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ATLAPP_H__
|
#ifndef __ATLAPP_H__
|
||||||
#error atlscrl.h requires atlapp.h to be included first
|
#error atlscrl.h requires atlapp.h to be included first
|
||||||
#endif
|
#endif
|
||||||
|
@ -34,10 +30,6 @@
|
||||||
#define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam))
|
#define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef WM_MOUSEHWHEEL
|
|
||||||
#define WM_MOUSEHWHEEL 0x020E
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Classes in this file:
|
// 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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ATLAPP_H__
|
#ifndef __ATLAPP_H__
|
||||||
#error atlsplit.h requires atlapp.h to be included first
|
#error atlsplit.h requires atlapp.h to be included first
|
||||||
#endif
|
#endif
|
||||||
|
@ -53,6 +49,8 @@ namespace WTL
|
||||||
#define SPLIT_NONINTERACTIVE 0x00000002
|
#define SPLIT_NONINTERACTIVE 0x00000002
|
||||||
#define SPLIT_RIGHTALIGNED 0x00000004
|
#define SPLIT_RIGHTALIGNED 0x00000004
|
||||||
#define SPLIT_BOTTOMALIGNED SPLIT_RIGHTALIGNED
|
#define SPLIT_BOTTOMALIGNED SPLIT_RIGHTALIGNED
|
||||||
|
#define SPLIT_GRADIENTBAR 0x00000008
|
||||||
|
#define SPLIT_FIXEDBARSIZE 0x00000010
|
||||||
|
|
||||||
// Note: SPLIT_PROPORTIONAL and SPLIT_RIGHTALIGNED/SPLIT_BOTTOMALIGNED are
|
// Note: SPLIT_PROPORTIONAL and SPLIT_RIGHTALIGNED/SPLIT_BOTTOMALIGNED are
|
||||||
// mutually exclusive. If both are set, splitter defaults to SPLIT_PROPORTIONAL
|
// mutually exclusive. If both are set, splitter defaults to SPLIT_PROPORTIONAL
|
||||||
|
@ -82,7 +80,7 @@ public:
|
||||||
// Constructor
|
// Constructor
|
||||||
CSplitterImpl() :
|
CSplitterImpl() :
|
||||||
m_xySplitterPos(-1), m_nDefActivePane(SPLIT_PANE_NONE),
|
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_cxyDragOffset(0), m_nProportionalPos(0), m_bUpdateProportionalPos(true),
|
||||||
m_dwExtendedStyle(SPLIT_PROPORTIONAL),
|
m_dwExtendedStyle(SPLIT_PROPORTIONAL),
|
||||||
m_nSinglePane(SPLIT_PANE_NONE)
|
m_nSinglePane(SPLIT_PANE_NONE)
|
||||||
|
@ -386,10 +384,24 @@ public:
|
||||||
// Overrideables
|
// Overrideables
|
||||||
void DrawSplitterBar(CDCHandle dc)
|
void DrawSplitterBar(CDCHandle dc)
|
||||||
{
|
{
|
||||||
RECT rect;
|
RECT rect = { 0 };
|
||||||
if(GetSplitterBarRect(&rect))
|
if(GetSplitterBarRect(&rect))
|
||||||
{
|
{
|
||||||
dc.FillRect(&rect, COLOR_3DFACE);
|
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
|
// draw 3D edge if needed
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
if((pT->GetExStyle() & WS_EX_CLIENTEDGE) != 0)
|
if((pT->GetExStyle() & WS_EX_CLIENTEDGE) != 0)
|
||||||
|
@ -400,7 +412,7 @@ public:
|
||||||
// called only if pane is empty
|
// called only if pane is empty
|
||||||
void DrawSplitterPane(CDCHandle dc, int nPane)
|
void DrawSplitterPane(CDCHandle dc, int nPane)
|
||||||
{
|
{
|
||||||
RECT rect;
|
RECT rect = { 0 };
|
||||||
if(GetSplitterPaneRect(nPane, &rect))
|
if(GetSplitterPaneRect(nPane, &rect))
|
||||||
{
|
{
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
|
@ -435,7 +447,9 @@ public:
|
||||||
|
|
||||||
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
|
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
|
||||||
{
|
{
|
||||||
GetSystemSettings(false);
|
T* pT = static_cast<T*>(this);
|
||||||
|
pT->GetSystemSettings(false);
|
||||||
|
|
||||||
bHandled = FALSE;
|
bHandled = FALSE;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -580,7 +594,7 @@ public:
|
||||||
DWORD dwPos = ::GetMessagePos();
|
DWORD dwPos = ::GetMessagePos();
|
||||||
POINT pt = { GET_X_LPARAM(dwPos), GET_Y_LPARAM(dwPos) };
|
POINT pt = { GET_X_LPARAM(dwPos), GET_Y_LPARAM(dwPos) };
|
||||||
pT->ScreenToClient(&pt);
|
pT->ScreenToClient(&pt);
|
||||||
RECT rcPane;
|
RECT rcPane = { 0 };
|
||||||
for(int nPane = 0; nPane < m_nPanesCount; nPane++)
|
for(int nPane = 0; nPane < m_nPanesCount; nPane++)
|
||||||
{
|
{
|
||||||
if(GetSplitterPaneRect(nPane, &rcPane) && ::PtInRect(&rcPane, pt))
|
if(GetSplitterPaneRect(nPane, &rcPane) && ::PtInRect(&rcPane, pt))
|
||||||
|
@ -596,7 +610,9 @@ public:
|
||||||
|
|
||||||
LRESULT OnSettingChange(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
LRESULT OnSettingChange(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||||
{
|
{
|
||||||
GetSystemSettings(true);
|
T* pT = static_cast<T*>(this);
|
||||||
|
pT->GetSystemSettings(true);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -607,7 +623,7 @@ public:
|
||||||
return;
|
return;
|
||||||
|
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
RECT rect = { 0, 0, 0, 0 };
|
RECT rect = { 0 };
|
||||||
if(m_nSinglePane == SPLIT_PANE_NONE)
|
if(m_nSinglePane == SPLIT_PANE_NONE)
|
||||||
{
|
{
|
||||||
if(GetSplitterBarRect(&rect))
|
if(GetSplitterBarRect(&rect))
|
||||||
|
@ -733,11 +749,17 @@ public:
|
||||||
|
|
||||||
void DrawGhostBar()
|
void DrawGhostBar()
|
||||||
{
|
{
|
||||||
RECT rect = { 0, 0, 0, 0 };
|
RECT rect = { 0 };
|
||||||
if(GetSplitterBarRect(&rect))
|
if(GetSplitterBarRect(&rect))
|
||||||
{
|
{
|
||||||
// invert the brush pattern (looks just like frame window sizing)
|
// convert client to window coordinates
|
||||||
T* pT = static_cast<T*>(this);
|
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);
|
CWindowDC dc(pT->m_hWnd);
|
||||||
CBrush brush = CDCHandle::GetHalftoneBrush();
|
CBrush brush = CDCHandle::GetHalftoneBrush();
|
||||||
if(brush.m_hBrush != NULL)
|
if(brush.m_hBrush != NULL)
|
||||||
|
@ -751,11 +773,14 @@ public:
|
||||||
|
|
||||||
void GetSystemSettings(bool bUpdate)
|
void GetSystemSettings(bool bUpdate)
|
||||||
{
|
{
|
||||||
|
if((m_dwExtendedStyle & SPLIT_FIXEDBARSIZE) == 0)
|
||||||
|
{
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
m_cxySplitBar = ::GetSystemMetrics(t_bVertical ? SM_CXSIZEFRAME : SM_CYSIZEFRAME);
|
m_cxySplitBar = ::GetSystemMetrics(t_bVertical ? SM_CXSIZEFRAME : SM_CYSIZEFRAME);
|
||||||
#else // CE specific
|
#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
|
#endif // _WIN32_WCE
|
||||||
|
}
|
||||||
|
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
if((pT->GetExStyle() & WS_EX_CLIENTEDGE))
|
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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _WIN32_WCE
|
#ifdef _WIN32_WCE
|
||||||
#error atltheme.h is not supported on Windows CE
|
#error atltheme.h is not supported on Windows CE
|
||||||
#endif
|
#endif
|
||||||
|
@ -37,10 +33,14 @@
|
||||||
#if defined(_WTL_USE_VSSYM32) || (defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN))
|
#if defined(_WTL_USE_VSSYM32) || (defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN))
|
||||||
#include <vssym32.h>
|
#include <vssym32.h>
|
||||||
#else
|
#else
|
||||||
|
#ifndef TMSCHEMA_H
|
||||||
#include <tmschema.h>
|
#include <tmschema.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef _UXTHEME_H_
|
||||||
#include <uxtheme.h>
|
#include <uxtheme.h>
|
||||||
|
#endif
|
||||||
#pragma comment(lib, "uxtheme.lib")
|
#pragma comment(lib, "uxtheme.lib")
|
||||||
|
|
||||||
// Note: To create an application that also runs on older versions of Windows,
|
// 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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ATLAPP_H__
|
#ifndef __ATLAPP_H__
|
||||||
#error atluser.h requires atlapp.h to be included first
|
#error atluser.h requires atlapp.h to be included first
|
||||||
#endif
|
#endif
|
||||||
|
@ -35,6 +31,22 @@
|
||||||
//
|
//
|
||||||
// Global functions:
|
// Global functions:
|
||||||
// AtlMessageBox()
|
// AtlMessageBox()
|
||||||
|
//
|
||||||
|
// AtlLoadAccelerators()
|
||||||
|
// AtlLoadMenu()
|
||||||
|
// AtlLoadBitmap()
|
||||||
|
// AtlLoadSysBitmap()
|
||||||
|
// AtlLoadCursor()
|
||||||
|
// AtlLoadSysCursor()
|
||||||
|
// AtlLoadIcon()
|
||||||
|
// AtlLoadSysIcon()
|
||||||
|
// AtlLoadBitmapImage()
|
||||||
|
// AtlLoadCursorImage()
|
||||||
|
// AtlLoadIconImage()
|
||||||
|
// AtlLoadSysBitmapImage()
|
||||||
|
// AtlLoadSysCursorImage()
|
||||||
|
// AtlLoadSysIconImage()
|
||||||
|
// AtlLoadString()
|
||||||
|
|
||||||
|
|
||||||
namespace WTL
|
namespace WTL
|
||||||
|
@ -401,7 +413,38 @@ public:
|
||||||
return (bstrText != NULL) ? TRUE : FALSE;
|
return (bstrText != NULL) ? TRUE : FALSE;
|
||||||
}
|
}
|
||||||
#endif // !_ATL_NO_COM
|
#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__)
|
#if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
|
||||||
int GetMenuString(UINT nIDItem, _CSTRING_NS::CString& strText, UINT nFlags) const
|
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
|
}; // namespace WTL
|
||||||
|
|
||||||
#endif // __ATLUSER_H__
|
#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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ATLAPP_H__
|
#ifndef __ATLAPP_H__
|
||||||
#error atlwince.h requires atlapp.h to be included first
|
#error atlwince.h requires atlapp.h to be included first
|
||||||
#endif
|
#endif
|
||||||
|
@ -28,7 +24,9 @@
|
||||||
|
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
#error atlwince.h compiles under Windows CE only
|
#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.
|
#error atlwince.h requires Windows CE 3.0 or higher.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -249,7 +247,8 @@ public:
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
ATLASSERT(pT->IsWindow());
|
ATLASSERT(pT->IsWindow());
|
||||||
BOOL bRes = ::GetClientRect(pT->m_hWnd, lpRect);
|
BOOL bRes = ::GetClientRect(pT->m_hWnd, lpRect);
|
||||||
lpRect->top += nTitleHeight;
|
if (nTitleHeight)
|
||||||
|
lpRect->top += nTitleHeight + 1;
|
||||||
return bRes;
|
return bRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -546,6 +545,26 @@ public:
|
||||||
typedef CIndirectDialogImpl< T, CMemDlgTemplate, CStdDialogImpl<T, t_shidiFlags, t_bModal> > _baseClass;
|
typedef CIndirectDialogImpl< T, CMemDlgTemplate, CStdDialogImpl<T, t_shidiFlags, t_bModal> > _baseClass;
|
||||||
typedef CStdDialogImpl<T, t_shidiFlags, t_bModal> _baseStd;
|
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)
|
INT_PTR DoModal(HWND hWndParent = ::GetActiveWindow(), LPARAM dwInitParam = NULL)
|
||||||
{
|
{
|
||||||
ATLASSERT(t_bModal);
|
ATLASSERT(t_bModal);
|
||||||
|
@ -553,22 +572,7 @@ public:
|
||||||
if (!m_Template.IsValid())
|
if (!m_Template.IsValid())
|
||||||
CreateTemplate();
|
CreateTemplate();
|
||||||
|
|
||||||
if (m_Template.IsTemplateEx())
|
CheckStyle();
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return _baseClass::DoModal(hWndParent, dwInitParam);
|
return _baseClass::DoModal(hWndParent, dwInitParam);
|
||||||
}
|
}
|
||||||
|
@ -580,22 +584,7 @@ public:
|
||||||
if (!m_Template.IsValid())
|
if (!m_Template.IsValid())
|
||||||
CreateTemplate();
|
CreateTemplate();
|
||||||
|
|
||||||
if (m_Template.IsTemplateEx())
|
CheckStyle();
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return _baseClass::Create(hWndParent, dwInitParam);
|
return _baseClass::Create(hWndParent, dwInitParam);
|
||||||
}
|
}
|
||||||
|
@ -905,7 +894,7 @@ public:
|
||||||
class CAppInfoBase
|
class CAppInfoBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ATL::CRegKey m_Key;
|
CRegKeyEx m_Key;
|
||||||
|
|
||||||
CAppInfoBase(ATL::_U_STRINGorID sAppKey)
|
CAppInfoBase(ATL::_U_STRINGorID sAppKey)
|
||||||
{
|
{
|
||||||
|
@ -916,46 +905,30 @@ public:
|
||||||
template <class V>
|
template <class V>
|
||||||
LONG Save(V& val, ATL::_U_STRINGorID sName)
|
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>
|
template <class V>
|
||||||
LONG Save(int nb, V& val0, ATL::_U_STRINGorID sName)
|
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>
|
template <class V>
|
||||||
LONG Restore(V& val, ATL::_U_STRINGorID sName)
|
LONG Restore(V& val, ATL::_U_STRINGorID sName)
|
||||||
{
|
{
|
||||||
DWORD valtype;
|
ULONG bufSize = sizeof(V);
|
||||||
DWORD bufSize = sizeof(V);
|
return m_Key.QueryBinaryValue(sName.m_lpstr, &val, &bufSize);
|
||||||
return ::RegQueryValueEx(m_Key, sName.m_lpstr, 0, &valtype, (LPBYTE)&val, &bufSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class V>
|
template <class V>
|
||||||
LONG Restore(int nb, V& val0, ATL::_U_STRINGorID sName)
|
LONG Restore(int nb, V& val0, ATL::_U_STRINGorID sName)
|
||||||
{
|
{
|
||||||
DWORD valtype;
|
ULONG bufSize = nb * sizeof(V);
|
||||||
DWORD bufSize = nb * sizeof(V);
|
return m_Key.QueryBinaryValue(sName.m_lpstr, &val0, &bufSize);
|
||||||
return ::RegQueryValueEx(m_Key, sName.m_lpstr, 0, &valtype, (LPBYTE)&val0, &bufSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
|
#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)
|
LONG Save(_CSTRING_NS::CString& sval, ATL::_U_STRINGorID sName)
|
||||||
{
|
{
|
||||||
return m_Key.SetStringValue(sName.m_lpstr, sval);
|
return m_Key.SetStringValue(sName.m_lpstr, sval);
|
||||||
|
@ -968,22 +941,10 @@ public:
|
||||||
sval.ReleaseBuffer();
|
sval.ReleaseBuffer();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
#endif // !(_ATL_VER < 0x0800)
|
|
||||||
#else
|
#else
|
||||||
#pragma message("Warning: CAppInfoBase compiles without CString support. Do not use CString in Save or Restore.")
|
#pragma message("Warning: CAppInfoBase compiles without CString support. Do not use CString in Save or Restore.")
|
||||||
#endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
|
#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)
|
LONG Save(LPCTSTR sval, ATL::_U_STRINGorID sName)
|
||||||
{
|
{
|
||||||
return m_Key.SetStringValue(sName.m_lpstr, sval);
|
return m_Key.SetStringValue(sName.m_lpstr, sval);
|
||||||
|
@ -993,7 +954,6 @@ public:
|
||||||
{
|
{
|
||||||
return m_Key.QueryStringValue(sName.m_lpstr, sval, plength);
|
return m_Key.QueryStringValue(sName.m_lpstr, sval, plength);
|
||||||
}
|
}
|
||||||
#endif // !(_ATL_VER < 0x0800)
|
|
||||||
|
|
||||||
LONG Delete(ATL::_U_STRINGorID sName)
|
LONG Delete(ATL::_U_STRINGorID sName)
|
||||||
{
|
{
|
||||||
|
@ -1508,7 +1468,7 @@ public:
|
||||||
#ifndef SETTINGCHANGE_RESET // not defined for PPC 2002
|
#ifndef SETTINGCHANGE_RESET // not defined for PPC 2002
|
||||||
#define SETTINGCHANGE_RESET SPI_SETWORKAREA
|
#define SETTINGCHANGE_RESET SPI_SETWORKAREA
|
||||||
#endif
|
#endif
|
||||||
if (m_bFullScreen && (wParam & SETTINGCHANGE_RESET))
|
if (m_bFullScreen && (wParam == SETTINGCHANGE_RESET))
|
||||||
SetFullScreen(m_bFullScreen);
|
SetFullScreen(m_bFullScreen);
|
||||||
return bHandled = FALSE;
|
return bHandled = FALSE;
|
||||||
}
|
}
|
||||||
|
@ -2223,22 +2183,37 @@ public:
|
||||||
::SendMessage(m_hWnd, EM_UNDOEVENT, 0, 0L);
|
::SendMessage(m_hWnd, EM_UNDOEVENT, 0, 0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Undo()
|
||||||
|
{
|
||||||
|
UndoEvent();
|
||||||
|
}
|
||||||
|
|
||||||
// Standard EM_xxx messages
|
// Standard EM_xxx messages
|
||||||
DWORD GetSel() const
|
DWORD GetSel() const
|
||||||
{
|
{
|
||||||
ATLASSERT(::IsWindow(m_hWnd));
|
ATLASSERT(::IsWindow(m_hWnd));
|
||||||
|
ATLASSERT(GetViewStyle() != VT_DRAWINGVIEW);
|
||||||
return (DWORD)::SendMessage(m_hWnd, EM_GETSEL, 0, 0L);
|
return (DWORD)::SendMessage(m_hWnd, EM_GETSEL, 0, 0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GetSel(int& nStartChar, int& nEndChar) const
|
void GetSel(int& nStartChar, int& nEndChar) const
|
||||||
{
|
{
|
||||||
ATLASSERT(::IsWindow(m_hWnd));
|
ATLASSERT(::IsWindow(m_hWnd));
|
||||||
|
ATLASSERT(GetViewStyle() != VT_DRAWINGVIEW);
|
||||||
::SendMessage(m_hWnd, EM_GETSEL, (WPARAM)&nStartChar, (LPARAM)&nEndChar);
|
::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)
|
void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE)
|
||||||
{
|
{
|
||||||
ATLASSERT(::IsWindow(m_hWnd));
|
ATLASSERT(::IsWindow(m_hWnd));
|
||||||
|
ATLASSERT(GetViewStyle() != VT_DRAWINGVIEW);
|
||||||
::SendMessage(m_hWnd, EM_REPLACESEL, (WPARAM)bCanUndo, (LPARAM)lpszNewText);
|
::SendMessage(m_hWnd, EM_REPLACESEL, (WPARAM)bCanUndo, (LPARAM)lpszNewText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2504,7 +2479,7 @@ public:
|
||||||
::ZeroMemory(&m_dlc, sizeof(DOCLISTCREATE));
|
::ZeroMemory(&m_dlc, sizeof(DOCLISTCREATE));
|
||||||
::ZeroMemory(m_szPath, sizeof(m_szPath));
|
::ZeroMemory(m_szPath, sizeof(m_szPath));
|
||||||
if(pszFolder != NULL)
|
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.dwStructSize = sizeof(DOCLISTCREATE);
|
||||||
m_dlc.hwndParent = hWndParent;
|
m_dlc.hwndParent = hWndParent;
|
||||||
m_dlc.pszFolder = m_szPath;
|
m_dlc.pszFolder = m_szPath;
|
||||||
|
@ -2796,13 +2771,14 @@ public:
|
||||||
{
|
{
|
||||||
ATLASSERT(::IsWindow(m_hWnd));
|
ATLASSERT(::IsWindow(m_hWnd));
|
||||||
ATLASSERT(pstrTipText);
|
ATLASSERT(pstrTipText);
|
||||||
ATLASSERT(lstrlen(pstrTipText)<= 253);
|
ATLASSERT(lstrlen(pstrTipText) <= 253);
|
||||||
CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
|
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)
|
if(pstr == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
::lstrcpy(pstr, _T("~~"));
|
SecureHelper::strcpy_x(pstr, cchLen, _T("~~"));
|
||||||
::lstrcat(pstr, pstrTipText);
|
SecureHelper::strcat_x(pstr, cchLen, pstrTipText);
|
||||||
return SetWindowText(pstr);
|
return SetWindowText(pstr);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -2847,13 +2823,14 @@ public:
|
||||||
{
|
{
|
||||||
ATLASSERT(::IsWindow(m_hWnd));
|
ATLASSERT(::IsWindow(m_hWnd));
|
||||||
ATLASSERT(pstrTipText);
|
ATLASSERT(pstrTipText);
|
||||||
ATLASSERT(lstrlen(pstrTipText)<= 253);
|
ATLASSERT(lstrlen(pstrTipText) <= 253);
|
||||||
CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
|
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)
|
if(pstr == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
::lstrcpy(pstr, _T("~~"));
|
SecureHelper::strcpy_x(pstr, cchLen, _T("~~"));
|
||||||
::lstrcat(pstr, pstrTipText);
|
SecureHelper::strcat_x(pstr, cchLen, pstrTipText);
|
||||||
return SetWindowText(pstr);
|
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.
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
//
|
//
|
||||||
// This file is a part of the Windows Template Library.
|
// This file is a part of the Windows Template Library.
|
||||||
// The use and distribution terms for this software are covered by the
|
// 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.
|
// 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
|
// 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
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
@ -14,10 +14,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ATLAPP_H__
|
#ifndef __ATLAPP_H__
|
||||||
#error atlwinx.h requires atlapp.h to be included first
|
#error atlwinx.h requires atlapp.h to be included first
|
||||||
#endif
|
#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/MemTest.h>
|
||||||
#include <common/CriticalSection.h>
|
#include <common/CriticalSection.h>
|
||||||
|
#include <shellapi.h>
|
||||||
#include "Multilanguage.h"
|
#include "Multilanguage.h"
|
||||||
#include "User Interface.h"
|
#include "User Interface.h"
|
||||||
#include "N64 System.h"
|
#include "N64 System.h"
|
||||||
|
|
Loading…
Reference in New Issue