+class CDowloadingAppsListView
+ : public CUiWindow<CListView>
+{
+public:
+ HWND Create(HWND hwndParent)
+ {
+ RECT r = {10, 150, 320, 350};
+ const DWORD style = WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SINGLESEL
+ | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | LVS_NOCOLUMNHEADER;
+
+ HWND hwnd = CListView::Create(hwndParent, r, NULL, style, WS_EX_CLIENTEDGE);
+
+ AddColumn(0, 150, LVCFMT_LEFT);
+ AddColumn(1, 120, LVCFMT_LEFT);
+
+ return hwnd;
+ }
+
+ VOID LoadList(ATL::CSimpleArray<PAPPLICATION_INFO> arrInfo)
+ {
+ for (INT i = 0; i < arrInfo.GetSize(); ++i)
+ {
+ PAPPLICATION_INFO AppInfo = arrInfo[i];
+ AddRow(i, AppInfo->szName.GetString(), DOWNLOAD_STATUS::DLWaiting);
+ }
+ }
+
+ VOID SetDownloadStatus(INT ItemIndex, DOWNLOAD_STATUS Status)
+ {
+ HWND hListView = GetWindow();
+ ATL::CStringW szBuffer = LoadStatusString(Status);
+ ListView_SetItemText(hListView, ItemIndex, 1, const_cast<LPWSTR>(szBuffer.GetString()));
+ }
+
+ BOOL AddItem(INT ItemIndex, LPWSTR lpText)
+ {
+ LVITEMW Item;
+
+ ZeroMemory(&Item, sizeof(Item));
+
+ Item.mask = LVIF_TEXT | LVIF_STATE;
+ Item.pszText = lpText;
+ Item.iItem = ItemIndex;
+
+ return InsertItem(&Item);
+ }
+
+ VOID AddRow(INT RowIndex, LPCWSTR szAppName, const DOWNLOAD_STATUS Status)
+ {
+ ATL::CStringW szStatus = LoadStatusString(Status);
+ AddItem(RowIndex,
+ const_cast<LPWSTR>(szAppName));
+ SetDownloadStatus(RowIndex, Status);
+ }
+
+ BOOL AddColumn(INT Index, INT Width, INT Format)
+ {
+ LVCOLUMNW Column;
+ ZeroMemory(&Column, sizeof(Column));
+
+ Column.mask = LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM;
+ Column.iSubItem = Index;
+ Column.cx = Width;
+ Column.fmt = Format;
+
+ return (InsertColumn(Index, &Column) == -1) ? FALSE : TRUE;
+ }
+};
+