⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lgui.c

📁 lgui_0.3.0.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
	}	return true;}BOOL srvRawMouseUp(	WPARAM wParam,	LPARAM lParam){	POINT point;	int x,y;	PlGUIAppStat pStat;	x=(int)wParam;	y=(int)lParam;	if(_lGUI_wndCaptureMouse.pWin){		if(_lGUI_wndCaptureMouse.iByWho == BYCLIENT){			PostMessage((HWND)_lGUI_wndCaptureMouse.pWin,LMSG_PENUP,wParam,lParam);		}		else{			PostMessage((HWND)_lGUI_wndCaptureMouse.pWin,LMSG_NCPENUP,wParam,lParam);		}	}	else{		pStat=_lGUI_pAppStat;		if(pStat){			if(PtInRect(&(pStat->rc),x,y)){				point.x = x;				point.y = y;				SendMsgByServer(pStat,LMSG_PENUP,(void*)&point,sizeof(POINT));				return true;			}		}	}	return true;}BOOL GetDeskIconInfo(){	struct dirent **pFileList;	char pString[MAX_VALUE_SIZE];	char *pEnvStr;	int iFileNumber = 0;	FILE* fp;	int i;	char lpszTag[MAX_TAG_SIZE];	char lpszItem[MAX_TAG_SIZE];	char lpszValue[MAX_VALUE_SIZE];		PDeskIconClass pDeskIconClass;	PDeskIconNode pDeskIconNode;	pEnvStr=getenv("LGUI_HOME");	if(!pEnvStr){		printerror("Env variable LGUI_HOME is Null!");		return false;	}	strcpy(pString,pEnvStr);	strcat(pString,"/apps/appinfo.txt");	fp = fopen(pString,"r");	if(!fp)		return false;	pDeskIconInfo = (PDeskIconInfo)malloc(sizeof(DeskIconInfo));	if(!pDeskIconInfo){		fclose(fp);		return false;	}	memset(pDeskIconInfo,0,sizeof(DeskIconInfo));	while(GetHeadTag(fp,lpszTag)){		pDeskIconClass = (PDeskIconClass)malloc(sizeof(DeskIconClass));		if(!pDeskIconClass)			return false;		memset(pDeskIconClass,0,sizeof(DeskIconClass));		if(!pDeskIconInfo->pHead){			pDeskIconInfo->pHead = pDeskIconInfo->pTail = pDeskIconClass;		}		else{			pDeskIconInfo->pTail->pNext = pDeskIconClass;			pDeskIconInfo->pTail = pDeskIconClass;		}		//ID		GetValue(fp,lpszItem,lpszValue);		pDeskIconInfo->pTail->id = atoi(lpszValue);		//type		GetValue(fp,lpszItem,lpszValue);		//name		GetValue(fp,lpszItem,lpszValue);		strcpy(pDeskIconInfo->pTail->lpszClassName,lpszValue);		//icon		GetValue(fp,lpszItem,lpszValue);		strcpy(pDeskIconInfo->pTail->lpszIconName,pEnvStr);		strcat(pDeskIconInfo->pTail->lpszIconName,"/pics/sys/");		strcat(pDeskIconInfo->pTail->lpszIconName,lpszValue);		//path		GetValue(fp,lpszItem,lpszValue);		strcpy(pDeskIconInfo->pTail->lpszPath,pEnvStr);		strcat(pDeskIconInfo->pTail->lpszPath,"/apps/");		strcat(pDeskIconInfo->pTail->lpszPath,lpszValue);		//iTotal+1		pDeskIconInfo->iTotal++;		GetTailTag(fp,lpszTag);	}	fclose(fp);	pDeskIconClass = pDeskIconInfo->pHead;	while(pDeskIconClass){		strcpy(pString,pDeskIconClass->lpszPath);		iFileNumber = GetFileList(pString, &pFileList);		if(strcmp(pDeskIconClass->lpszClassName,"文档")==0){			for(i=0;i<iFileNumber;i++){				pDeskIconNode = (PDeskIconNode)malloc(sizeof(DeskIconNode));				if(!pDeskIconNode)					return false;				memset(pDeskIconNode,0,sizeof(DeskIconNode));				pDeskIconNode->iTextFile = 1;				strcpy(pDeskIconNode->lpszName,pFileList[i]->d_name);				//strcpy(pString,pEnvStr);				//strcat(pString,"/pics/normal_doc.bmp");				//strcpy(pDeskIconNode->lpszIconName,pString);				strcpy(pDeskIconNode->lpszIconName, "sys/normal_doc.bmp");				if(!pDeskIconClass->pHead){					pDeskIconClass->pHead = pDeskIconClass->pTail = pDeskIconNode;				}				else{					pDeskIconClass->pTail->pNext = pDeskIconNode;					pDeskIconClass->pTail = pDeskIconNode;				}				pDeskIconClass->iTotalIcon++;			}//for		}		else{			for(i=0;i<iFileNumber;i++){				if(IsDeskIconInfoFile(pFileList[i]->d_name)){					pDeskIconNode = (PDeskIconNode)malloc(sizeof(DeskIconNode));					if(!pDeskIconNode)						return false;					memset(pDeskIconNode,0,sizeof(DeskIconNode));					strcpy(pString ,pDeskIconClass->lpszPath);					strcat(pString,"/");					strcat(pString,pFileList[i]->d_name);										fp = fopen(pString,"r");					if(!fp)						return false;					GetHeadTag(fp,lpszTag);					//comment					GetValue(fp,lpszItem,lpszValue);					strcpy(pDeskIconNode->lpszComment,lpszValue);					//bin(exec)					GetValue(fp,lpszItem,lpszValue);					strcpy(pDeskIconNode->lpszBinName,lpszValue);					//icon					GetValue(fp,lpszItem,lpszValue);					strcpy(pDeskIconNode->lpszIconName,lpszValue);					//name					GetValue(fp,lpszItem,lpszValue);					strcpy(pDeskIconNode->lpszName,lpszValue);					GetTailTag(fp,lpszTag);					fclose(fp);					if(!pDeskIconClass->pHead){						pDeskIconClass->pHead = pDeskIconClass->pTail = pDeskIconNode;					}					else{						pDeskIconClass->pTail->pNext = pDeskIconNode;						pDeskIconClass->pTail = pDeskIconNode;					}					pDeskIconClass->iTotalIcon ++ ;				}//if			}//for		}//else 		//free file list		FreeFileList(pFileList,iFileNumber);		GetDeskScrollInfo(&(pDeskIconClass->iScrollMax),			&(pDeskIconClass->iScrollPage),pDeskIconClass->iTotalIcon);		pDeskIconClass = pDeskIconClass->pNext;	}//while 	return true;}void GetDeskScrollInfo(	int* iMax, 	int* iPage, 	int iTotalIcon){	*iPage = DESKICON_LINES_PER_PAGE;	if(!iTotalIcon){		*iMax = 0;		return;	}	if(iTotalIcon <= DESKICON_NUMBER_PER_LINE){		*iMax = 1;		return;	}	*iMax = iTotalIcon/DESKICON_NUMBER_PER_LINE;	if(iTotalIcon%DESKICON_NUMBER_PER_LINE!=0)		*iMax++;}BOOL IsDeskIconInfoFile(	char* pString){	int iLen;	iLen = strlen(pString);	if(iLen<=8)		return false;	if(strcmp(pString+iLen-8,".desktop")==0)		return true;	else		return false;}void DestroyDeskIconInfo(){	PDeskIconClass pDeskIconClass,pNextClass ;	PDeskIconNode pDeskIconNode,pNextNode;	pDeskIconClass = pDeskIconInfo->pHead;	while(pDeskIconClass){		pNextClass = pDeskIconClass->pNext;		pDeskIconNode = pDeskIconClass->pHead;		while(pDeskIconNode){			pNextNode = pDeskIconNode->pNext;			free(pDeskIconNode);			pDeskIconNode->pNext;		}		free(pDeskIconClass);		pDeskIconClass = pNextClass;	}	free(pDeskIconInfo);}BOOL AddNodeToDeskIconClass(	PDeskIconNode pNode,	PDeskIconClass pClass){	pNode->pNext = NULL;	if(!pClass->pHead){		pClass->pHead = pClass->pTail = pNode;	}	else{		pClass->pTail->pNext = pNode;		pClass->pTail = pNode;	}	pClass->iTotalIcon ++;	GetDeskScrollInfo(&(pClass->iScrollMax),		&(pClass->iScrollPage),pClass->iTotalIcon);	return true;}void DeleteNodeFromDeskIconClass(	char* lpszName,	PDeskIconClass pClass){	PDeskIconNode pNode,pPrev;	if(!pClass->pHead)		return;	if(pClass->pHead == pClass->pTail){		if(strcmp(pClass->pHead->lpszName, lpszName)==0){			free(pClass->pHead);			pClass->pHead = pClass->pTail = NULL;			pClass->iTotalIcon --;			GetDeskScrollInfo(&(pClass->iScrollMax),				&(pClass->iScrollPage),pClass->iTotalIcon);		}		return;	}	pNode = pPrev = pClass->pHead;	while(pNode){		if(strcmp(pNode->lpszName, lpszName)==0){			if(pNode == pClass->pHead){				pClass->pHead = pNode->pNext;				free(pNode);			}			else if(pNode == pClass->pTail){				pClass->pTail = pPrev;				free(pNode);			}			else{				pPrev->pNext = pNode->pNext;				free(pNode);			}			pClass->iScrollMax --;			pClass->iTotalIcon --;			GetDeskScrollInfo(&(pClass->iScrollMax),				&(pClass->iScrollPage),pClass->iTotalIcon);		}		pPrev = pNode;		pNode = pNode->pNext;	}}BOOL CreateDeskIcon(){	PDeskIconClass pClass;	PDeskIconNode pNode;	HWND hWnd;	char *pEnvStr;	char pIconPath[MAX_VALUE_SIZE];	char pBinPath[MAX_VALUE_SIZE];	BOOL bFirst;	pEnvStr=getenv("LGUI_HOME");	if(!pEnvStr){		printerror("Env variable LGUI_HOME is Null!");		return false;	}	pClass = pDeskIconInfo->pHead;	while(pClass){		bFirst = true;		pNode = pClass->pHead;		hWnd = NULL;		while(pNode){			strcpy(pIconPath,pEnvStr);			strcat(pIconPath,"/pics/");			strcat(pIconPath,pNode->lpszIconName);			strcpy(pBinPath,pEnvStr);			strcat(pBinPath,"/bin/");			strcat(pBinPath,pNode->lpszBinName);			hWnd = CreateWindow("deskicon",pNode->lpszName,WS_CONTROL | WS_TRANS,				0,0,DESKICON_WIDTH,DESKICON_HEIGHT,				(HWND)_lGUI_pWindowsTree,(HMENU)(GenDeskIconID()),				(HANDLE)pIconPath,				(LPVOID)pBinPath);							if(bFirst){				pClass->hWndTail = hWnd;				bFirst = false;			}			pNode = pNode->pNext;		}		pClass->hWndHead = hWnd;		pClass = pClass->pNext;	}	return  true;}	void ProDeskIconScroll(	HWND hWndScrollBar,	HWND hWndTab){	int iTabValue,i;	PDeskIconClass pClass;	LPSCROLLINFO lpsi;	GetScrollInfo(hWndScrollBar,lpsi);	iTabValue = SendMessage(hWndTab,TM_GETCURTAB,(WPARAM)NULL,(LPARAM)NULL);	pClass = pDeskIconInfo->pHead;	for(i=0;i<iTabValue;i++){		pClass = pClass ->pNext;	}	HideClassDeskIcon(pClass);	pClass->iScrollPos = lpsi->nPos;	ShowClassDeskIcon(pClass);}void HideClassDeskIcon(	PDeskIconClass pClass){	int iLeft, iTop;	PWindowsTree pWinHead,pWinTail,pWin;	pWinHead = (PWindowsTree)(pClass->hWndHead);	pWinTail = (PWindowsTree)(pClass->hWndTail);		if(!pWinHead)		return;	pWin = pWinHead;	while(1){		if(IsVisible((HWND)pWin)){			ShowWindow((HWND)pWin,false);			MoveWindow((HWND)pWin,(-1)*pWin->rect.left,(-1)*pWin->rect.top);		}		if(pWin == pWinTail)			break;		pWin = pWin->pNext;	}}void ShowClassDeskIcon(	PDeskIconClass pClass){	int iPos;		PWindowsTree pWin,pWinHead,pWinTail;	int i,x,y;		int iWidth,iHeight,iXInterval,iYInterval,xPos,yPos;	iPos = pClass->iScrollPos;	pWinHead = (PWindowsTree)(pClass->hWndHead);	pWinTail = (PWindowsTree)(pClass->hWndTail);	if(!pWinHead)		return;	pWin = pWinHead;	for(i=0;i<iPos*3;i++){		pWin = pWin->pNext;	}	iWidth = SCREEN_WIDTH - GetSystemMetrics(SM_CXVSCROLL);	iHeight = DESK_CLIENT_HEIGHT;	iXInterval = (iWidth - DESKICON_NUMBER_PER_LINE*DESKICON_WIDTH)/		(DESKICON_NUMBER_PER_LINE + 1);	if(iXInterval < 0)		return;	iYInterval = (iHeight - DESKICON_LINES_PER_PAGE*DESKICON_HEIGHT)/		(DESKICON_LINES_PER_PAGE + 1);	if(iYInterval < 0)		return;	pWin = pWinHead;	yPos = DESK_TAB_HEIGHT + iYInterval;	for(y=0;y<DESKICON_LINES_PER_PAGE;y++){		xPos = iXInterval;		for(x=0;x<DESKICON_NUMBER_PER_LINE;x++){			MoveWindow((HWND)pWin,xPos,yPos);			ShowWindow((HWND)pWin,true);			if(pWin == pWinTail)				return;			pWin = pWin->pNext;						xPos += (iXInterval + DESKICON_WIDTH);		}		yPos += (iYInterval + DESKICON_HEIGHT);	}}PDeskIconClass GetCurrentClass(	HWND hWndTab){	int i,iValue;	PDeskIconClass pClass;	iValue = SendMessage(hWndTab,TM_GETCURTAB,(WPARAM)NULL,(LPARAM)NULL);	pClass = pDeskIconInfo->pHead;	for(i=0;i<iValue;i++){		pClass = pClass->pNext;	}	return pClass;}void DeskIconClicked(	WORD id){	char* pEnvStr;	char pFileSpec[256];	PWindowsTree pWin;	pWin = (PWindowsTree)(GetDeskIconHandle(id));	strcpy(pFileSpec,(char*)(pWin->dwAddData));	LaunchApp(pFileSpec);}int GenDeskIconID(){	PWindowsTree pWin;	int iMax=0;	pWin = _lGUI_pWindowsTree->pControlHead;	while(pWin){		if((int)(pWin->hMenu ) > iMax)			iMax = (int)(pWin->hMenu);		pWin = pWin->pNext;	}	iMax ++;		return iMax;}HWND GetDeskIconHandle(	int id){	PWindowsTree pWin;	pWin = _lGUI_pWindowsTree->pControlHead;	while(pWin){		if((int)(pWin->hMenu)==id)			return (HWND)pWin;		pWin = pWin->pNext;	}	return NULL;}BOOL LaunchApp(	char* pFileName){	pid_t child;	char* args[]={NULL};	if((child=fork())==-1){		printerror("fork error");		exit(EXIT_FAILURE);	}	else if(child==0){		execve(pFileName,args,environ);	}	DisactiveWindow(_lGUI_pWindowsTree);	return true;}void ProcessStartMenuClicked(){	RECT rc;	SetRect(&rc,1, 0, DEF_MENU_WIDTH,SCREEN_HEIGHT - DESK_TASKBAR_HEIGHT);	CreateStartMenuControl(&rc);	AddStartMenuItems();	ShowStartMenuControl();}void ProcessStartMenuItemClicked(	WPARAM wParam, 	LPARAM lParam){	PDeskIconClass pClass;	int iMenuId;	int iCounter = 0;	iMenuId = LOWORD((DWORD)wParam);	pClass = pDeskIconInfo->pHead;	while(pClass){		if(pClass->id == iMenuId)			break;		iCounter ++;		pClass = pClass->pNext;	}	if(!pClass)		return;	SendMessage(hWndTab,TM_SETCURTAB,(WPARAM)iCounter,(LPARAM)NULL);		DestroyStartMenuControl();	}BOOL AddStartMenuItems(){	HBITMAP hBitmap;	MENUITEM item;	PDeskIconClass pClass;	pClass = pDeskIconInfo->pHead;	if(!pClass)		return false;	while(pClass){		item.id = pClass->id;		strcpy(item.lpszName,pClass->lpszClassName);		hBitmap = CreateBitmap(pClass->lpszIconName);		item.pBitmap = (PBITMAP)hBitmap;		SendMessage((HWND)_lGUI_pStartMenuWindow,SM_ADDITEM,(WPARAM)&item,(LPARAM)NULL);		DeleteObject(hBitmap);		pClass = pClass->pNext;	}	return  true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -