resmanager.c
来自「MINI GUI1.6X源码」· C语言 代码 · 共 959 行 · 第 1/2 页
C
959 行
SendMessage (hwnd, LVM_GETSUBITEMTEXT, 0, (LPARAM) & subItem); memset (pathnameb, 0x00, PATH_MAX + 1); ptrpath = pathnameb + PATH_MAX; item = SendMessage (hChildWnd1, TVM_GETSELITEM, 0, 0); *ptrpath = '/'; ptrpath++; *ptrpath = 0; while (item != 0) { SendMessage (hChildWnd1, TVM_GETITEMTEXT, (WPARAM) item, (LPARAM) buffer); ptrpath = ptrpath - 1 - strlen (buffer) - 1; *ptrpath++ = '/'; strncpy (ptrpath, buffer, strlen (buffer)); item = SendMessage (hChildWnd1, TVM_GETRELATEDITEM, TVIR_PARENT, (LPARAM) item); } fprintf (stderr, "---------%s\n", ptrpath); exec_app (ptrpath, subItem.pszText, 0); } } }}/* end list view *//* tree view */static voidtv_notify_process (HWND hWnd, int id, int code, DWORD addData){ DIR *dir; struct dirent *dir_ent; struct stat my_stat; TVITEMINFO itemInfo; GHANDLE itemtree; GHANDLE curItem; GHANDLE item; char pathname[PATH_MAX + 1]; char *ptr = NULL; char buffer[50]; char pathnameb[PATH_MAX + 1]; char proname[50]; switch (code) { case TVN_CLICKED: break; case TVN_DBLCLK: break; case TVN_SELCHANGE: case TVN_UNFOLDED: itemtree = 0; curItem = 0; item = 0; memset (pathname, 0x00, PATH_MAX + 1); memset (pathnameb, 0x00, PATH_MAX + 1); curItem = SendMessage (hWnd, TVM_GETSELITEM, 0, 0); curItem = SendMessage (hWnd, TVM_GETRELATEDITEM, TVIR_FIRSTCHILD, (LPARAM) curItem); item = SendMessage (hWnd, TVM_GETRELATEDITEM, TVIR_NEXTSIBLING, (LPARAM) curItem); while (item != 0) { SendMessage (hWnd, TVM_DELTREE, (WPARAM) item, 0); item = SendMessage (hWnd, TVM_GETRELATEDITEM, TVIR_NEXTSIBLING, (LPARAM) curItem); } curItem = SendMessage (hWnd, TVM_GETSELITEM, 0, 0); item = curItem; SendMessage (hWnd, TVM_GETITEMTEXT, (WPARAM) curItem, (LPARAM) buffer); strcpy (proname, buffer); ptr = pathnameb + PATH_MAX - strlen (buffer) - 1; *ptr = '/'; ptr++; strcat(ptr, buffer); while (item != 0) { item = SendMessage (hWnd, TVM_GETRELATEDITEM, TVIR_PARENT, (LPARAM) item); SendMessage (hWnd, TVM_GETITEMTEXT, (WPARAM) item, (LPARAM) buffer); ptr = ptr -1 -strlen(buffer) -1; *ptr++='/'; strncpy(ptr,buffer,strlen(buffer)); } if (stat (ptr, &my_stat) < 0) return; if (S_ISREG (my_stat.st_mode)) return; dir = opendir (ptr); if (dir == NULL) { MessageBox (hChildWnd1, "Cann't Open it!", "Error", MB_OK | MB_ICONSTOP); return; } else { ModifyListView (ptr); } strcpy (pathname, ptr); ptr = pathname + strlen (pathname); *ptr++ = '/'; *ptr = 0; while ((dir_ent = readdir (dir)) != NULL) { memset (&itemInfo, 0x00, sizeof (TVITEMINFO)); itemInfo.hIconFold = hIconFold; itemInfo.hIconUnfold = hIconUnfold; if (strcmp (dir_ent->d_name, ".") == 0 || strcmp (dir_ent->d_name, "..") == 0) continue; strcpy (ptr, dir_ent->d_name); if (stat (pathname, &my_stat) < 0) { continue; } if (!(S_ISDIR (my_stat.st_mode) || S_ISREG (my_stat.st_mode))) continue; itemInfo.text = (char *) strdup (dir_ent->d_name); if (S_ISDIR (my_stat.st_mode)) { itemInfo.dwFlags = TVIF_FOLD; } itemtree = SendMessage (hWnd, TVM_ADDITEM, (WPARAM) curItem, (LPARAM) & itemInfo); if (S_ISDIR (my_stat.st_mode)) { itemInfo.text = "."; SendMessage (hWnd, TVM_ADDITEM, (WPARAM) itemtree, (LPARAM) & itemInfo); } } closedir (dir); break; }}/* end tree view */static void ModifyListView (char *mypath){ int k = 0; struct stat my_stat; char pathname[PATH_MAX+1]; char *ptr = NULL; SendMessage(hChildWndList,LVM_DELALLITEM,0,0); mydir = opendir (mypath); strcpy(pathname,mypath); ptr = pathname +strlen(pathname); *ptr++='/'; *ptr = 0; while ((mydir_ent = readdir (mydir)) != NULL) {// if (strcmp(mydir_ent->d_name, ".") == 0 || strcmp(mydir_ent->d_name, "..") == 0)// continue; strcpy(ptr,mydir_ent->d_name); if (stat (pathname, &my_stat) < 0 ){ continue; } if ( !( S_ISDIR(my_stat.st_mode) || S_ISREG(my_stat.st_mode) ) ) continue; myitem.nItem = k; myitem.itemData = (DWORD) strdup (mydir_ent->d_name); SendMessage (hChildWndList, LVM_ADDITEM, 0, (LPARAM) & myitem); mysubdata1.nItem = k++; mysubdata1.subItem = 0; mysubdata1.pszText = mydir_ent->d_name; if (S_ISDIR(my_stat.st_mode)){ mysubdata1.flags |= LVFLAG_BITMAP; // mysubdata1.image = (DWORD) & foldercc; mysubdata1.nTextColor = PIXEL_blue; } else { mysubdata1.nTextColor = PIXEL_black; } SendMessage (hChildWndList, LVM_FILLSUBITEM, 0, (LPARAM) & mysubdata1); { int fsize = 0; char buffer [30]; mysubdata1.subItem = 1; if (S_ISREG(my_stat.st_mode) ) fsize = my_stat.st_size; sprintf(buffer, "%d",fsize); mysubdata1.pszText = buffer; mysubdata1.nTextColor = PIXEL_black; SendMessage (hChildWndList, LVM_FILLSUBITEM,0,(LPARAM) & mysubdata1); } mysubdata1.subItem = 2; if (S_ISDIR(my_stat.st_mode)) { mysubdata1.pszText = "directory"; } else if (S_ISREG(my_stat.st_mode)) { mysubdata1.pszText = "regular file"; } mysubdata1.nTextColor = PIXEL_black; SendMessage (hChildWndList, LVM_FILLSUBITEM, 0, (LPARAM) & mysubdata1); mysubdata1.subItem = 3; mysubdata1.pszText = ctime(&my_stat.st_mtime); mysubdata1.pszText[strlen(mysubdata1.pszText)-1] = 0; mysubdata1.nTextColor = PIXEL_black; SendMessage (hChildWndList, LVM_FILLSUBITEM, 0, (LPARAM) & mysubdata1); } closedir (mydir);}static intCtrlTestWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam){ switch (message) { case MSG_CREATE: { static TVITEMINFO dirInfo; DIR *dir; struct dirent *dir_ent; struct stat my_stat; TVITEMINFO tvItemInfo; GHANDLE itemtree; char pathname[PATH_MAX + 1]; char *ptr = NULL; LVCOLUMN s1; hIconFold = LoadIconFromFile (HDC_SCREEN, "res/fold.ico", 0); hIconUnfold = LoadIconFromFile (HDC_SCREEN, "res/unfold.ico", 0); dirInfo.text = "/"; dirInfo.hIconFold = hIconFold; dirInfo.hIconUnfold = hIconUnfold; hChildWnd1 = CreateWindow (CTRL_TREEVIEW, "", WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | WS_BORDER | TVS_WITHICON | TVS_SORT, IDC_TREEVIEW, 10, 20, 200, 350, hWnd, (DWORD) & dirInfo); hChildWndList = CreateWindow (CTRL_LISTVIEW, "List View", WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL, IDC_LISTVIEW, 210, 20, 400, 350, hWnd, 0); /* tree view */ SetNotificationCallback (hChildWnd1, tv_notify_process); dir = opendir ("/"); strcpy (pathname, "/"); ptr = pathname + strlen (pathname); *ptr++ = '/'; *ptr = 0; while ((dir_ent = readdir (dir)) != NULL) { memset (&tvItemInfo, 0x00, sizeof (TVITEMINFO)); tvItemInfo.hIconFold = hIconFold; tvItemInfo.hIconUnfold = hIconUnfold; if (strcmp (dir_ent->d_name, ".") == 0 || strcmp (dir_ent->d_name, "..") == 0) continue; strcpy (ptr, dir_ent->d_name); if (stat (pathname, &my_stat) < 0) { continue; } if (!(S_ISDIR (my_stat.st_mode) || S_ISREG (my_stat.st_mode))) continue; tvItemInfo.text = (char *) strdup (dir_ent->d_name); if (S_ISDIR (my_stat.st_mode)) { tvItemInfo.dwFlags = TVIF_FOLD; } itemtree = SendMessage (hChildWnd1, TVM_ADDITEM, 0, (LPARAM) & tvItemInfo); if (S_ISDIR (my_stat.st_mode)) { tvItemInfo.text = "."; SendMessage (hChildWnd1, TVM_ADDITEM, (WPARAM) itemtree,(LPARAM) & tvItemInfo); } } closedir (dir); /* end tree view */ // listview LoadBitmapFromFile (HDC_SCREEN, &foldercc, "./res/folder.bmp"); SetNotificationCallback (hChildWndList, lv_notify_process); SendMessage (hChildWndList, LVM_SETHEADHEIGHT, 22, 0); SendMessage (hChildWndList, LVM_SETITEMHEIGHT, 0,35); s1.nCols = 1; s1.pszHeadText = "File name"; s1.width = 100; s1.pfnCompare = NULL; s1.colFlags = 0; SendMessage (hChildWndList, LVM_ADDCOLUMN, 0, (LPARAM) & s1); s1.nCols = 2; s1.pszHeadText = "File size"; s1.width = 100; s1.pfnCompare = (PFNLVCOMPARE)compare_size; s1.colFlags = LVCF_RIGHTALIGN | LVHF_CENTERALIGN; SendMessage (hChildWndList, LVM_ADDCOLUMN, 0, (LPARAM) & s1); s1.nCols = 3; s1.pszHeadText = "Category"; s1.width = 80; s1.pfnCompare = NULL; s1.colFlags = 0; SendMessage (hChildWndList, LVM_ADDCOLUMN, 0, (LPARAM) & s1); s1.nCols = 4; s1.pszHeadText = "Last modified time"; s1.width = 180; s1.pfnCompare = (PFNLVCOMPARE)compare_time; s1.colFlags = LVCF_CENTERALIGN; SendMessage (hChildWndList, LVM_ADDCOLUMN, 0, (LPARAM) & s1); ModifyListView ("/"); } break; case MSG_COMMAND: switch (wParam) { case IDM_NEW: case IDM_OPEN: case IDM_SAVE: case IDM_SAVEAS: break; case IDM_CLOSE: case IDM_EXIT: SendMessage (hWnd, MSG_CLOSE, 0, 0L); break; case IDM_ABOUT_THIS: MessageBox (hWnd, "MiniGUI Controls\n" "Copyright (C) 2003 Feynman Software.\n", "About MiniGUI Controls", MB_OK | MB_ICONINFORMATION | MB_BASEDONPARENT); break; case IDM_ABOUT:#ifdef _MISC_ABOUTDLG#ifdef _LITE_VERSION OpenAboutDialog (hWnd);#else OpenAboutDialog ();#endif#endif break; } break; case MSG_CLOSE: DestroyMainWindow (hWnd); PostQuitMessage (hWnd); return 0; } return DefaultMainWinProc (hWnd, message, wParam, lParam);}static voidInitCreateInfo (PMAINWINCREATE pCreateInfo){ pCreateInfo->dwStyle = WS_BORDER | WS_CAPTION | WS_VISIBLE; pCreateInfo->dwExStyle = 0; pCreateInfo->spCaption = "MiniGUI Resource Manager"; pCreateInfo->hMenu = createmenu (); pCreateInfo->hCursor = GetSystemCursor (IDC_ARROW); pCreateInfo->hIcon = 0; pCreateInfo->MainWindowProc = CtrlTestWinProc; pCreateInfo->lx = 10; pCreateInfo->ty = 10; pCreateInfo->rx = pCreateInfo->lx + 620; pCreateInfo->by = pCreateInfo->ty + 460; pCreateInfo->iBkColor = PIXEL_lightwhite; pCreateInfo->dwAddData = 0; pCreateInfo->hHosting = HWND_DESKTOP;}intMiniGUIMain (int args, const char *arg[]){ MSG Msg; MAINWINCREATE CreateInfo; HWND hMainWnd;#if defined(_LITE_VERSION) && !(_STAND_ALONE) int i; const char *layer = NULL; RECT max_rect = { 0, 0, 0, 0 }; for (i = 1; i < args; i++) { if (strcmp (arg[i], "-layer") == 0) { layer = arg[i + 1]; break; } } GetLayerInfo (layer, &max_rect, NULL, NULL, NULL); if (JoinLayer (layer, arg[0], max_rect.left, max_rect.top, max_rect.left + 1024, max_rect.top + 768) == INV_LAYER_HANDLE) { printf ("JoinLayer: invalid layer handle.\n"); return 1; }#else#ifdef _IME_GB2312 GBIMEWindow (HWND_DESKTOP);#endif#endif if (!InitMiniGUIExt ()) { return 2; } InitCreateInfo (&CreateInfo); hMainWnd = CreateMainWindow (&CreateInfo); if (hMainWnd == HWND_INVALID) return 3; while (GetMessage (&Msg, hMainWnd)) { TranslateMessage (&Msg); DispatchMessage (&Msg); } MainWindowThreadCleanup (hMainWnd); MiniGUIExtCleanUp (); return 0;}#ifndef _LITE_VERSION#include <minigui/dti.c>#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?