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ấy chính xác tên máy tính trong lập trình VC++?
- WriteFile Kiểu dữ liệu là con trỏ
- Tràn bộ nhớ khi ghép code C lên win32 API, nguyên nhân và cách khắc phục ?
- Change process parent cho một process trong Win32
- Lập trình Hook với Visual C++
- Cách phát hiện thread bị suspend bởi 1 chương trình khác?
- Kiểm tra một file đã được mở bởi chương trình khác hay ko?
- Tạo Phím tắt trong nội bộ ứng dụng ???
- Sử dụng hàm RtlAdjustPrivilege để cài đặt quyền DebugProcess trên Windows 7?
- HOOK sự kiện mở một file thì cần làm những gì?
-
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();}
Rocket 1h là thực phẩm chức năng giúp tăng cường sinh lý nam có nguồn gốc hoàn toàn từ dược liệu tự nhiên. Rất nhiều nam giới đã tuyển lựa Rocket 1h như một phương thuốc hữu hiệu để cải thiện tình...
Nguyên nhân của cặp đôi nam nữ mua...