Chủ đề: hỏi về list- view
-
26-08-2015, 03:46 PM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
hỏi về list- view
mình muốn tạo 1 danh sách liệt kê tất cả các file trong 1 thư mục và dự định dùng list-view để hiển thị nó.
nhưng sau khi tạo mới 1 list-view thì chưa thể tiến hành add file list được (cái này lúc đầu mình nghĩ chắc add đơn giản như với EDIT [IMG]images/smilies/Cry.gif[/IMG])
mình kham khảo trên msdn thì chỉ có add cột, add ảnh, add mục cho list-view thôi [IMG]images/smilies/Cry.gif[/IMG]
vậy bây h mình muốn hiển thị danh sách tất cả các file thì làm như nào ạ?View more random threads:
- Làm quen với MFC
- sử dụng các hàm của dll sau khi inject vào applicaton đang chạy như thế nào ?
- Kiểm tra Process đang chạy là win32 hay 64 ?
- Cấp phát memory ở 1 tiến trình khác như thế nào
- Cách Trình Bày code Theo Chuẩn Charles Simonyi
- API GetCommandLine Tác dụng ?
- Cách thay đổi 1 vùng nhớ bằng hàm VirtualProtect
- SetClipboardData Trả Lại ClipBoard sau khi thực hiện GetClipboardData
- Scroll bar trong Win32 không hoạt động được?
- CreateFileMapping Trả về Lỗi = 5
-
28-08-2015, 10:55 AM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
ListView thì đơn giản là ListView thôi, còn danh sách các tập tin trong một thư mực thì bạn phải tự tìm và điền nó vào bằng mã. Nhớ hồi xưa trong Listbox có cả hàm để làm thay việc đó nhưng nó hiện ra cả thư mục con và thư mục gốc, bạn cũng tìm được cách loại bỏ nó trong bài viết trước rồi mà.
Có lẽ khúc mắc của bạn là chưa nắm được các Macro của ListView :
Khởi tạo cột : ListView_InsertColumn.
Thêm một item : ListView_InsertItem.
Thêm text cho các ô kế tiếp trong 1 item : ListView_SetItemText
-
31-08-2015, 09:25 AM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi MHoang
nhưng marco của listview để thực hiện việc add mã code trên thì mình đang thắc mắc. các tài liệu cũng chỉ hỗ trợ khởi tạo cột, item.
- - - Nội dung đã được cập nhật ngày 31-08-2015 lúc 02:25 PM - - -
Gửi bởi MHoang
-
31-08-2015, 04:16 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Bạn xem qua chương trình bên dưới nhé.
Mã:#include<Windows.h>#include<Commctrl.h>#include<shlwapi.h>#pragma comment(lib,"comctl32.lib")#pragma comment(lib,"shlwapi.lib") #define IDC_LISTVIEW 1001#define IDC_EDIT 1002#define IDC_BUTTON 1003#define IDC_STATIC 1004 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam){ static HWND hStatic, hButton, hEdit, hListview; INITCOMMONCONTROLSEX ice; int cxClient, cyClient, iLength, cCount; HINSTANCE hInstance; TCHAR szText[MAX_PATH], szFolder[MAX_PATH]; WIN32_FIND_DATA wfd; HANDLE hFind; LVCOLUMN lvc; LVITEM lvi; switch (message) { case WM_CREATE: ice.dwSize = sizeof(INITCOMMONCONTROLSEX); ice.dwICC = ICC_LISTVIEW_CLASSES; InitCommonControlsEx(&ice); hInstance = ((LPCREATESTRUCT)lparam)->hInstance; hListview = CreateWindowEx(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE, WC_LISTVIEW, TEXT(""), WS_CHILD | WS_VISIBLE | LVS_REPORT, 0, 0, 0, 0, hwnd, (HMENU)IDC_LISTVIEW, hInstance, NULL); hEdit = CreateWindow(TEXT("edit"), TEXT(""), WS_BORDER| WS_CHILD | WS_VISIBLE | ES_CENTER, 0, 0, 0, 0, hwnd, (HMENU)IDC_EDIT, hInstance, NULL); hButton = CreateWindow(TEXT("button"), TEXT("Do"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 0, 0, hwnd, (HMENU)IDC_BUTTON, hInstance, NULL); hStatic = CreateWindow(TEXT("static"), TEXT("Folder :"), WS_BORDER | WS_CHILD | WS_VISIBLE | SS_CENTER, 0, 0, 0, 0, hwnd, (HMENU)IDC_STATIC, hInstance, NULL); lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvc.fmt = LVCFMT_CENTER; lvc.cx = 60; lvc.iSubItem = 0; lvc.pszText = "stt"; ListView_InsertColumn(hListview, 0, &lvc); // lvc.cx = 200; lvc.iSubItem = 1; lvc.pszText = "Name"; ListView_InsertColumn(hListview, 1, &lvc); SetFocus(hEdit); return 0; case WM_SIZE: cxClient = LOWORD(lparam); cyClient = HIWORD(lparam); MoveWindow(hListview, 20, 20, cxClient - 40, cyClient - 95, TRUE); MoveWindow(hEdit, 120, cyClient - 50, cxClient - 240, 22, TRUE); MoveWindow(hButton, cxClient - 100, cyClient - 50, 80, 22, TRUE); MoveWindow(hStatic, 20, cyClient - 50, 80, 22, TRUE); return 0; case WM_COMMAND: switch (LOWORD(wparam)) { case IDC_BUTTON: iLength = GetWindowTextLength(hEdit); if (iLength == 0) { MessageBox(hwnd, TEXT("Error or text is NULL"), TEXT("Demo Listview"), MB_OK | MB_ICONEXCLAMATION); SetFocus(hEdit); return 0; } GetWindowText(hEdit, szFolder, iLength + 1); if (!PathIsDirectory(szFolder)) { MessageBox(hwnd, TEXT("Path is invalid"), TEXT("Demo Listview"), MB_OK | MB_ICONEXCLAMATION); SetFocus(hEdit); return 0; } wsprintf(szText, TEXT("%s\\*.*"), szFolder); hFind = FindFirstFile(szText, &wfd); if (hFind == INVALID_HANDLE_VALUE) { MessageBox(hwnd, TEXT("Folder is empty"), TEXT("Demo Listview"), MB_OK | MB_ICONEXCLAMATION); SetFocus(hEdit); return 0; } ListView_DeleteAllItems(hListview); do {// Đếm và ghi vào Listview các tập tin và thư mục đã tìm được cCount = ListView_GetItemCount(hListview); lvi.mask = LVIF_TEXT; lvi.iItem = cCount; lvi.iSubItem = 0; lvi.pszText = szText; wsprintf(szText, TEXT("%d"), cCount + 1); ListView_InsertItem(hListview, &lvi); ListView_SetItemText(hListview, cCount, 1, wfd.cFileName); } while (FindNextFile(hFind, &wfd)); FindClose(hFind); return 0; } break; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wparam, lparam);} int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd, int nShow){ HWND hwnd; MSG msg; WNDCLASS w; w.cbClsExtra = 0; w.cbWndExtra = 0; w.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); w.hCursor = LoadCursor(NULL, IDC_ARROW); w.hIcon = LoadIcon(NULL, IDI_APPLICATION); w.hInstance = hInstance; w.lpfnWndProc = WndProc; w.lpszClassName = TEXT("Demo Listview"); w.lpszMenuName = NULL; w.style = CS_HREDRAW | CS_VREDRAW; if (!RegisterClass(&w)) return 0; hwnd = CreateWindow(w.lpszClassName, w.lpszClassName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if (!hwnd) return 0; ShowWindow(hwnd, nShow); UpdateWindow(hwnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam;}
-
31-08-2015, 05:17 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi MHoang
mình đọc các tài liệu listview trên mạng nó rờm rà và khó hiểu trong lúc đọc mình ko hình dung được những marco ấy sẽ nằm đâu trong bài code của mình
mà phần khai báo thư viện:
#include<shlwapi.h>
#pragma comment(lib,"comctl32.lib")
#pragma comment(lib,"shlwapi.lib")
cả 3 thư viện trên nghĩa là j ạ? mình chưa gặp bao giờ
-
01-09-2015, 10:35 AM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi MHoang
-
01-09-2015, 05:33 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Khi chúng ta xây dựng 1 dự án trong IDE nào đó, thông thường chính IDE đã đưa sẵn vào dự án một số thư viện nhập cơ bản như kernel32.lib; user32.lib; gdi32.lib.
Trong chương trình trên, chúng ta sử dụng ListView - điều khiển này không được đưa sẵn vào dự án, Windows API có khai báo các điều khiển này trong <Commctrl.h> và khi liên kết cần thư viện nhập là "comctl32.lib".
Cũng tương tự, PathIsDirectory là không có sẵn, nó được khai báo trong <shlwapi.h> và cần liên kết với "shlwapi.lib". Nói chung khi đụng chạm tới xử lý đường dẫn, nên tham khảo Windows Shell, nó có một tập các tiện ích rất tốt, bạn có thể tham khảo trong https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
-
03-09-2015, 11:10 AM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi MHoang
Mã:#include <conio.h> #include <windows.h> #include <stdio.h> void EnumerateFolders (const char* parent) { WIN32_FIND_DATA fd; char folder[MAX_PATH]; sprintf(folder, "%s\\*.*", parent); HANDLE hFind = FindFirstFile (folder, &fd); if (hFind != INVALID_HANDLE_VALUE) { do { if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..")) { printf ("%s\\%s ", parent, fd.cFileName); char child[MAX_PATH]; sprintf(child, "%s\\%s", parent, fd.cFileName); EnumerateFolders (child); } } else { printf("%s ", fd.cFileName); } } while (FindNextFile (hFind, &fd)); FindClose (hFind); } } int main() { EnumerateFolders("C:"); getch(); }
bạn có thể hướng dẫn mình được không?
-
03-09-2015, 02:56 PM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi MHoangGửi bởi MHoang
có thể do mình chưa hiểu rõ các hàm chuyển từ C sang API
còn nữa, trên C mình tạo hàm con riêng để liệt kê các file và sử dụng hoàn toàn bằng các câu lệnh C. lúc chuyển sang API thì nó ko chạy đc
-
04-09-2015, 08:30 AM #10Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Mã bên dưới là mình chỉnh mã của bạn trên Dev-C++5.11 với kiểu dự án Console trên C. Chương trình chỉ thụt lùi vào 2 Spacebar cho mỗi File hoặc Directory con, thư mục là đường dẫn đầy đủ được bao trong cặp "[]" còn tập tin thì chỉ hiển thị tên trong cặp "<>".
Nhớ là số dòng hiển thị quá nhiều thì có thể bị cắt bớt trong Console và các hàm đếm có thể tính theo thứ tự AnphaBet nhé.
Mã:#include <conio.h>#include <windows.h>#include <stdio.h> void DisplayString(const char * szString, int nSpace){ int i; for (i = 0; i < nSpace; i++) printf(" "); printf(szString); printf(" ");}// Phân cấp như treeviewvoid EnumerateAll(const char * szParent, int nSpace){ WIN32_FIND_DATA fd; HANDLE hFind; char szString[MAX_PATH]; // Hiển thị thư mục này trong cặp ngoặc [] sprintf(szString, "[%s]", szParent); DisplayString(szString, nSpace); // Đếm các thư mục và tập tin trong nó sprintf(szString, "%s\\*", szParent); if (INVALID_HANDLE_VALUE != (hFind = FindFirstFile(szString, &fd))) { do { if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // Là thư mục { if (fd.cFileName[0] != '.') // Không phải thư mục gốc hoặc thư mục cha { sprintf(szString, "%s\\%s", szParent, fd.cFileName); EnumerateAll(szString, nSpace + 2); } } else // Là tập tin { sprintf(szString, "<%s>", fd.cFileName); // Hiển thị trong cặp ngoặc <> DisplayString(szString, nSpace + 2); } } while (FindNextFile(hFind, &fd)); FindClose(hFind); }}int main(){ EnumerateAll("C:\\HOANG\\Console", 0); // Thay đổi đường dẫn khác để kiểm tra getch();}
Pallet nhựa Long An đã trở thành một trong những lựa chọn phổ biến cho nhu cầu vận chuyển và lưu trữ hàng hóa trong nhiều ngành công nghiệp. Với đặc tính nhẹ nhàng, chắc chắn và dễ vận chuyển, các...
Thanh lý pallet nhựa Long An giá rẻ