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

📄 eringdlg.cpp

📁 微软PDA上的铃声软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		btn->SetWindowText(str);
		btn->GetWindowRect(&rt);
		int i=rt.Height();
		rt.top=h;
		rt.bottom=rt.top+i;
		btn->MoveWindow(&rt);
	}
	btn=(CButton *)GetDlgItem(IDC_STOP);
	str.LoadString(IDS_STOP);
	if (btn){
		btn->SetWindowText(str);
		btn->GetWindowRect(&rt);
		int i=rt.Height();
		rt.top=h;
		rt.bottom=rt.top+i;
		btn->MoveWindow(&rt);
	}
//	btn=(CButton *)GetDlgItem(IDC_ABOUT);
//	str.LoadString(IDS_ABOUT);
//	if (btn){
//		btn->SetWindowText(str);
//		btn->GetWindowRect(&rt);
//		int i=rt.Height();
//		rt.top=h;
//		rt.bottom=rt.top+i;
//		btn->MoveWindow(&rt);
//		h=rt.bottom+3;
//	}
	m_List.GetWindowRect(&rt);
	rt.top=h;
	m_List.MoveWindow(&rt);
}

void CERingDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	CStatic *stc;
	CRect rt;
	int y;
	CPen pen,*pold;
	CFont font,*fold;
	LOGFONT lgf;
	CString str;
	str.LoadString(IDS_MSGTITLE);
	memset(&lgf,0,sizeof(LOGFONT));
	stc=(CStatic *)GetDlgItem(IDC_MSGSHOWN);
	stc->GetWindowRect(&rt);
	ScreenToClient(&rt);
	y=rt.bottom+2;
	pen.CreatePen(PS_SOLID,2,RGB(0,0,0));
	pold=dc.SelectObject(&pen);
	GetClientRect(&rt);
	dc.MoveTo(rt.left,y);
	dc.LineTo(rt.right,y);
	dc.SelectObject(pold);
	pen.DeleteObject();
	stc=(CStatic *)GetDlgItem(IDC_TITLE);
	stc->GetWindowRect(&rt);
	ScreenToClient(&rt);
	lgf.lfHeight=rt.Height();
	lgf.lfWeight=FW_BOLD;
	lgf.lfCharSet=GB2312_CHARSET;
	lgf.lfOutPrecision =OUT_DEFAULT_PRECIS;
	lgf.lfClipPrecision =CLIP_DEFAULT_PRECIS;
	lgf.lfQuality =DEFAULT_QUALITY;
	lgf.lfPitchAndFamily =DEFAULT_PITCH ;
	wsprintf(lgf.lfFaceName,L"System");
	font.CreateFontIndirect(&lgf);
	fold=dc.SelectObject(&font);
	dc.DrawText(str,&rt,DT_LEFT);
	dc.SelectObject(fold);
	font.DeleteObject();
	// Do not call CDialog::OnPaint() for painting messages
}

void CERingDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 
{
	if (nState==1&&!bAbout){
		GetSelectedWave();
		m_List.DeleteAllItems();
		ReleaseData();
		listWave.RemoveAll();
		listRing.RemoveAll();
		count=0;
		ListView_SetExtendedListViewStyle 
			(m_List.GetSafeHwnd(), LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
		ReFresh();		
	}
	// TODO: Add your message handler code here
	CDialog::OnActivate(nState, pWndOther, bMinimized);
	
}



int CERingDlg::FindStrInArray(CStringArray &arr, CString str)
{
	int result=-1;
	for (int i=0;i<arr.GetSize();i++){
		CString tmp;
		tmp=arr.GetAt(i);
		if (!tmp.CompareNoCase(str)){
			result=i;
			break;
		}
	}
	return result;
}

void CERingDlg::AddStrToArray(CStringArray &arr, CString str)
{
	if (FindStrInArray(arr,str)==-1)
		arr.Add(str);
}

void CERingDlg::DeleteStrFromArray(CStringArray &arr, CString str)
{
	int i;
	i=FindStrInArray(arr,str);
	if (i!=-1)
		arr.RemoveAt(i);
}

void CERingDlg::Preview()
{
	POSITION pos = m_List.GetFirstSelectedItemPosition();
	if (pos != NULL)
	{
//		DWORD vol;
//		BOOL bChange=FALSE;
//		MMRESULT res;
//		res=waveOutGetVolume(0,&vol);
//		if (res==MMSYSERR_NOERROR){
//			if (vol==0){
//				waveOutSetVolume(0,0x8888);
//				bChange=TRUE;
//			}
//		}
		while (pos)
		{
			int nItem = m_List.GetNextSelectedItem(pos);
			nItem=m_List.GetItemData(nItem);
			sndPlaySound(listWave.GetAt(nItem)->szPathName,SND_SYNC);
			// you could do your own processing on nItem here
			if (beStop){
				beStop=false;
				return;
			}
			Sleep(300);
		}
//		if (bChange)
//			waveOutSetVolume(0,vol);
	}
}

void CERingDlg::SetRingTone(CStringArray &arr)
{
	CString pn,fn;
	int i;
	CStringArray err;
	err.SetSize(0);
	for (i=0;i<listRing.GetSize();i++){
		fn=listRing.GetAt(i);
		if (FindStrInArray(listSelect,fn)==-1){
			CFileStatus fsta;
			CFile::GetStatus(fn,fsta);
			fsta.m_attribute=BYTE(0);
			CFile::SetStatus(fn,fsta);
			DeleteFile(fn);
		}
	}
	for (i=0;i<listSelect.GetSize();i++){
		fn=listSelect.GetAt(i);
		if (FindStrInArray(listRing,fn)==-1){
			CString nn;
			nn.LoadString(IDS_RINGTONEFOLDER);
			nn=nn+fn.Right(fn.GetLength()-fn.ReverseFind('\\'));
			if (!CopyFile(fn,nn,TRUE)){
				err.Add(fn);
			}
			else{
				CFileStatus fsta;
				CFile::GetStatus(nn,fsta);
				fsta.m_attribute=BYTE(0);
				CFile::SetStatus(nn,fsta);
			}
		}
	}
	if (err.GetSize()>0){
		CString msg,title;
		msg.LoadString(IDS_ADDFAILURE);
		for (i=0;i<err.GetSize();i++){
			if (i==err.GetSize()-1)
				msg+=err.GetAt(i);
			else
				msg+=err.GetAt(i)+L";";
		}
		title.LoadString(IDS_TITLE);
		bAbout=true;
		::MessageBox(this->GetSafeHwnd(),msg,title,MB_OK|MB_ICONINFORMATION);
	}
}

int CERingDlg::CompareFunc_Name(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	CERingDlg* pdlg = (CERingDlg*) lParamSort;
	CString    strItem1 = pdlg->listWave.GetAt(lParam1)->szFileName;
	CString    strItem2 = pdlg->listWave.GetAt(lParam2)->szFileName;
	int result;
	
	if (pdlg->sortStatus[0]){
		result=strItem2.CompareNoCase(strItem1);
	}
	else{
		result=strItem1.CompareNoCase(strItem2);
	}
	return result;
}

int CERingDlg::CompareFunc_Date(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	CERingDlg* pdlg = (CERingDlg*) lParamSort;
	FILETIME filetm1;
	FILETIME filetm2;
	filetm1=pdlg->listWave.GetAt(lParam1)->ftLastWriteTime;
	filetm2=pdlg->listWave.GetAt(lParam2)->ftLastWriteTime;
	int result;
	if (filetm1.dwHighDateTime==filetm2.dwHighDateTime){
		if (pdlg->sortStatus[1])
			result=(filetm2.dwLowDateTime>filetm1.dwLowDateTime);
		else
			result=(filetm1.dwLowDateTime>filetm2.dwLowDateTime);
	}
	else{
		if (pdlg->sortStatus[1])
			result=(filetm2.dwHighDateTime>filetm1.dwHighDateTime);
		else
			result=(filetm1.dwHighDateTime>filetm2.dwHighDateTime);
	}
	return result;
}

int CERingDlg::CompareFunc_Size(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	CERingDlg* pdlg = (CERingDlg*) lParamSort;
	DWORD fs1;
	DWORD fs2;
	fs1=pdlg->listWave.GetAt(lParam1)->nFileSize;
	fs2=pdlg->listWave.GetAt(lParam2)->nFileSize;
	int result;
	
	if (fs1==fs2){
		result=0;
	}
	else{
		if (pdlg->sortStatus[2]){
			result=fs2>fs1;
		}
		else{
			result=fs1>fs2;
		}
	}
	return result;
}

void CERingDlg::ReleaseData()
{
	PFINDDATA pData;
	for (int i=0;i<listWave.GetSize();i++){
		pData=listWave.GetAt(i);
		delete pData;
	}
}

BOOL CERingDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
{
	// TODO: Add your specialized code here and/or call the base class
	NMHDR nmh;
	nmh=*(LPNMHDR)lParam;
	if (nmh.code==GN_CONTEXTMENU&&nmh.hwndFrom==m_List.GetSafeHwnd() ){
		HMENU hMenu;
		CMenu popmenu;
		hMenu = LoadMenu (AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_RIGHTMENU));
		if (hMenu){
			CMenu popmenu;
			popmenu.Attach(hMenu);
			CMenu* smenu=popmenu.GetSubMenu (0);
			GetPopMenuPos(m_Point);
			bAbout=true;
			smenu->TrackPopupMenu(TPM_LEFTALIGN   , m_Point.x, m_Point.y, this, NULL);
			bAbout=false;
			smenu->DestroyMenu();
			DestroyMenu (hMenu);
			m_List.ScreenToClient(&m_Point);
		}
		return TRUE;
	}	
	
	return CDialog::OnNotify(wParam, lParam, pResult);
}

void CERingDlg::OnSetRingTone(WPARAM wParam,LPARAM lParam)
{
	UINT flag;
	CString fn,nn;
//	m_List.ScreenToClient(&m_Point);
	int nItem=m_List.HitTest(m_Point,&flag);
	if (nItem!=-1) {
		fn=listWave.GetAt(nItem)->szPathName;
		nn.LoadString(IDS_RINGTONEFOLDER);
		nn+=L"\\"+listWave.GetAt(nItem)->szFileName;
		if (CopyFile(fn,nn,TRUE)){
			CFileStatus fsta;
			CFile::GetStatus(nn,fsta);
			fsta.m_attribute=BYTE(0);
			CFile::SetStatus(nn,fsta);
		}
		SetRegistKey(listWave.GetAt(nItem)->szFileName);
		ListView_SetItemState (m_List.GetSafeHwnd(), nItem, 
			UINT((int(TRUE) + 1) << 12), LVIS_STATEIMAGEMASK);
		m_List.SetItemState(nItem,LVNI_FOCUSED,LVNI_FOCUSED);
		m_List.SetItemState(nItem,LVNI_SELECTED,LVNI_SELECTED);
		AddStrToArray(listRing,nn);
		listWave.GetAt(nItem)->szPathName=nn;
//		AddStrToArray(listSelect,fn);
//		else{
//			CString msg,title;
//			msg.LoadString(IDS_SETRINGERR);
//			title.LoadString(IDS_TITLE);
//			bAbout=true;
//			::MessageBox(this->GetSafeHwnd(),msg,title,MB_OK|MB_ICONINFORMATION);
//			bAbout=false;
//		}
	}
}

void CERingDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
		//start of code add by galaxy 0226
//	CDialog::OnLButtonDown(nFlags, point);
}

void CERingDlg::SetRegistKey(CString fn)
{
	HKEY hRes;
	if (RegOpenKeyEx(HKEY_CURRENT_USER,RINGTONEKEY,0,0,&hRes)!=ERROR_SUCCESS ){
		RegCloseKey(hRes);
		return;
	}
	if (RegSetValueEx(hRes,SCRIPT,0,REG_SZ,(BYTE *)SCRIPTVALUE,sizeof(TCHAR)*(1+_tcslen(SCRIPTVALUE)))!=ERROR_SUCCESS){
	}
	if (RegSetValueEx(hRes,SOUND,0,REG_SZ,(BYTE *)fn.GetBuffer(0),sizeof(TCHAR)*(1+fn.GetLength()))!=ERROR_SUCCESS){
	}
	if (RegSetValueEx(hRes,CATEGORY,0,REG_SZ,(BYTE *)CATEGORYVALUE,sizeof(TCHAR)*(1+_tcslen(CATEGORYVALUE)))!=ERROR_SUCCESS){
	}
	RegCloseKey(hRes);
}

void CERingDlg::GetSelectedWave()
{
	listSelect.RemoveAll();
	listSelect.SetSize(0);
	int nItem;
	UINT status;
	BOOL bChecked;
	for (nItem=0;nItem<m_List.GetItemCount();nItem++){
		status=m_List.GetItemState(nItem,LVIS_STATEIMAGEMASK);
		bChecked=(BOOL)(((status & LVIS_STATEIMAGEMASK)>>12)-1);
		if (bChecked){
			int idx;
			idx=m_List.GetItemData(nItem);
			listSelect.Add(listWave.GetAt(idx)->szPathName);
		}
	}
}

int CERingDlg::FindFileInArray(CArray<PFINDDATA,PFINDDATA> &arr, CString fn)
{
	int result=-1;
	for (int i=0;i<arr.GetSize();i++){
		CString tmp;
		tmp=arr.GetAt(i)->szFileName;
		if (tmp.GetLength()>0){
			if (!tmp.CompareNoCase(fn)){
				result=i;
				break;
			}
		}
	}
	return result;
}

void CERingDlg::ReFresh()
{
	DWORD ThreadId;
	HANDLE	hThread;
	AfxGetApp()->DoWaitCursor(1);
	hThread=CreateThread(NULL,0,(unsigned long(__cdecl*)(void*))thdGetList,this,0,&ThreadId);
	CloseHandle(hThread);
	AfxGetApp()->DoWaitCursor(-1);
}

void CERingDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
//	if (nChar==0x86||nChar==VK_RETURN)
//		return;
	if (nChar==0x86) m_exit=false;
	CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CERingDlg::OnCancelMode() 
{
	CDialog::OnCancelMode();
	
	// TODO: Add your message handler code here
	m_exit=true;
//	CDialog::OnOK();	
}

void CERingDlg::GetPopMenuPos(CPoint &pt)
{
	int nIndex1 = m_List.GetTopIndex();
	int nIndex2;
	nIndex2 = m_List.GetNextItem(-1,LVNI_FOCUSED);
	if(nIndex2 <0 ) 
		nIndex2 = nIndex1;

	CRect rect;
	m_List.GetItemRect( nIndex2, &rect, LVIR_BOUNDS);
	pt.x=(rect.left + rect.right)/2;
	pt.y=(rect.top + rect.bottom)/2;
	m_List.ClientToScreen(&pt);
}



BOOL CERingDlg::OnHelpInfo(HELPINFO* pHelpInfo) 
{
	// TODO: Add your message handler code here and/or call default
	if (GetFileAttributes(L"\\windows\\Add_Phone_Ring.htm")!=0xFFFFFFFF)
		CreateProcess(TEXT("PegHelp.exe"),TEXT("Add_Phone_Ring.htm#Main_Contents"),NULL, NULL, FALSE, 0, NULL, NULL, NULL, NULL); 

	#if(_WIN32_WCE > 211)
	return CDialog::OnHelpInfo(pHelpInfo);
	#else
	return TRUE;
	#endif
}

void CERingDlg::GetList()
{
	CString str;
	str.LoadString(IDS_RINGTONEFOLDER);
	GetWaveList(str,FALSE);
	GetWaveList(L"\\windows",FALSE);
	GetWaveList(L"");
	switch(indexSort){
	case 0:{
			m_List.SortItems(CompareFunc_Name,(LPARAM) this);
			break;
		}
	case 1:{
			m_List.SortItems(CompareFunc_Date,(LPARAM) this);
			break;
		}
	case 2:{
			m_List.SortItems(CompareFunc_Size,(LPARAM) this);
			break;
		}
	}
}

DWORD WINAPI CERingDlg::thdGetList(LPVOID para) {
	CERingDlg *pDlg;
	pDlg=(CERingDlg*)para;
	pDlg->GetList();
	return 0;
}

⌨️ 快捷键说明

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