⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmview.cpp

📁 彩信浏览器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		dummy->stop();		delete dummy;	}	// Heuristic check to see whether it's a URL:	// - Contains a \, or	// - second char is :, or	// - contains neither : nor /	bool is_local_filename = false;	if (_tcschr(lpszPathName, _T('\\'))) is_local_filename = true;	if (lpszPathName[0] && lpszPathName[1] == _T(':')) is_local_filename = true;	if (_tcschr(lpszPathName, _T(':')) == NULL && _tcschr(lpszPathName, _T('/')) == NULL) is_local_filename = true;	net::url u;	TCHAR path[_MAX_PATH];	if (is_local_filename) {		TCHAR *pFilePart = 0;			GetFullPathName(lpszPathName, MAX_PATH, path, &pFilePart);		u = net::url::from_filename(T2CA(path));	} else {		_tcscpy(path, lpszPathName);		u = net::url::from_url(T2CA(path));	}		if (!u.is_absolute()) {		lib::logger::get_logger()->error("Cannot play from non-absolute pathname: %s", lpszPathName);		return;	}	dummy = create_player_instance(u, &s_player_feedback);	m_curDocFilename = u.get_url().c_str();	player = dummy;	set_status_line("Ready");	if(autostart || m_autoplay)		PostMessage(WM_COMMAND, ID_FILE_PLAY);}void MmView::OnFilePlay(){	if(player) {		player->play();		needs_done_redraw = true;		InvalidateRect(NULL);	}}void MmView::OnUpdateFilePlay(CCmdUI *pCmdUI){		pCmdUI->Enable((int)(player && player->is_play_enabled()));	pCmdUI->SetCheck((int)(player && player->is_play_active()));}void MmView::OnFilePause(){	if(player) player->pause();}void MmView::OnUpdateFilePause(CCmdUI *pCmdUI){	pCmdUI->Enable((int)(player && player->is_pause_enabled()));	pCmdUI->SetCheck((int)(player && player->is_pause_active()));}void MmView::OnFileStop(){	if(player) {		net::url u = player->get_url();		dg_or_dx_player *dummy = player;		player = 0;		if(dummy) {			dummy->stop();			delete dummy;		}		dummy = create_player_instance(u, &s_player_feedback);		player = dummy;		PostMessage(WM_INITMENUPOPUP,0, 0);		InvalidateRect(NULL); 		needs_done_redraw = false;	}}void MmView::OnUpdateFileStop(CCmdUI *pCmdUI){	pCmdUI->Enable((int)(player && player->is_stop_enabled()));	pCmdUI->SetCheck((int)(player && player->is_stop_active()));}void MmView::OnTimer(UINT nIDEvent){	// XXXX Jack: This seems a very funny way to get a final redraw...	CView::OnTimer(nIDEvent);	if(player && needs_done_redraw && player->is_stop_active()) {		player->on_done();		InvalidateRect(NULL);		PostMessage(WM_INITMENUPOPUP,0, 0); 		needs_done_redraw = false;	}}void MmView::OnLButtonDown(UINT nFlags, CPoint point){	if(player) player->on_click(point.x, point.y, GetSafeHwnd());	CView::OnLButtonDown(nFlags, point);}void MmView::OnMouseMove(UINT nFlags, CPoint point){	if(player) {		int new_cursor_id = player->get_cursor(point.x, point.y, GetSafeHwnd());		if(new_cursor_id>0) EnableToolTips(TRUE);		else CancelToolTips();		if(new_cursor_id != m_cursor_id) {			HCURSOR new_cursor = 0;			if(new_cursor_id == 0) {				new_cursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW); 			} else {				new_cursor = AfxGetApp()->LoadCursor(IDC_CURSOR_HAND); 			}			SetClassLongPtr(GetSafeHwnd(), GCLP_HCURSOR, HandleToLong(new_cursor));			m_cursor_id = new_cursor_id;		}	}	CView::OnMouseMove(nFlags, point);}void MmView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {	if(player) player->on_char(nChar);	CView::OnChar(nChar, nRepCnt, nFlags);}void MmView::OnFocusAdvance(){	if (player) player->on_focus_advance();}void MmView::OnFocusActivate(){	if (player) player->on_focus_activate();}void MmView::OnViewSource() {	USES_CONVERSION;	CString cmd = TEXT("Notepad.exe ");	std::string ustr = T2CA(LPCTSTR(m_curDocFilename));	net::url u = net::url::from_url(ustr);	if (!u.is_local_file()) {		lib::logger::get_logger()->error("View Source: only for local files...");		return;	}	assert(u.is_local_file());	// XXXX Also check OnUpdateViewSource	cmd += u.get_file().c_str(); // XXXX Incorrect	WinExec(T2CA(cmd), SW_SHOW);	}void MmView::OnUpdateViewSource(CCmdUI *pCmdUI) {	USES_CONVERSION;	bool b = player && !m_curDocFilename.IsEmpty() && net::url::from_url(T2CA(LPCTSTR(m_curDocFilename))).is_local_file();	pCmdUI->Enable(b?TRUE:FALSE);}void MmView::OnViewLog() {#ifdef WITHOUT_LOG_WINDOW	// Logging to file: open the file in notepad.	TCHAR buf[_MAX_PATH];	GetModuleFileName(NULL, buf, _MAX_PATH);	TCHAR *p1 = text_strrchr(buf,TCHAR('\\'));	if(p1 != NULL) *p1= TCHAR('\0');	text_strcat(buf, TEXT("\\"));	text_strcat(buf, log_name);	CString cmd = TEXT("Notepad.exe ");	cmd += buf;	WinExec((LPCSTR)(LPCTSTR)cmd, SW_SHOW);#else	// Logging to a window: show the window.	if (m_logwindow == NULL) {		m_logwindow = CLogWindow::GetLogWindowSingleton();	}	m_logwindow->ShowWindow(SW_SHOW);#endif}void MmView::OnUpdateViewLog(CCmdUI *pCmdUI) {	//pCmdUI->Enable((player && !m_curDocFilename.IsEmpty())?TRUE:FALSE);	pCmdUI->Enable(TRUE);}LPARAM MmView::OnSetClientRect(WPARAM wParam, LPARAM lParam) {	CFrameWnd *mainWnd = (CFrameWnd*) AfxGetMainWnd();		POINT pt = {0, 0}; // margins		CRect rc1;	mainWnd->GetWindowRect(&rc1);		CRect rc2;	GetWindowRect(&rc2);	int dx = rc1.Width() - rc2.Width();	int dy = rc1.Height() - rc2.Height();		CSize size(int(wParam) + (2*pt.x + 4) + dx, int(lParam) + (2*pt.y+4) + dy);		UINT flags = SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOMOVE;	mainWnd->SetWindowPos(&wndTop, 0, 0, size.cx, size.cy, flags);	return 0;}LPARAM MmView::OnReplaceDoc(WPARAM wParam, LPARAM lParam) {	USES_CONVERSION;	if(lParam == 0) return 0;	std::string *purlstr = (std::string *)lParam;	SetMMDocument(A2CT(purlstr->c_str()), wParam?true:false);	delete purlstr;	return 0;}void MmView::OnOpenFilter() {	USES_CONVERSION;	BOOL bOpenFileDialog = TRUE;	TCHAR lpszDefExt[] = TEXT("*.xml");	LPCTSTR lpszFileName = NULL; // no initial fn	DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;	TCHAR lpszFilter[] = TEXT("Settings Files (*.xml)|*.xml|All Files (*.*)|*.*||");	CWnd* pParentWnd = this;	CFileDialog dlg(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd);	dlg.m_ofn.lpstrTitle = TEXT("Select settings file");	if(!m_curDocFilename.IsEmpty()) {		// XXXX Is this correct? (URL vs. filename)		net::url u = net::url::from_url( T2CA((LPCTSTR) m_curDocFilename));		if(u.is_local_file())			dlg.m_ofn.lpstrInitialDir = get_directory(A2CT(u.get_file().c_str()));	}	if(dlg.DoModal()==IDOK) {		CString str = dlg.GetPathName();		m_curFilter = str;		smil2::test_attrs::load_test_attrs(lib::textptr(LPCTSTR(str)).c_str());#ifndef AM_PLAYER_DG		if(player) player->restart();#endif	}}void MmView::OnUpdateOpenFilter(CCmdUI *pCmdUI){	pCmdUI->Enable(TRUE);}void MmView::OnViewFilter(){	USES_CONVERSION;	if(!m_curFilter.IsEmpty()) {		CString cmd = TEXT("Notepad.exe ");		cmd += m_curFilter;		WinExec(T2CA((LPCTSTR)cmd), SW_SHOW);	}}void MmView::OnUpdateViewFilter(CCmdUI *pCmdUI){	pCmdUI->Enable(!m_curFilter.IsEmpty());}void MmView::OnViewAutoplay(){	m_autoplay = !m_autoplay;}void MmView::OnUpdateViewAutoplay(CCmdUI *pCmdUI){		pCmdUI->Enable(TRUE);	pCmdUI->SetCheck(m_autoplay?1:0);}BOOL MmView::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult){	if(!player) return false;		TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;	TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;	UINT_PTR nID = pNMHDR->idFrom;	CString strTipText;	if(pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||		pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) {		std::string str = player->get_pointed_node_str();		strTipText.Format(_T("Anchor: %s"), str.c_str());		if(pNMHDR->code == TTN_NEEDTEXTA)			strncpy(pTTTA->szText, str.c_str(), sizeof(pTTTA->szText));		else			::MultiByteToWideChar( CP_ACP , 0, str.c_str(), -1, pTTTW->szText, sizeof(pTTTW->szText) );		*pResult = 0;		return TRUE;	}	return FALSE;}INT_PTR MmView::OnToolHitTest(CPoint point, TOOLINFO* pTI) const {	if(player) {		int new_cursor_id = player->get_cursor(point.x, point.y, GetSafeHwnd());		if(new_cursor_id > 0) {			INT_PTR nHit = 1; // node id			if (pTI != NULL) {				pTI->hwnd = m_hWnd;				pTI->uId = (UINT_PTR)m_hWnd; // hWndChild;				pTI->uFlags |= TTF_IDISHWND;				pTI->lpszText = LPSTR_TEXTCALLBACK;				pTI->uFlags |= TTF_NOTBUTTON; //|TTF_CENTERTIP;			}			return nHit;		}	} 	return -1;  // not found}bool MmView::LocateWelcomeDoc(LPCTSTR rpath) {	TCHAR buf[_MAX_PATH];	GetModuleFileName(NULL, buf, _MAX_PATH);	TCHAR *p1 = text_strrchr(buf,'\\');	if(p1) *++p1='\0';	text_strcat(buf, rpath);	TCHAR path[_MAX_PATH];	TCHAR *pFilePart = 0;		GetFullPathName(buf, MAX_PATH, path, &pFilePart);	WIN32_FIND_DATA fd;	memset(&fd, 0, sizeof(WIN32_FIND_DATA));	HANDLE hFind = FindFirstFile(path, &fd); 	if(hFind != INVALID_HANDLE_VALUE){		FindClose(hFind);		m_welcomeDocFilename = path;		return true;	} 	return false;}void MmView::OnHelpWelcome(){	if(!m_welcomeDocFilename.IsEmpty())		SetMMDocument(m_welcomeDocFilename, true);}void MmView::OnUpdateHelpWelcome(CCmdUI *pCmdUI){	pCmdUI->Enable(!m_welcomeDocFilename.IsEmpty());}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -