📄 eringdlg.cpp
字号:
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 + -