📄 downloadui.cpp
字号:
{
if(!(dis->itemState & ODS_SELECTED))
SetTextColor(dis->hDC, RGB(0, 128, 128));
ostringstream ost;
float total;
float recvd;
uint32 percent;
ost.precision(2);
ost.flags(ios_base::fixed);
total = dli->GetTotalBytes();
recvd = dli->GetBytesReceived();
percent= (uint32)recvd/total*100;
if(total >= 1048576)
{
total /= 1048576;
recvd /= 1048576;
ost << "Paused (" << recvd << " of "<< total << " MB - " << percent << "%)";
}
else if(total >= 1024)
{
total /= 1024;
recvd /= 1024;
ost << "Paused (" << recvd << " of "<< total << " KB - " << percent << "%)";
}
else
{
ost << "Paused (" << dli->GetBytesReceived() << " of " <<
dli->GetTotalBytes() << " Bytes - " << percent << "%)";
}
displayString = ost.str();
break;
}
case kDownloadItemState_Error:
{
if(!(dis->itemState & ODS_SELECTED))
SetTextColor(dis->hDC, RGB(192, 0, 0));
ostringstream ost;
int32 index = (int32)dli->GetDownloadError();
ost << "Error: " << ErrorString[index];
displayString = ost.str();
break;
}
case kDownloadItemState_Done:
displayString = "Download Complete";
break;
default:
break;
}
uint32 pad = kPrePadding;
if(progressWidth)
pad = (progressWidth + kElementPadding);
CalcStringEllipsis(dis->hDC,
displayString,
ListView_GetColumnWidth(m_hwndList, 1) - pad);
rcClip.left += pad;
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
// If we changed the colors for the selected item, undo it
if(dis->itemState & ODS_SELECTED)
{
// Set the text background and foreground colors
SetTextColor(dis->hDC, GetSysColor(COLOR_WINDOWTEXT));
SetBkColor(dis->hDC, GetSysColor(COLOR_WINDOW));
}
// If the item is focused, now draw a focus rect around the entire row
if(dis->itemState & ODS_FOCUS)
{
// Draw the focus rect
DrawFocusRect(dis->hDC, &dis->rcItem);
}
break;
}
case IDC_INFO:
{
SetTextColor(dis->hDC, RGB(0, 0, 128));
SetBkColor(dis->hDC, GetSysColor(COLOR_WINDOW));
string displayString;
string longestString = "File Name :";
SIZE stringSize;
GetTextExtentPoint32(dis->hDC, longestString.c_str(),
longestString.size(), &stringSize);
uint32 dataOffset = stringSize.cx + 15;
RECT rcClip = dis->rcItem;
rcClip.left += 2;
uint32 itemCount = ListView_GetItemCount(m_hwndList);
DownloadItem* dli = NULL;
//ostringstream debug;
//debug << "itemCount: " << itemCount << endl;
//OutputDebugString(debug.str().c_str());
if(itemCount)
{
LV_ITEM item;
for(uint32 i = 0; i < itemCount; i++)
{
if(ListView_GetItemState(m_hwndList, i, LVIS_FOCUSED) & LVIS_FOCUSED)
{
item.mask = LVIF_PARAM;
item.iItem = i;
item.lParam = 0;
if(ListView_GetItem(m_hwndList, &item))
{
dli = (DownloadItem*)item.lParam;
break;
}
}
}
if(!dli)
{
item.mask = LVIF_PARAM;
item.iItem = 0;
item.lParam = 0;
ListView_GetItem(m_hwndList, &item);
dli = (DownloadItem*)item.lParam;
}
}
switch(dis->itemID)
{
case 0:
{
displayString = "Artist :";
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
rcClip.left = dis->rcItem.left + dataOffset;
displayString = "";
if(dli)
displayString = dli->GetMetaData().Artist();
SetTextColor(dis->hDC, GetSysColor(COLOR_WINDOWTEXT));
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
break;
}
case 1:
{
displayString = "Album :";
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
rcClip.left = dis->rcItem.left + dataOffset;
displayString = "";
if(dli)
displayString = dli->GetMetaData().Album();
SetTextColor(dis->hDC, GetSysColor(COLOR_WINDOWTEXT));
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
break;
}
case 2:
{
displayString = "Title :";
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
rcClip.left = dis->rcItem.left + dataOffset;
displayString = "";
if(dli)
displayString = dli->GetMetaData().Title();
SetTextColor(dis->hDC, GetSysColor(COLOR_WINDOWTEXT));
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
break;
}
case 3:
{
displayString = "Genre :";
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
rcClip.left = dis->rcItem.left + dataOffset;
displayString = "";
if(dli)
displayString = dli->GetMetaData().Genre();
SetTextColor(dis->hDC, GetSysColor(COLOR_WINDOWTEXT));
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
break;
}
case 4:
{
displayString = "Playlist :";
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
rcClip.left = dis->rcItem.left + dataOffset;
displayString = "";
if(dli)
displayString = dli->PlaylistName();
SetTextColor(dis->hDC, GetSysColor(COLOR_WINDOWTEXT));
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
break;
}
case 5:
{
displayString = "File Name :";
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
rcClip.left = dis->rcItem.left + dataOffset;
displayString = "";
if(dli)
displayString = dli->DestinationFile();
SetTextColor(dis->hDC, GetSysColor(COLOR_WINDOWTEXT));
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
break;
}
case 6:
{
displayString = "File Size :";
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
rcClip.left = dis->rcItem.left + dataOffset;
ostringstream ost;
float total;
ost.precision(2);
ost.flags(ios_base::fixed);
displayString = "";
if(dli)
{
total = dli->GetTotalBytes();
if(total >= 1048576)
{
total /= 1048576;
ost << total << " MB";
}
else if(total >= 1024)
{
total /= 1024;
ost << total << " KB";
}
else
{
ost << dli->GetTotalBytes() << " Bytes";
}
displayString = ost.str();
}
SetTextColor(dis->hDC, GetSysColor(COLOR_WINDOWTEXT));
ExtTextOut( dis->hDC,
rcClip.left, rcClip.top + 1,
ETO_CLIPPED | ETO_OPAQUE,
&rcClip,
displayString.c_str(),
displayString.size(),
NULL);
break;
}
}
SetTextColor(dis->hDC, GetSysColor(COLOR_WINDOWTEXT));
SetBkColor(dis->hDC, GetSysColor(COLOR_WINDOW));
break;
}
}
return result;
}
BOOL DownloadUI::Destroy()
{
return TRUE;
}
BOOL DownloadUI::Command(int32 command, HWND src)
{
switch(command)
{
case IDC_SHOWHELP:
{
ShowHelp(Download_Manager);
break;
}
case IDC_RESUME:
case IDC_PAUSE:
case IDC_CANCEL:
{
uint32 itemCount = ListView_GetItemCount(m_hwndList);
if(itemCount)
{
uint32 selected = ListView_GetSelectedCount(m_hwndList);
if(selected)
{
DownloadItem* dli = NULL;
LV_ITEM item;
for(uint32 i = 0; i < itemCount; i++)
{
if(ListView_GetItemState(m_hwndList, i, LVIS_SELECTED) & LVIS_SELECTED)
{
item.mask = LVIF_PARAM;
item.iItem = i;
item.lParam = 0;
if(ListView_GetItem(m_hwndList, &item))
{
dli = (DownloadItem*)item.lParam;
break;
}
}
}
if(dli)
{
switch(command)
{
case IDC_PAUSE:
{
m_dlm->CancelDownload(dli, true);
m_dlm->PauseDownloads();
EnableWindow(m_hwndPause, FALSE);
EnableWindow(m_hwndCancel, TRUE);
EnableWindow(m_hwndResume, TRUE);
break;
}
case IDC_CANCEL:
{
m_dlm->CancelDownload(dli, false);
EnableWindow(m_hwndPause, FALSE);
EnableWindow(m_hwndCancel, FALSE);
EnableWindow(m_hwndResume, TRUE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -