bool CxReceiveWin::SetWindowStyle( long nStyle ) { if( !m_hWnd ) return false; if( nStyle & AS_RECV_STRETCH ) { nStyle &= ~(AS_RECV_SCROLLBAR|AS_RECV_STRETCH_PROPORTIONAL); } if( nStyle & AS_RECV_STRETCH_PROPORTIONAL ) { nStyle &= ~(AS_RECV_SCROLLBAR|AS_RECV_STRETCH); } // debug - cox test // nStyle &= ~(AS_RECV_SCROLLBAR|AS_RECV_STRETCH_PROPORTIONAL); // nStyle |= AS_RECV_STRETCH; m_nStyle = nStyle; // Handle Stretch UpdateStretch( ); // ScrollBar control HandleScroll( WM_SIZE ); InvalidateRect( m_hWnd, NULL, m_nStyle & AS_RECV_SCROLLBAR ); UpdateWindow( m_hWnd ); return true; }
bool CxReceiveWin::SetWindowPos( int x, int y, int cx, int cy ) { bool ret = ::SetWindowPos( m_hWnd, NULL, x, y, cx, cy, SWP_NOZORDER ) != 0; HandleScroll( WM_SIZE ); UpdateStretch( ); InvalidateRect( m_hWnd, NULL, false ); UpdateWindow( m_hWnd ); return( ret ); }
void CTTSApp::MainHandleCommand( int id, HWND hWndControl, UINT codeNotify ) ///////////////////////////////////////////////////////////////// // // Handle each of the WM_COMMAND messages that come in, and deal with // them appropriately // { UINT cNumChar = 0; HRESULT hr = S_OK; TCHAR szAFileName[NORM_SIZE] = _T(""); static BOOL bIsUnicode = FALSE; BOOL bWavFileOpened = FALSE; LRESULT iFormat; CComPtr<ISpStream> cpWavStream; CComPtr<ISpStreamFormat> cpOldStream; HWND hwndEdit; BOOL bFileOpened = FALSE; // Get handle to the main edit box hwndEdit = GetDlgItem( m_hWnd, IDE_EDITBOX ); switch(id) { // About Box display case IDC_ABOUT: ::DialogBox( m_hInst, (LPCTSTR)IDD_ABOUT, m_hWnd, (DLGPROC)About ); break; // Any change to voices is sent to VoiceChange() function case IDC_COMBO_VOICES: if( codeNotify == CBN_SELCHANGE ) { hr = VoiceChange(); } if( FAILED( hr ) ) { TTSAppStatusMessage( m_hWnd, _T("Error changing voices\r\n") ); } break; // If user wants to speak a file pop the standard windows open file // dialog box and load the text into a global buffer (m_pszwFileText) // which will be used when the user hits speak. case IDB_OPEN: bFileOpened = CallOpenFileDialog( szAFileName, _T("TXT (*.txt)\0*.txt\0XML (*.xml)\0*.xml\0All Files (*.*)\0*.*\0") ); if( bFileOpened ) { DWORD dwFileSize = 0; wcscpy_s( m_szWFileName, _countof(m_szWFileName), CT2W( szAFileName ) ); ReadTheFile( szAFileName, &bIsUnicode, &m_pszwFileText ); if( bIsUnicode ) { // Unicode source UpdateEditCtlW( m_pszwFileText ); } else { // MBCS source #ifdef _UNICODE LPTSTR pszFileText = _tcsdup( m_pszwFileText ); #else // We're compiling ANSI, so we need to convert the string to MBCS // Note that a W2T may not be good here, since this string might // be very big LPTSTR pszFileText = NULL; int iNeeded = ::WideCharToMultiByte( CP_ACP, 0, m_pszwFileText, -1, NULL, 0, NULL, NULL ); pszFileText = (LPTSTR) ::malloc( sizeof( TCHAR ) * ( iNeeded + 1 ) ); ::WideCharToMultiByte( CP_ACP, 0, m_pszwFileText, -1, pszFileText, iNeeded + 1, NULL, NULL ); #endif if ( pszFileText ) { SetDlgItemText( m_hWnd, IDE_EDITBOX, pszFileText ); free( pszFileText ); } } } else { wcscpy_s( m_szWFileName, _countof(m_szWFileName), L"" ); } // Always SetFocus back to main edit window so text highlighting will work SetFocus( hwndEdit ); break; // Handle speak case IDB_SPEAK: HandleSpeak(); break; case IDB_PAUSE: if( !m_bStop ) { if( !m_bPause ) { SetWindowText( GetDlgItem( m_hWnd, IDB_PAUSE ), _T("Resume") ); // Pause the voice... m_cpVoice->Pause(); m_bPause = TRUE; TTSAppStatusMessage( m_hWnd, _T("Pause\r\n") ); } else { SetWindowText( GetDlgItem( m_hWnd, IDB_PAUSE ), _T("Pause") ); m_cpVoice->Resume(); m_bPause = FALSE; } } SetFocus( hwndEdit ); break; case IDB_STOP: TTSAppStatusMessage( m_hWnd, _T("Stop\r\n") ); // Set the global audio state to stop Stop(); SetFocus( hwndEdit ); break; case IDB_SKIP: { SetFocus( hwndEdit ); int fSuccess = false; int SkipNum = GetDlgItemInt( m_hWnd, IDC_SKIP_EDIT, &fSuccess, true ); ULONG ulGarbage = 0; WCHAR szGarbage[] = L"Sentence"; if ( fSuccess ) { TTSAppStatusMessage( m_hWnd, _T("Skip\r\n") ); m_cpVoice->Skip( szGarbage, SkipNum, &ulGarbage ); } else { TTSAppStatusMessage( m_hWnd, _T("Skip failed\r\n") ); } break; } case IDE_EDITBOX: // Set the global audio state to stop if user has changed contents of edit control if( codeNotify == EN_CHANGE ) { Stop(); } break; case IDB_SPEAKWAV: bWavFileOpened = CallOpenFileDialog( szAFileName, _T("WAV (*.wav)\0*.wav\0All Files (*.*)\0*.*\0") ); // Speak the wav file using SpeakStream if( bWavFileOpened ) { WCHAR szwWavFileName[NORM_SIZE] = L"";; wcscpy_s( szwWavFileName, _countof(szwWavFileName), CT2W( szAFileName ) ); // User helper function found in sphelper.h to open the wav file and // get back an IStream pointer to pass to SpeakStream hr = SPBindToFile( szwWavFileName, SPFM_OPEN_READONLY, &cpWavStream ); if( SUCCEEDED( hr ) ) { hr = m_cpVoice->SpeakStream( cpWavStream, SPF_ASYNC, NULL ); } if( FAILED( hr ) ) { TTSAppStatusMessage( m_hWnd, _T("Speak error\r\n") ); } } break; // Reset all values to defaults case IDB_RESET: TTSAppStatusMessage( m_hWnd, _T("Reset\r\n") ); SendDlgItemMessage( m_hWnd, IDC_VOLUME_SLIDER, TBM_SETPOS, TRUE, m_DefaultVolume ); SendDlgItemMessage( m_hWnd, IDC_RATE_SLIDER, TBM_SETPOS, TRUE, m_DefaultRate ); SendDlgItemMessage( m_hWnd, IDC_SAVETOWAV, BM_SETCHECK, BST_UNCHECKED, 0 ); SendDlgItemMessage( m_hWnd, IDC_EVENTS, BM_SETCHECK, BST_UNCHECKED, 0 ); SetDlgItemText( m_hWnd, IDE_EDITBOX, _T("Enter text you wish spoken here.") ); // reset output format SendDlgItemMessage( m_hWnd, IDC_COMBO_OUTPUT, CB_SETCURSEL, m_DefaultFormatIndex, 0 ); SendMessage( m_hWnd, WM_COMMAND, MAKEWPARAM(IDC_COMBO_OUTPUT, CBN_SELCHANGE), 0 ); // Change the volume and the rate to reflect what the UI says HandleScroll( ::GetDlgItem( m_hWnd, IDC_VOLUME_SLIDER ) ); HandleScroll( ::GetDlgItem( m_hWnd, IDC_RATE_SLIDER ) ); SetFocus( hwndEdit ); break; case IDC_COMBO_OUTPUT: if( codeNotify == CBN_SELCHANGE ) { // Get the audio output format and set it's GUID iFormat = SendDlgItemMessage( m_hWnd, IDC_COMBO_OUTPUT, CB_GETCURSEL, 0, 0 ); SPSTREAMFORMAT eFmt = (SPSTREAMFORMAT)SendDlgItemMessage( m_hWnd, IDC_COMBO_OUTPUT, CB_GETITEMDATA, iFormat, 0 ); CSpStreamFormat Fmt; Fmt.AssignFormat(eFmt); if ( m_cpOutAudio ) { hr = m_cpOutAudio->SetFormat( Fmt.FormatId(), Fmt.WaveFormatExPtr() ); } else { hr = E_FAIL; } if( SUCCEEDED( hr ) ) { hr = m_cpVoice->SetOutput( m_cpOutAudio, FALSE ); } if( FAILED( hr ) ) { TTSAppStatusMessage( m_hWnd, _T("Format rejected\r\n") ); } EnableSpeakButtons( SUCCEEDED( hr ) ); } break; case IDC_SAVETOWAV: { TCHAR szFileName[256]; _tcscpy_s(szFileName, _countof(szFileName), _T("\0")); bFileOpened = CallSaveFileDialog( szFileName, _T("WAV (*.wav)\0*.wav\0All Files (*.*)\0*.*\0") ); if (bFileOpened == FALSE) break; wcscpy_s( m_szWFileName, _countof(m_szWFileName), CT2W(szFileName) ); CSpStreamFormat OriginalFmt; hr = m_cpVoice->GetOutputStream( &cpOldStream ); if (hr == S_OK) { hr = OriginalFmt.AssignFormat(cpOldStream); } else { hr = E_FAIL; } // User SAPI helper function in sphelper.h to create a wav file if (SUCCEEDED(hr)) { hr = SPBindToFile( m_szWFileName, SPFM_CREATE_ALWAYS, &cpWavStream, &OriginalFmt.FormatId(), OriginalFmt.WaveFormatExPtr() ); } if( SUCCEEDED( hr ) ) { // Set the voice's output to the wav file instead of the speakers hr = m_cpVoice->SetOutput(cpWavStream, TRUE); } if ( SUCCEEDED( hr ) ) { // Do the Speak HandleSpeak(); } // Set output back to original stream // Wait until the speak is finished if saving to a wav file so that // the smart pointer cpWavStream doesn't get released before its // finished writing to the wav. m_cpVoice->WaitUntilDone( INFINITE ); cpWavStream.Release(); // Reset output m_cpVoice->SetOutput( cpOldStream, FALSE ); TCHAR szTitle[MAX_PATH]; TCHAR szConfString[MAX_PATH]; if ( SUCCEEDED( hr ) ) { LoadString( m_hInst, IDS_SAVE_NOTIFY, szConfString, MAX_PATH ); LoadString( m_hInst, IDS_NOTIFY_TITLE, szTitle, MAX_PATH ); MessageBox( m_hWnd, szConfString, szTitle, MB_OK | MB_ICONINFORMATION ); } else { LoadString( m_hInst, IDS_SAVE_ERROR, szConfString, MAX_PATH ); MessageBox( m_hWnd, szConfString, NULL, MB_ICONEXCLAMATION ); } break; } } return; }
/* ================ rvGEWorkspace::HandleMessage Handles window messages to the workspace ================ */ void rvGEWorkspace::HandleMessage ( UINT msg, WPARAM wParam, LPARAM lParam ) { switch ( msg ) { case WM_CLOSE: { if ( IsModified ( ) ) { if ( IDYES == gApp.MessageBox ( va("Save changes to the document \"%s\" before closing?", GetFilename() ), MB_YESNO|MB_ICONQUESTION ) ) { SendMessage ( mApplication->GetMDIFrame(), WM_COMMAND, MAKELONG(ID_GUIED_FILE_SAVE,0), 0 ); } } GetApplication ( )->GetNavigator().SetWorkspace(NULL); GetApplication ( )->GetTransformer().SetWorkspace(NULL); GetApplication ( )->GetProperties().SetWorkspace(NULL); break; } case WM_CAPTURECHANGED: if ( (HWND)lParam != mWnd ) { mDragScroll = false; mDragType = rvGESelectionMgr::HT_NONE; } break; case WM_SETCURSOR: { POINT point; idVec2 cursor; GetCursorPos ( &point ); cursor.Set ( point.x, point.y ); WindowToWorkspace ( cursor ); if ( mDragType == rvGESelectionMgr::HT_NONE ) { UpdateCursor ( cursor.x, cursor.y ); } else { UpdateCursor ( mDragType ); } break; } case WM_MOUSEWHEEL: if ( (short)HIWORD(wParam) > 0 ) { ZoomIn ( ); } else if ( (short)HIWORD(wParam) < 0 ) { ZoomOut ( ); } break; case WM_MOUSEMOVE: HandleMouseMove ( wParam, lParam ); break; case WM_MBUTTONDOWN: HandleMButtonDown ( wParam, lParam ); break; case WM_MBUTTONUP: HandleMButtonUp ( wParam, lParam ); break; case WM_LBUTTONDOWN: HandleLButtonDown ( wParam, lParam ); break; case WM_LBUTTONUP: HandleLButtonUp ( wParam, lParam ); break; case WM_LBUTTONDBLCLK: HandleLButtonDblClk ( wParam, lParam ); break; case WM_INITMENUPOPUP: SendMessage ( mApplication->GetMDIFrame(), msg, wParam, lParam ); break; case WM_COMMAND: HandleCommand ( wParam, lParam ); break; case WM_RBUTTONDOWN: HandleRButtonDown ( wParam, lParam ); break; case WM_SIZE: UpdateScrollbars(); break; case WM_VSCROLL: HandleScroll ( SB_VERT, wParam, lParam ); break; case WM_HSCROLL: HandleScroll ( SB_HORZ, wParam, lParam ); break; case WM_KEYDOWN: HandleKeyDown ( wParam, lParam ); break; } }
LRESULT CTrackbarControl::OnVScroll(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { HandleScroll(LOWORD(wParam), HIWORD(wParam)); return 0; }