📄 lgui.c
字号:
} 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 + -