674 lines
17 KiB
C++
674 lines
17 KiB
C++
//
|
|
// propperf.cpp: local resources property sheet dialog proc
|
|
//
|
|
// Tab E
|
|
//
|
|
// Copyright Microsoft Corporation 2000
|
|
// nadima
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
#define TRC_GROUP TRC_GROUP_UI
|
|
#define TRC_FILE "propperf"
|
|
#include <atrcapi.h>
|
|
|
|
#include "sh.h"
|
|
|
|
#include "commctrl.h"
|
|
#include "propperf.h"
|
|
|
|
|
|
CPropPerf* CPropPerf::_pPropPerfInstance = NULL;
|
|
|
|
//
|
|
// Lookup tables
|
|
//
|
|
|
|
//
|
|
// Controls that need to be disabled/enabled
|
|
// during connection (for progress animation)
|
|
//
|
|
CTL_ENABLE connectingDisableCtlsPPerf[] = {
|
|
{UI_IDC_STATIC_CHOOSE_SPEED, FALSE},
|
|
{IDC_COMBO_PERF_OPTIMIZE, FALSE},
|
|
{UI_IDC_STATIC_OPTIMIZE_PERF, FALSE},
|
|
{IDC_CHECK_DESKTOP_BKND, FALSE},
|
|
{IDC_CHECK_SHOW_FWD, FALSE},
|
|
{IDC_CHECK_MENU_ANIMATIONS, FALSE},
|
|
{IDC_CHECK_THEMES, FALSE},
|
|
{IDC_CHECK_BITMAP_CACHING, FALSE},
|
|
{IDC_CHECK_ENABLE_ARC, FALSE}
|
|
};
|
|
|
|
const UINT numConnectingDisableCtlsPPerf =
|
|
sizeof(connectingDisableCtlsPPerf)/
|
|
sizeof(connectingDisableCtlsPPerf[0]);
|
|
|
|
//
|
|
// MAP from optimization level to disabled feature list
|
|
// Disabled features list
|
|
//
|
|
// Index is the optimization level, entry is the disabled feature list
|
|
//
|
|
DWORD g_dwMapOptLevelToDisabledList[NUM_PERF_OPTIMIZATIONS] =
|
|
{
|
|
// 28K
|
|
TS_PERF_DISABLE_WALLPAPER |
|
|
TS_PERF_DISABLE_FULLWINDOWDRAG |
|
|
TS_PERF_DISABLE_MENUANIMATIONS |
|
|
TS_PERF_DISABLE_THEMING,
|
|
|
|
// 56K
|
|
TS_PERF_DISABLE_WALLPAPER |
|
|
TS_PERF_DISABLE_FULLWINDOWDRAG |
|
|
TS_PERF_DISABLE_MENUANIMATIONS,
|
|
|
|
// Broadband
|
|
TS_PERF_DISABLE_WALLPAPER,
|
|
|
|
// LAN
|
|
TS_PERF_DISABLE_NOTHING,
|
|
|
|
//
|
|
// CUSTOM (defaults to same as 56K
|
|
// 56K
|
|
//
|
|
// NOTE: This value gets changed at runtime
|
|
// to reflect the current custom settings
|
|
//
|
|
|
|
TS_PERF_DISABLE_WALLPAPER |
|
|
TS_PERF_DISABLE_FULLWINDOWDRAG |
|
|
TS_PERF_DISABLE_MENUANIMATIONS
|
|
};
|
|
|
|
|
|
//
|
|
// Mask of flags that can be set by checkboxes
|
|
//
|
|
#define CHECK_BOX_PERF_MASK (TS_PERF_DISABLE_WALLPAPER | \
|
|
TS_PERF_DISABLE_FULLWINDOWDRAG | \
|
|
TS_PERF_DISABLE_MENUANIMATIONS | \
|
|
TS_PERF_DISABLE_THEMING | \
|
|
TS_PERF_DISABLE_BITMAPCACHING | \
|
|
TS_PERF_DISABLE_CURSORSETTINGS) \
|
|
|
|
CPropPerf::CPropPerf(HINSTANCE hInstance, CTscSettings* pTscSet, CSH* pSh)
|
|
{
|
|
DC_BEGIN_FN("CPropPerf");
|
|
_hInstance = hInstance;
|
|
CPropPerf::_pPropPerfInstance = this;
|
|
_pTscSet = pTscSet;
|
|
_hwndDlg = NULL;
|
|
_fSyncingCheckboxes = FALSE;
|
|
_pSh = pSh;
|
|
|
|
TRC_ASSERT(_pTscSet,(TB,_T("_pTscSet is null")));
|
|
TRC_ASSERT(_pSh,(TB,_T("_pSh is null")));
|
|
|
|
DC_END_FN();
|
|
}
|
|
|
|
CPropPerf::~CPropPerf()
|
|
{
|
|
CPropPerf::_pPropPerfInstance = NULL;
|
|
}
|
|
|
|
INT_PTR CALLBACK CPropPerf::StaticPropPgPerfDialogProc(HWND hwndDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
//
|
|
// Delegate to appropriate instance (only works for single instance dialogs)
|
|
//
|
|
DC_BEGIN_FN("StaticDialogBoxProc");
|
|
DCINT retVal = 0;
|
|
|
|
TRC_ASSERT(_pPropPerfInstance, (TB,
|
|
_T("perf dialog has NULL static instance ptr\n")));
|
|
retVal = _pPropPerfInstance->PropPgPerfDialogProc( hwndDlg,
|
|
uMsg,
|
|
wParam,
|
|
lParam);
|
|
|
|
DC_END_FN();
|
|
return retVal;
|
|
}
|
|
|
|
|
|
INT_PTR CALLBACK CPropPerf::PropPgPerfDialogProc (HWND hwndDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
DC_BEGIN_FN("PropPgPerfDialogProc");
|
|
|
|
switch(uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
#ifndef OS_WINCE
|
|
int i;
|
|
#endif
|
|
_hwndDlg = hwndDlg;
|
|
//
|
|
// Position the dialog within the tab
|
|
//
|
|
SetWindowPos( hwndDlg, HWND_TOP,
|
|
_rcTabDispayArea.left, _rcTabDispayArea.top,
|
|
_rcTabDispayArea.right - _rcTabDispayArea.left,
|
|
_rcTabDispayArea.bottom - _rcTabDispayArea.top,
|
|
0);
|
|
|
|
InitPerfCombo();
|
|
SyncCheckBoxesToPerfFlags(
|
|
_pTscSet->GetPerfFlags());
|
|
|
|
//
|
|
// AutoReconnection checkbox
|
|
//
|
|
CheckDlgButton(hwndDlg, IDC_CHECK_ENABLE_ARC,
|
|
_pTscSet->GetEnableArc() ?
|
|
BST_CHECKED : BST_UNCHECKED);
|
|
|
|
|
|
_pSh->SH_ThemeDialogWindow(hwndDlg, ETDT_ENABLETAB);
|
|
return TRUE;
|
|
}
|
|
break; //WM_INITDIALOG
|
|
|
|
case WM_TSC_ENABLECONTROLS:
|
|
{
|
|
//
|
|
// wParam is TRUE to enable controls,
|
|
// FALSE to disable them
|
|
//
|
|
CSH::EnableControls( hwndDlg,
|
|
connectingDisableCtlsPPerf,
|
|
numConnectingDisableCtlsPPerf,
|
|
wParam ? TRUE : FALSE);
|
|
}
|
|
break;
|
|
|
|
|
|
case WM_SAVEPROPSHEET: //Intentional fallthru
|
|
case WM_DESTROY:
|
|
{
|
|
BOOL fEnableArc;
|
|
//
|
|
// Save page settings
|
|
//
|
|
DWORD dwCheckBoxPerfFlags = GetPerfFlagsFromCheckboxes();
|
|
DWORD dwPerfFlags = MergePerfFlags( dwCheckBoxPerfFlags,
|
|
_pTscSet->GetPerfFlags(),
|
|
CHECK_BOX_PERF_MASK );
|
|
|
|
fEnableArc = IsDlgButtonChecked(hwndDlg, IDC_CHECK_ENABLE_ARC);
|
|
_pTscSet->SetEnableArc(fEnableArc);
|
|
|
|
|
|
|
|
_pTscSet->SetPerfFlags(dwPerfFlags);
|
|
}
|
|
break; //WM_DESTROY
|
|
|
|
case WM_COMMAND:
|
|
{
|
|
switch(DC_GET_WM_COMMAND_ID(wParam))
|
|
{
|
|
case IDC_COMBO_PERF_OPTIMIZE:
|
|
{
|
|
if(HIWORD(wParam) == CBN_SELCHANGE)
|
|
{
|
|
OnPerfComboSelChange();
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
{
|
|
if (HIWORD(wParam) == BN_CLICKED)
|
|
{
|
|
//
|
|
// One of the checkboxes has been checked
|
|
// (prevent recursive looping due to feedback)
|
|
//
|
|
if (!_fSyncingCheckboxes)
|
|
{
|
|
OnCheckBoxStateChange((int)LOWORD(wParam));
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
DC_END_FN();
|
|
return 0;
|
|
}
|
|
|
|
BOOL CPropPerf::InitPerfCombo()
|
|
{
|
|
INT ret = 1;
|
|
DC_BEGIN_FN("InitPerfCombo");
|
|
|
|
TRC_ASSERT(g_fPropPageStringMapInitialized,
|
|
(TB,_T("Perf strings not loaded")));
|
|
|
|
TRC_ASSERT(_hwndDlg,
|
|
(TB,_T("_hwndDlg not set")));
|
|
|
|
if (!g_fPropPageStringMapInitialized)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
#ifndef OS_WINCE
|
|
while (ret && ret != CB_ERR)
|
|
{
|
|
ret = SendDlgItemMessage(_hwndDlg,
|
|
IDC_COMBO_PERF_OPTIMIZE,
|
|
CBEM_DELETEITEM,
|
|
0,0);
|
|
}
|
|
|
|
#else
|
|
SendDlgItemMessage(_hwndDlg, IDC_COMBO_PERF_OPTIMIZE, CB_RESETCONTENT, 0, 0);
|
|
#endif
|
|
//
|
|
// Only set up to the last but one string in the table
|
|
// as the last string is only used in the perf page
|
|
//
|
|
for (int i=0; i<NUM_PERF_OPTIMIZATIONS+1; i++)
|
|
{
|
|
if (NUM_PERF_OPTIMIZATIONS-1 == i)
|
|
{
|
|
//
|
|
// Skip the last but one string it's the
|
|
// custom entry for the main dialog
|
|
//
|
|
continue;
|
|
}
|
|
SendDlgItemMessage(_hwndDlg,
|
|
IDC_COMBO_PERF_OPTIMIZE,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM)(PDCTCHAR)g_PerfOptimizeStringTable[i].szString);
|
|
}
|
|
|
|
//
|
|
// Set the optimization level according to the disabled feature list
|
|
//
|
|
DWORD dwPerfFlags = _pTscSet->GetPerfFlags();
|
|
int optLevel = MapPerfFlagsToOptLevel(dwPerfFlags);
|
|
TRC_ASSERT(optLevel >= 0 && optLevel < NUM_PERF_OPTIMIZATIONS,
|
|
(TB,_T("optlevel %d out of range"), optLevel));
|
|
|
|
SendDlgItemMessage(_hwndDlg, IDC_COMBO_PERF_OPTIMIZE,CB_SETCURSEL,
|
|
(WPARAM)optLevel,0);
|
|
|
|
DC_END_FN();
|
|
return TRUE;
|
|
}
|
|
|
|
//
|
|
// Notification that the perf combo's selection has changed
|
|
//
|
|
VOID CPropPerf::OnPerfComboSelChange()
|
|
{
|
|
int curSel = 0;
|
|
DWORD dwDisableFeatureList = 0;
|
|
DC_BEGIN_FN("OnPerfComboSelChange");
|
|
|
|
//
|
|
// Figure out what the new selected item is
|
|
//
|
|
curSel = SendDlgItemMessage(_hwndDlg,
|
|
IDC_COMBO_PERF_OPTIMIZE,
|
|
CB_GETCURSEL,
|
|
0,0);
|
|
if (curSel < 0)
|
|
{
|
|
curSel = 0;
|
|
}
|
|
|
|
TRC_ASSERT(curSel < NUM_PERF_OPTIMIZATIONS,
|
|
(TB,_T("curSel (%d) > NUM_PERF_OPTIMIZATIONS (%d)"),
|
|
curSel,NUM_PERF_OPTIMIZATIONS));
|
|
if (curSel >= NUM_PERF_OPTIMIZATIONS)
|
|
{
|
|
curSel = NUM_PERF_OPTIMIZATIONS - 1;
|
|
}
|
|
|
|
//
|
|
// Map that to a list of disabled features
|
|
//
|
|
dwDisableFeatureList = MapOptimizationLevelToPerfFlags(curSel);
|
|
|
|
//
|
|
// Check and uncheck the checkboxes
|
|
//
|
|
SyncCheckBoxesToPerfFlags(dwDisableFeatureList);
|
|
|
|
DC_END_FN();
|
|
}
|
|
|
|
//
|
|
// Static method. Maps an optimization to the disabled feature list
|
|
// (packed in a DWORD)
|
|
// Params:
|
|
// [in] optLevel - optimization level from 0 to NUM_PERF_OPTIMIZATIONS-1
|
|
// [return] DWORD feature list
|
|
//
|
|
DWORD CPropPerf::MapOptimizationLevelToPerfFlags(int optLevel)
|
|
{
|
|
DWORD dwPerfFlags = 0;
|
|
DC_BEGIN_FN("MapOptimizationLevelToPerfFlags");
|
|
|
|
if (optLevel < 0)
|
|
{
|
|
TRC_ERR((TB,_T("Opt level out of range %d"),optLevel));
|
|
optLevel = 0;
|
|
}
|
|
if (optLevel >= NUM_PERF_OPTIMIZATIONS)
|
|
{
|
|
TRC_ERR((TB,_T("Opt level out of range %d"),optLevel));
|
|
optLevel = NUM_PERF_OPTIMIZATIONS - 1;
|
|
}
|
|
|
|
dwPerfFlags = g_dwMapOptLevelToDisabledList[optLevel];
|
|
|
|
TRC_NRM((TB,_T("Return disable list 0x%x"),dwPerfFlags));
|
|
|
|
DC_END_FN();
|
|
return dwPerfFlags;
|
|
}
|
|
|
|
//
|
|
// Toggles checkboxes to match the disabled feature list
|
|
// NOTE: the checkboxes represent 'enabled' features i.e the negation
|
|
// of the list
|
|
//
|
|
VOID CPropPerf::SyncCheckBoxesToPerfFlags(DWORD dwPerfFlagss)
|
|
{
|
|
DC_BEGIN_FN("SyncCheckBoxesToPerfFlags");
|
|
|
|
//
|
|
// Prevent recursive sets based on change notifications
|
|
// for the checkboxes (As they could change the combo leading
|
|
// to a subsequent change in the checkboxes, etc...)
|
|
//
|
|
|
|
_fSyncingCheckboxes = TRUE;
|
|
|
|
//
|
|
// Wallpaper (Desktop background)
|
|
//
|
|
CheckDlgButton(_hwndDlg, IDC_CHECK_DESKTOP_BKND,
|
|
(dwPerfFlagss & TS_PERF_DISABLE_WALLPAPER ?
|
|
BST_UNCHECKED : BST_CHECKED));
|
|
|
|
//
|
|
// Fullwindow drag
|
|
//
|
|
CheckDlgButton(_hwndDlg, IDC_CHECK_SHOW_FWD,
|
|
(dwPerfFlagss & TS_PERF_DISABLE_FULLWINDOWDRAG ?
|
|
BST_UNCHECKED : BST_CHECKED));
|
|
|
|
//
|
|
// Menu animations
|
|
//
|
|
CheckDlgButton(_hwndDlg, IDC_CHECK_MENU_ANIMATIONS,
|
|
(dwPerfFlagss & TS_PERF_DISABLE_MENUANIMATIONS ?
|
|
BST_UNCHECKED : BST_CHECKED));
|
|
|
|
//
|
|
// Theming
|
|
//
|
|
CheckDlgButton(_hwndDlg, IDC_CHECK_THEMES,
|
|
(dwPerfFlagss & TS_PERF_DISABLE_THEMING ?
|
|
BST_UNCHECKED : BST_CHECKED));
|
|
|
|
//
|
|
// Bitmap caching
|
|
//
|
|
CheckDlgButton(_hwndDlg, IDC_CHECK_BITMAP_CACHING,
|
|
(dwPerfFlagss & TS_PERF_DISABLE_BITMAPCACHING ?
|
|
BST_UNCHECKED : BST_CHECKED));
|
|
|
|
_fSyncingCheckboxes = FALSE;
|
|
|
|
DC_END_FN();
|
|
}
|
|
|
|
//
|
|
// Maps the disabled feature list to the appropriate optimization level
|
|
//
|
|
INT CPropPerf::MapPerfFlagsToOptLevel(DWORD dwPerfFlags)
|
|
{
|
|
DC_BEGIN_FN("MapPerfFlagsToOptLevel");
|
|
|
|
for (int i=0;i<NUM_PERF_OPTIMIZATIONS;i++)
|
|
{
|
|
if (g_dwMapOptLevelToDisabledList[i] == dwPerfFlags)
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
DC_END_FN();
|
|
//
|
|
// Didn't find an entry so return the last optimization level (custom)
|
|
//
|
|
return (NUM_PERF_OPTIMIZATIONS-1);
|
|
}
|
|
|
|
//
|
|
// Called whenever a checkbox's state changes (Checked or unchecked)
|
|
//
|
|
//
|
|
VOID CPropPerf::OnCheckBoxStateChange(int checkBoxID)
|
|
{
|
|
DWORD dwCheckBoxPerfFlags = 0;
|
|
DWORD dwPerfFlags = 0;
|
|
int optLevel = 0;
|
|
int curSel = 0;
|
|
DC_BEGIN_FN("OnCheckBoxStateChange");
|
|
|
|
//
|
|
// Pickup the current disabled feature list from the
|
|
// checkboxes
|
|
//
|
|
dwCheckBoxPerfFlags = GetPerfFlagsFromCheckboxes();
|
|
dwPerfFlags = MergePerfFlags( dwCheckBoxPerfFlags,
|
|
_pTscSet->GetPerfFlags(),
|
|
CHECK_BOX_PERF_MASK );
|
|
|
|
|
|
|
|
//
|
|
// Figure out the optimization level
|
|
//
|
|
optLevel = MapPerfFlagsToOptLevel(dwPerfFlags);
|
|
|
|
TRC_ASSERT(optLevel >= 0 && optLevel < NUM_PERF_OPTIMIZATIONS,
|
|
(TB,_T("optlevel %d out of range"), optLevel));
|
|
|
|
//
|
|
// If the combo is at a different opt level then switch it to
|
|
// the new level
|
|
//
|
|
curSel = SendDlgItemMessage(_hwndDlg,
|
|
IDC_COMBO_PERF_OPTIMIZE,
|
|
CB_GETCURSEL,
|
|
0,0);
|
|
|
|
//
|
|
// Update the custom disabled list based on the current
|
|
// settings
|
|
//
|
|
UpdateCustomDisabledList(dwPerfFlags);
|
|
|
|
if (curSel != optLevel)
|
|
{
|
|
SendDlgItemMessage(_hwndDlg, IDC_COMBO_PERF_OPTIMIZE,CB_SETCURSEL,
|
|
(WPARAM)optLevel,0);
|
|
}
|
|
|
|
DC_END_FN();
|
|
}
|
|
|
|
//
|
|
// Queries the checkboxes and returns the disabled feature list
|
|
// as a DWORD of flags
|
|
//
|
|
DWORD CPropPerf::GetPerfFlagsFromCheckboxes()
|
|
{
|
|
DWORD dwPerfFlags = 0;
|
|
DC_BEGIN_FN("GetPerfFlagsFromCheckboxes");
|
|
|
|
//
|
|
// Wallpaper (Desktop background)
|
|
//
|
|
if (!IsDlgButtonChecked(_hwndDlg,IDC_CHECK_DESKTOP_BKND))
|
|
{
|
|
dwPerfFlags |= TS_PERF_DISABLE_WALLPAPER;
|
|
}
|
|
|
|
//
|
|
// Fullwindow drag
|
|
//
|
|
if (!IsDlgButtonChecked(_hwndDlg,IDC_CHECK_SHOW_FWD))
|
|
{
|
|
dwPerfFlags |= TS_PERF_DISABLE_FULLWINDOWDRAG;
|
|
}
|
|
|
|
//
|
|
// Menu animations
|
|
//
|
|
if (!IsDlgButtonChecked(_hwndDlg,IDC_CHECK_MENU_ANIMATIONS))
|
|
{
|
|
dwPerfFlags |= TS_PERF_DISABLE_MENUANIMATIONS;
|
|
}
|
|
|
|
//
|
|
// Themeing
|
|
//
|
|
if (!IsDlgButtonChecked(_hwndDlg,IDC_CHECK_THEMES))
|
|
{
|
|
dwPerfFlags |= TS_PERF_DISABLE_THEMING;
|
|
}
|
|
|
|
//
|
|
// Bitmap caching
|
|
//
|
|
if (!IsDlgButtonChecked(_hwndDlg,IDC_CHECK_BITMAP_CACHING))
|
|
{
|
|
dwPerfFlags |= TS_PERF_DISABLE_BITMAPCACHING;
|
|
}
|
|
|
|
TRC_NRM((TB,_T("Return disable list 0x%x"),dwPerfFlags));
|
|
|
|
DC_END_FN();
|
|
return dwPerfFlags;
|
|
}
|
|
|
|
//
|
|
// Called to initialize the 'custom' disabled property
|
|
// list (e.g called at initialization time or after loading
|
|
// new settings
|
|
//
|
|
VOID CPropPerf::UpdateCustomDisabledList(DWORD dwPerfFlags)
|
|
{
|
|
DC_BEGIN_FN("InitCustomDisabledList");
|
|
|
|
//
|
|
//
|
|
//
|
|
INT optLevel = MapPerfFlagsToOptLevel(dwPerfFlags);
|
|
if (CUSTOM_OPTIMIZATION_LEVEL == optLevel)
|
|
{
|
|
//
|
|
// Store this as the new set of custom settings
|
|
//
|
|
TRC_NRM((TB,_T("Recording new custom setting: 0x%x"),
|
|
dwPerfFlags));
|
|
g_dwMapOptLevelToDisabledList[CUSTOM_OPTIMIZATION_LEVEL] =
|
|
dwPerfFlags;
|
|
}
|
|
|
|
DC_END_FN();
|
|
}
|
|
|
|
BOOL CPropPerf::EnableCheckBoxes(BOOL fEnable)
|
|
{
|
|
DC_BEGIN_FN("EnableCheckBoxes");
|
|
|
|
//
|
|
// Wallpaper (Desktop background)
|
|
//
|
|
EnableWindow( GetDlgItem(_hwndDlg, IDC_CHECK_DESKTOP_BKND),
|
|
fEnable );
|
|
|
|
//
|
|
// Fullwindow drag
|
|
//
|
|
EnableWindow( GetDlgItem(_hwndDlg, IDC_CHECK_SHOW_FWD),
|
|
fEnable );
|
|
//
|
|
// Menu animations
|
|
//
|
|
EnableWindow( GetDlgItem(_hwndDlg, IDC_CHECK_MENU_ANIMATIONS),
|
|
fEnable );
|
|
|
|
//
|
|
// Theming
|
|
//
|
|
EnableWindow( GetDlgItem(_hwndDlg, IDC_CHECK_THEMES),
|
|
fEnable );
|
|
|
|
//
|
|
// Bitmap caching
|
|
//
|
|
EnableWindow( GetDlgItem(_hwndDlg, IDC_CHECK_BITMAP_CACHING),
|
|
fEnable );
|
|
|
|
//
|
|
// Title static control
|
|
//
|
|
EnableWindow( GetDlgItem(_hwndDlg, UI_IDC_STATIC_OPTIMIZE_PERF),
|
|
fEnable );
|
|
|
|
DC_END_FN();
|
|
return TRUE;
|
|
}
|
|
|
|
//
|
|
// Merge perf flags from two sources
|
|
// 1) dwCheckBoxFlags - flags that come from the checkboxes
|
|
// 2) dwOrig set of passed in flags
|
|
//
|
|
// Use dwMask to preserve original flags that should not be affected
|
|
// by the checkboxes
|
|
//
|
|
// return - merged flags
|
|
//
|
|
DWORD CPropPerf::MergePerfFlags(DWORD dwCheckBoxFlags,
|
|
DWORD dwOrig,
|
|
DWORD dwMask)
|
|
{
|
|
DWORD dwNewFlags;
|
|
DC_BEGIN_FN("MergePerfFlags");
|
|
|
|
dwNewFlags = (dwOrig & ~dwMask) | (dwCheckBoxFlags & dwMask);
|
|
|
|
DC_END_FN();
|
|
return dwNewFlags;
|
|
}
|
|
|
|
|