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 + -
显示快捷键?