//Copyright (c) 1998 - 1999 Microsoft Corporation #include #include"resource.h" #include"sdlgs.h" #include"snodes.h" #include #include #include #include BOOL OnHelp( HWND hwnd , LPHELPINFO lphi ); BOOL OnContextMenu( HWND hwnd , POINT& pt ); void ErrMessage( HWND hwndOwner , INT_PTR iResourceID ); extern void xxxErrMessage( HWND hwnd , INT_PTR nResMessageId , INT_PTR nResTitleId , UINT nFlags ); void SnodeErrorHandler( HWND hParent , INT nObjectId , DWORD dwStatus ); #define RECTWIDTH( rc ) ((rc).right - (rc).left) #define RECTHEIGHT( rc ) ((rc).bottom - (rc).top) extern BOOL g_bAppSrvMode; #if 0 //-------------------------------------------------------------------------------------- INT_PTR CALLBACK CachedSessionsDlgProc( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp ) { CSettingNode *pNode; DWORD nVal = 0; switch( msg ) { case WM_INITDIALOG : pNode = ( CSettingNode *)lp; ASSERT( pNode != NULL ); // ok to store null -- it's initializing DWLP_USER area SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode ); SetFocus( GetDlgItem( hDlg , IDC_EDIT_CACHEDSESSION ) ); pNode->m_pSettings->GetCachedSessions( &nVal ); SetDlgItemInt( hDlg , IDC_EDIT_CACHEDSESSION , ( UINT )nVal , FALSE ); break; case WM_COMMAND: if( LOWORD( wp ) == IDOK ) { pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER ); if( pNode == NULL ) { break; } BOOL bSuccess = FALSE; UINT uVal = GetDlgItemInt( hDlg , IDC_EDIT_CACHEDSESSION , &bSuccess , FALSE ); if( !bSuccess ) { ErrMessage( hDlg , IDS_ERR_CACHEDVALUE ); return 0; } // check for any errors when setting this value pNode->SetAttributeValue( ( DWORD )uVal ); EndDialog( hDlg , 0 ); } else if( LOWORD( wp ) == IDCANCEL ) { EndDialog( hDlg , 0 ); } break; } return 0; } #endif //-------------------------------------------------------------------------------------- INT_PTR CALLBACK UsePerSessionTempDirsDlgProc( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp ) { CSettingNode *pNode; // TCHAR tchNewName[ 128 ]; BOOL bVal = FALSE; static INT nOldSelection; switch( msg ) { case WM_INITDIALOG : pNode = ( CSettingNode *)lp; ASSERT( pNode != NULL ); // ok to store null -- it's initializing DWLP_USER area SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode ); if( pNode->GetObjectId( ) == PERSESSION_TEMPDIR ) { bVal = ( BOOL )pNode->xx_GetValue( ); } SendMessage( GetDlgItem( hDlg , IDC_RADIO_PERSESSION_YES ) , BM_SETCHECK , ( WPARAM )bVal , 0 ); SendMessage( GetDlgItem( hDlg , IDC_RADIO_PERSESSION_NO ) , BM_SETCHECK , ( WPARAM )!bVal , 0 ); POLICY_TS_MACHINE p; RegGetMachinePolicy(&p); EnableWindow(GetDlgItem(hDlg, IDC_RADIO_PERSESSION_YES), !p.fPolicyTempFoldersPerSession); EnableWindow(GetDlgItem(hDlg, IDC_RADIO_PERSESSION_NO), !p.fPolicyTempFoldersPerSession); nOldSelection = bVal; break; case WM_CONTEXTMENU: { POINT pt; pt.x = LOWORD( lp ); pt.y = HIWORD( lp ); if( hDlg == GetParent( ( HWND )wp ) ) { OnContextMenu( ( HWND )wp , pt ); } } break; case WM_HELP: OnHelp( hDlg , ( LPHELPINFO )lp ); break; case WM_COMMAND: if( LOWORD( wp ) == IDOK ) { pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER ); if( pNode == NULL ) { break; } INT nCurrent = IsDlgButtonChecked( hDlg , IDC_RADIO_PERSESSION_YES ) == BST_CHECKED ? 1 : 0; if( nOldSelection != nCurrent ) { DWORD dwStatus; if( FAILED( pNode->SetAttributeValue( ( DWORD )nCurrent , &dwStatus ) ) ) { SnodeErrorHandler( hDlg , pNode->GetObjectId( ) , dwStatus ); } } EndDialog( hDlg , 0 ); } else if( LOWORD( wp ) == IDCANCEL ) { EndDialog( hDlg , 0 ); } break; } return 0; } #if 0 // removed from final release //-------------------------------------------------------------------------------------- INT_PTR CALLBACK DefConSecurityDlgProc( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp ) { CSettingNode *pNode = NULL; DWORD nVal = 0; switch( msg ) { case WM_INITDIALOG : { TCHAR tchBuffer[ 128 ]; INT rgid[] = { IDS_RAA , IDS_AS , IDS_AA , -1 }; pNode = ( CSettingNode *)lp; ASSERT( pNode != NULL ); // ok to store null -- it's initializing DWLP_USER area SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode ); for( int idx = 0; rgid[ idx ] != -1 ; ++idx ) { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , rgid[ idx ] , tchBuffer , SIZE_OF_BUFFER( tchBuffer ) ) ); SendMessage( GetDlgItem( hDlg , IDC_COMBO_DEFSEC ) , CB_ADDSTRING , 0 , ( LPARAM )tchBuffer ); } nVal = ( DWORD )pNode->xx_GetValue( ); if( nVal == 0 ) { // error message ErrMessage( hDlg , IDS_ERROR_INVALID_SD ); } SendMessage( GetDlgItem( hDlg , IDC_COMBO_DEFSEC ) , CB_SETCURSEL , ( WPARAM )( nVal - 1 ) , 0 ); } break; case WM_CONTEXTMENU: { POINT pt; pt.x = LOWORD( lp ); pt.y = HIWORD( lp ); if( hDlg == GetParent( ( HWND )wp ) ) { OnContextMenu( ( HWND )wp , pt ); } } break; case WM_HELP: OnHelp( hDlg , ( LPHELPINFO )lp ); break; case WM_COMMAND: if( LOWORD( wp ) == IDOK ) { pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER ); if( pNode == NULL ) { break; } INT_PTR iSel = SendMessage( GetDlgItem( hDlg , IDC_COMBO_DEFSEC ) , CB_GETCURSEL , 0 , 0 ); if( iSel != CB_ERR ) { INT nOld = pNode->xx_GetValue( ); if( nOld != ( INT )( iSel + 1 ) ) { DWORD dwStatus; if( FAILED( pNode->SetAttributeValue( ( DWORD )( iSel + 1 ) , &dwStatus ) ) ) { SnodeErrorHandler( hDlg , pNode->GetObjectId( ) , dwStatus ); } } } else { ErrMessage( hDlg , IDS_ERROR_INVALID_SD ); } EndDialog( hDlg , 0 ); } else if( LOWORD( wp ) == IDCANCEL ) { EndDialog( hDlg , 0 ); } break; } return 0; } #endif //-------------------------------------------------------------------------------------- INT_PTR CALLBACK LicensingDlgProc( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp ) { CSettingNode *pNode; DWORD dwStatus; static HCURSOR hcurWait; static ULONG ulOldSelection; static ULONG *rgulModes = NULL; static WCHAR **rgszNames = NULL; static WCHAR **rgszDescriptions = NULL; static ULONG cModes = 0; switch( msg ) { case WM_INITDIALOG : { ULONG ulMode; ULONG iMode = 0; // index of ulMode in rgulModes DWORD nTermSrvMode; DWORD idcRA; RECT rcTextCtrl; HRESULT hr; HWND hLW; ISettingsComp *pSc; BOOL fIModeFound = FALSE; pNode = ( CSettingNode *)lp; ASSERT( pNode != NULL ); pSc = reinterpret_cast< ISettingsComp * >( pNode->GetInterface() ); ASSERT(NULL != pSc) // ok to store null -- it's initializing DWLP_USER area SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode ); // // read valid modes and cache them // hr = pSc->GetLicensingModeList( &cModes, &rgulModes, &dwStatus ); if (FAILED(hr)) { ErrMessage( hDlg , IDS_ERROR_NO_LICENSING_MODE_LIST ); EndDialog( hDlg , 0 ); goto done_init; } hr = pSc->GetLicensingMode( &ulMode, &dwStatus ); if (FAILED(hr)) { ErrMessage( hDlg , IDS_ERROR_NO_LICENSING_MODE ); EndDialog( hDlg , 0 ); goto done_init; } rgszNames = (WCHAR **) CoTaskMemAlloc(cModes * sizeof(WCHAR *)); if (NULL == rgszNames) { ErrMessage( hDlg , IDS_ERROR_NO_MEMORY ); EndDialog( hDlg , 0 ); goto done_init; } rgszDescriptions = (WCHAR **) CoTaskMemAlloc(cModes * sizeof(WCHAR *)); if (NULL == rgszDescriptions) { ErrMessage( hDlg , IDS_ERROR_NO_MEMORY ); EndDialog( hDlg , 0 ); goto done_init; } for (ULONG i = 0; i < cModes; i++) { hr = pSc->GetLicensingModeInfo(rgulModes[i],rgszNames+i,rgszDescriptions+i,&dwStatus); if (FAILED(hr)) { ErrMessage( hDlg , IDS_ERROR_NO_LICENSING_MODE_INFO ); EndDialog( hDlg , 0 ); goto done_init; } if (ulMode == rgulModes[i]) { iMode = i; fIModeFound = TRUE; } SendMessage( GetDlgItem( hDlg , IDC_LICENSING_MODE ) , CB_ADDSTRING , 0 , (LPARAM) rgszNames[i] ); } ASSERT(fIModeFound); ulOldSelection = iMode; // // make current mode the selection in the dropdown // SendMessage( GetDlgItem( hDlg , IDC_LICENSING_MODE ) , CB_SETCURSEL , (WPARAM) iMode , 0 ); // // Show the mode description in the description control // SetWindowText( GetDlgItem( hDlg , IDC_LICENSING_DESCRIPTION ), rgszDescriptions[iMode] ); // // make the valid remote admin control visible // hr = pSc->GetTermSrvMode( &nTermSrvMode , &dwStatus ); if (FAILED(hr)) { ErrMessage( hDlg , IDS_ERR_TERMSRVMODE ); EndDialog( hDlg , 0 ); goto done_init; } idcRA = nTermSrvMode ? IDC_LICENSING_TO_REMOTE_ADMIN : IDC_LICENSING_FROM_REMOTE_ADMIN; // // make the remote admin control into a link // GetWindowRect( GetDlgItem( hDlg , idcRA ) , &rcTextCtrl ); MapWindowPoints( NULL , hDlg , ( LPPOINT )&rcTextCtrl , 2 ); LinkWindow_RegisterClass(); hLW = CreateWindowEx( 0 , TEXT("Link Window") , TEXT( "" ) , WS_CLIPSIBLINGS | WS_TABSTOP | WS_CHILD | WS_VISIBLE, rcTextCtrl.left , rcTextCtrl.top , RECTWIDTH( rcTextCtrl ) , RECTHEIGHT( rcTextCtrl ), hDlg , ( HMENU )12, NULL, NULL ); { TCHAR tchBuffer[ 512 ]; GetWindowText( GetDlgItem( hDlg , idcRA ), tchBuffer , SIZE_OF_BUFFER( tchBuffer ) ) ; SetWindowText( hLW , tchBuffer ); } hcurWait = LoadCursor( NULL , MAKEINTRESOURCE( IDC_WAIT ) ) ; } done_init: break; case WM_CONTEXTMENU: { POINT pt; pt.x = LOWORD( lp ); pt.y = HIWORD( lp ); if( hDlg == GetParent( ( HWND )wp ) ) { OnContextMenu( ( HWND )wp , pt ); } } break; case WM_HELP: OnHelp( hDlg , ( LPHELPINFO )lp ); break; case WM_COMMAND: if ( LOWORD( wp ) == IDOK ) { pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER ); if( pNode == NULL ) { break; } LRESULT nCurSel = SendMessage(GetDlgItem( hDlg , IDC_LICENSING_MODE), CB_GETCURSEL, 0, 0); if ( ulOldSelection != (ULONG) nCurSel ) { if( FAILED( pNode->SetAttributeValue( ( DWORD )rgulModes[nCurSel] , &dwStatus ) ) ) { SnodeErrorHandler( hDlg , pNode->GetObjectId( ), dwStatus ); } } } if (( LOWORD( wp ) == IDCANCEL ) || ( LOWORD( wp ) == IDOK )) { LinkWindow_UnregisterClass( _Module.GetModuleInstance() ); if (NULL != rgszNames) { CoTaskMemFree(rgszNames); rgszNames = NULL; } if (NULL != rgszDescriptions) { CoTaskMemFree(rgszDescriptions); rgszDescriptions = NULL; } EndDialog( hDlg , 0 ); } else if (HIWORD( wp ) == CBN_SELCHANGE) { LRESULT nCurSel = SendMessage((HWND) lp, CB_GETCURSEL, 0, 0); ASSERT((ULONG)nCurSel < cModes); SetWindowText( GetDlgItem( hDlg , IDC_LICENSING_DESCRIPTION ), rgszDescriptions[nCurSel] ); } break; case WM_NOTIFY: switch (((LPNMHDR)lp)->code) { case NM_CHAR: if( ( ( LPNMCHAR )lp )->ch != VK_SPACE ) { break; } // else fall through case NM_RETURN: case NM_CLICK: { TCHAR szFile[MAX_PATH]; TCHAR szParam[MAX_PATH]; SHELLEXECUTEINFO sei; ZeroMemory( &sei , sizeof( SHELLEXECUTEINFO ) ); if ( GetSystemDirectory( szFile , SIZE_OF_BUFFER( szFile ) ) ) { lstrcpy( szParam , TEXT( ",2" ) ); lstrcpy( szFile , TEXT( "appwiz.cpl" ) ); sei.cbSize = sizeof( SHELLEXECUTEINFO ); sei.fMask = SEE_MASK_NOCLOSEPROCESS; sei.lpFile = szFile; sei.lpParameters = szParam; if( ShellExecuteEx( &sei ) ) { EndDialog( hDlg, IDCANCEL ); } } } break; } break; } return 0; } //-------------------------------------------------------------------------------------- INT_PTR CALLBACK ConfigActiveDesktop( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp ) { CSettingNode *pNode; //TCHAR tchNewName[ 128 ]; BOOL bVal = FALSE; static nOldSelection; switch( msg ) { case WM_INITDIALOG : pNode = ( CSettingNode *)lp; ASSERT( pNode != NULL ); // ok to store null -- it's initializing DWLP_USER area SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode ); if( pNode->GetObjectId( ) == ACTIVE_DESK ) { bVal = ( BOOL )pNode->xx_GetValue( ); } // control converted into a checkbox if the chkbx is checked it means disable // unchecked, well you've guest it. if( bVal ) { SendMessage( GetDlgItem( hDlg , IDC_RADIO_AD_ENABLE ) , BM_SETCHECK , ( WPARAM )FALSE , 0 ); } else { SendMessage( GetDlgItem( hDlg , IDC_RADIO_AD_ENABLE ) , BM_SETCHECK , ( WPARAM )TRUE , 0 ); //SendMessage( GetDlgItem( hDlg , IDC_RADIO_ADP_DISABLE ) , BM_SETCHECK , ( WPARAM )TRUE , 0 ); } nOldSelection = bVal; break; case WM_CONTEXTMENU: { POINT pt; pt.x = LOWORD( lp ); pt.y = HIWORD( lp ); if( hDlg == GetParent( ( HWND )wp ) ) { OnContextMenu( ( HWND )wp , pt ); } } break; case WM_HELP: OnHelp( hDlg , ( LPHELPINFO )lp ); break; case WM_COMMAND: if( LOWORD( wp ) == IDOK ) { pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER ); if( pNode == NULL ) { break; } INT nCurrent = IsDlgButtonChecked( hDlg , IDC_RADIO_AD_ENABLE ) == BST_CHECKED ? 0 : 1; if( nOldSelection != nCurrent ) { DWORD dwStatus; if( FAILED( pNode->SetAttributeValue( ( DWORD )nCurrent , &dwStatus ) ) ) { SnodeErrorHandler( hDlg , pNode->GetObjectId( ) , dwStatus ); } } EndDialog( hDlg , 0 ); } else if( LOWORD( wp ) == IDCANCEL ) { EndDialog( hDlg , 0 ); } break; } return 0; } //-------------------------------------------------------------------------------------- INT_PTR CALLBACK ConfigSingleSession( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp ) { CSettingNode *pNode; //TCHAR tchNewName[ 128 ]; BOOL bVal = FALSE; static nOldSelection; switch( msg ) { case WM_INITDIALOG : pNode = ( CSettingNode *)lp; ASSERT( pNode != NULL ); // ok to store null -- it's initializing DWLP_USER area SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode ); if( pNode->GetObjectId( ) == SINGLE_SESSION ) { bVal = ( BOOL )pNode->xx_GetValue( ); } // control converted into a checkbox if the chkbx is checked it means enable // unchecked, well you've guest it. SendMessage( GetDlgItem( hDlg , IDC_RADIO_SINGLE_SESSION_ENABLE ) , BM_SETCHECK , ( WPARAM )bVal , 0 ); POLICY_TS_MACHINE p; RegGetMachinePolicy(&p); EnableWindow(GetDlgItem(hDlg,IDC_RADIO_SINGLE_SESSION_ENABLE), !p.fPolicySingleSessionPerUser); nOldSelection = bVal; break; case WM_CONTEXTMENU: { POINT pt; pt.x = LOWORD( lp ); pt.y = HIWORD( lp ); if( hDlg == GetParent( ( HWND )wp ) ) { OnContextMenu( ( HWND )wp , pt ); } } break; case WM_HELP: OnHelp( hDlg , ( LPHELPINFO )lp ); break; case WM_COMMAND: if( LOWORD( wp ) == IDOK ) { pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER ); if( pNode == NULL ) { break; } INT nCurrent = IsDlgButtonChecked( hDlg , IDC_RADIO_SINGLE_SESSION_ENABLE ) == BST_CHECKED ? 1 : 0; if( nOldSelection != nCurrent ) { DWORD dwStatus; if( FAILED( pNode->SetAttributeValue( ( DWORD )nCurrent , &dwStatus ) ) ) { SnodeErrorHandler( hDlg , pNode->GetObjectId( ) , dwStatus ); } } EndDialog( hDlg , 0 ); } else if( LOWORD( wp ) == IDCANCEL ) { EndDialog( hDlg , 0 ); } break; } return 0; } //-------------------------------------------------------------------------------------- INT_PTR CALLBACK DeleteTempDirsDlgProc( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp ) { CSettingNode *pNode; // TCHAR tchNewName[ 128 ]; BOOL bVal = FALSE; static nOldSelection; switch( msg ) { case WM_INITDIALOG : pNode = ( CSettingNode *)lp; ASSERT( pNode != NULL ); // ok to store null -- it's initializing DWLP_USER area SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode ); if( pNode->GetObjectId( ) == DELETED_DIRS_ONEXIT ) { bVal = ( BOOL )pNode->xx_GetValue( ); } SendMessage( GetDlgItem( hDlg , IDC_RADIO_YES ) , BM_SETCHECK , ( WPARAM )bVal , 0 ); SendMessage( GetDlgItem( hDlg , IDC_RADIO_NO ) , BM_SETCHECK , ( WPARAM )!bVal , 0 ); POLICY_TS_MACHINE p; RegGetMachinePolicy(&p); EnableWindow(GetDlgItem(hDlg, IDC_RADIO_YES), !p.fPolicyDeleteTempFoldersOnExit); EnableWindow(GetDlgItem(hDlg, IDC_RADIO_NO), !p.fPolicyDeleteTempFoldersOnExit); nOldSelection = bVal; break; case WM_CONTEXTMENU: { POINT pt; pt.x = LOWORD( lp ); pt.y = HIWORD( lp ); if( hDlg == GetParent( ( HWND )wp ) ) { OnContextMenu( ( HWND )wp , pt ); } } break; case WM_HELP: OnHelp( hDlg , ( LPHELPINFO )lp ); break; case WM_COMMAND: if( LOWORD( wp ) == IDOK ) { pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER ); if( pNode == NULL ) { break; } INT nCurrent = IsDlgButtonChecked( hDlg , IDC_RADIO_YES ) == BST_CHECKED ? 1 : 0; if( nOldSelection != nCurrent ) { DWORD dwStatus; if( FAILED( pNode->SetAttributeValue( ( DWORD )nCurrent , &dwStatus ) ) ) { SnodeErrorHandler( hDlg , pNode->GetObjectId( ) , dwStatus ); } } EndDialog( hDlg , 0 ); } else if( LOWORD( wp ) == IDCANCEL ) { EndDialog( hDlg , 0 ); } break; } return 0; } //------------------------------------------------------------------------------- INT_PTR CALLBACK UserPermCompat( HWND hDlg , UINT msg, WPARAM wp , LPARAM lp ) { CSettingNode *pNode; BOOL bVal = FALSE; HICON hIcon; static nOldSelection; switch( msg ) { case WM_INITDIALOG : pNode = ( CSettingNode *)lp; ASSERT( pNode != NULL ); // ok to store null -- it's initializing DWLP_USER area SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode ); if( pNode->GetObjectId( ) == USERSECURITY ) { bVal = ( BOOL )pNode->xx_GetValue( ); } if( bVal ) { CheckDlgButton( hDlg , IDC_RADIO_TS4PERM , BST_CHECKED ); } else { CheckDlgButton( hDlg , IDC_RADIO_WIN2KPERM , BST_CHECKED ); } nOldSelection = bVal; hIcon = LoadIcon( _Module.GetModuleInstance( ) , MAKEINTRESOURCE( IDI_ICON_WARNING ) ); hIcon = ( HICON )LoadImage( _Module.GetModuleInstance( ) , MAKEINTRESOURCE( IDI_ICON_WARNING ) , IMAGE_ICON, 0, 0, 0 ); SendMessage( GetDlgItem( hDlg , IDC_USERPERM_ICON ) , STM_SETICON , ( WPARAM )hIcon , 0 ); break; case WM_COMMAND: if( LOWORD( wp ) == IDOK ) { pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER ); if( pNode == NULL ) { break; } INT nCurrent = IsDlgButtonChecked( hDlg , IDC_RADIO_TS4PERM ) == BST_CHECKED ? 1 : 0; if( nOldSelection != nCurrent ) { DWORD dwStatus; // flag error if not in appsrv mode // we should never get here -- unless someone mucked around with the registry. if( !g_bAppSrvMode ) { xxxErrMessage( hDlg , IDS_REMOTEADMIN_ONLY , IDS_WARN_TITLE , MB_OK | MB_ICONINFORMATION ); CheckRadioButton( hDlg , IDC_RADIO_WIN2KPERM , IDC_RADIO_TS4PERM, ( nOldSelection ) ? IDC_RADIO_TS4PERM : IDC_RADIO_WIN2KPERM ); return 0; } else if( FAILED( pNode->SetAttributeValue( ( DWORD )nCurrent , &dwStatus ) ) ) { SnodeErrorHandler( hDlg , pNode->GetObjectId( ) , dwStatus ); } } EndDialog( hDlg , 0 ); } else if( LOWORD( wp ) == IDCANCEL ) { EndDialog( hDlg , 0 ); } break; } return 0; } //------------------------------------------------------------------------------- // Each control has a helpid assign to them. Some controls share the same topic // check for these. //------------------------------------------------------------------------------- BOOL OnHelp( HWND hwnd , LPHELPINFO lphi ) { UNREFERENCED_PARAMETER( hwnd ); TCHAR tchHelpFile[ MAX_PATH ]; // // For the information to winhelp api // if( IsBadReadPtr( lphi , sizeof( HELPINFO ) ) ) { return FALSE; } if( lphi->iCtrlId <= -1 ) { return FALSE; } LoadString( _Module.GetModuleInstance( ) , IDS_HELPFILE , tchHelpFile , SIZE_OF_BUFFER( tchHelpFile ) ); ULONG_PTR rgdw[ 2 ]; rgdw[ 0 ] = ( ULONG_PTR )lphi->iCtrlId; rgdw[ 1 ] = ( ULONG_PTR )lphi->dwContextId; WinHelp( ( HWND )lphi->hItemHandle , tchHelpFile , HELP_WM_HELP , ( ULONG_PTR )&rgdw );//lphi->dwContextId ); return TRUE; } //------------------------------------------------------------------------------- // Used when user right clicks the item. "What's this?" will appear // // The first parameter must be the control in the dialog // because this is a helper function the caller must insure this. //------------------------------------------------------------------------------- BOOL OnContextMenu( HWND hwnd , POINT& pt ) { UNREFERENCED_PARAMETER( pt ); TCHAR tchHelpFile[ MAX_PATH ]; // // Make sure its not a dummy window // if( GetDlgCtrlID( hwnd ) <= ( int )-1 ) { return FALSE; } ULONG_PTR rgdw[ 2 ]; rgdw[ 0 ] = GetDlgCtrlID( hwnd ); rgdw[ 1 ] = GetWindowContextHelpId( hwnd ); LoadString( _Module.GetModuleInstance( ) , IDS_HELPFILE , tchHelpFile , SIZE_OF_BUFFER( tchHelpFile ) ); WinHelp( hwnd , tchHelpFile , HELP_CONTEXTMENU , ( ULONG_PTR )&rgdw ); return TRUE; }