www.pudn.com > sharewareluncher.zip > Sharewareluncher.c
#include#include #include #include "resource.h" #include "sharewareluncher.h" #include "time1.h" #include "tab.h" #define MYWM_EXEACT (WM_USER+112) #define RUN_MIN 0 #define RUN_UNINSTALL 1 #define RUN_CLOSE 2 #define RUN_EXE 3 typedef struct tagcool { int idx; }COOLITEM,*LPCOOLITEM; HDDEDATA CALLBACK DdeCallBack(UINT uType,UINT uFmt,HCONV hConv,HSZ hsz1,HSZ hsz2,HDDEDATA hData,DWORD dwData1,DWORD dwData2); void ExeAction(LPSTR); int Runit(BOOL); void MakeShortcut(void); void Uninstall(BOOL bSysOnly); void MakeUninstallLnk(BOOL); void Getcmd(void); BOOL CALLBACK APIENTRY QuitProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam); BOOL VRHD(void); void RegCancelSubst(void); BOOL CancelSubst(void); extern int CutCmdLine(LPSTR s); HINSTANCE hInst; HBITMAP hbmMain,hbmSysButton,hbmAct,hbmClock,hbmBkg; RECT Size; BUTTONPOS bsSys[]={{0,206,8,16,14,0,0,TRUE},{1,240,8,16,14,16,0,TRUE}}; BUTTONPOS bsSysOrg[]={{0,206,8,16,14,206,8,TRUE},{1,240,8,16,14,240,8,TRUE}}; BUTTONPOS bsAct[]={{0,24,209,45,21,0,0,TRUE},{1,88,209,45,21,0,21,TRUE},{2,154,209,45,21,0,42,TRUE}}; BUTTONPOS bsActPushed[]={{0,24,209,45,21,45,0,TRUE},{1,88,209,45,21,45,21,TRUE},{2,154,209,45,21,45,42,TRUE}}; BUTTONPOS bsActOrg[]={{0,24,209,45,21,24,209,TRUE},{1,88,209,45,21,88,209,TRUE},{2,154,209,45,21,154,209,TRUE}}; char szErrr[300]; extern char szErr[256]; BOOL bInTarget=FALSE,bHold=FALSE,bHoldInAct=FALSE,InReady=TRUE,bInAct=FALSE; int i,iSysNo=-1,nActNo=-1,iActNo=-1; HMENU hmenu; HMENU hmenuTrackPopup; BOOL bSetAuto=FALSE,bRunMin=FALSE; DWORD dwThreadId=0,dwKlockId=1; extern APPINFO aiAppInfo[50]; HWND hMainWnd; BOOL bMined=FALSE,bQuit=FALSE,bDlgRuned=FALSE; TIMERINFO ti[10]; extern int nAlarmEveryHour,nDlgflag; extern int nAppNum; extern BOOL bSheet; extern HWND hSheetWnd; extern HBITMAP hbmHHour[3],hbmLHour[10],hbmHMin[6],hbmLMin[10]; extern HBITMAP hbmHSec[6],hbmLSec[10],hbmClockBkg; HANDLE hTimeSecWnd; BOOL bHelp=FALSE,bVerChanged=FALSE; /////////flag of vrhd//////// BOOL IsVRHD=FALSE; //=true,drive a: is virtual floppy disk /////DDE diclare/////////// DWORD idInst=0; char szDdeTitle[]="sharewareluncher"; HSZ hszAppName; HCONV hConv; char szCommand[300]; int nRunflag; ////////////////////////// extern HWND hBaseWnd; extern HWND hListAppWnd,hAddWnd; char szRunCommand[300]; BOOL bAddExe=FALSE,bCreateLink=FALSE; char cmd[MAX_PATH]; ///////cool menu////////// DRAWITEMSTRUCT dis; COOLITEM ci[50]; int nOldSel=-1,nSel=-1; HICON hicon[50]; HWND hQuitWnd=NULL; //标记“退出”对话框已显示,不能显示多个相同对话框 BOOL InitApplication(HINSTANCE hInstance) { WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (long (FAR PASCAL*)())MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPICON)); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL;//"NINJA"; // Name of menu resource in .RC file. wc.lpszClassName = "MyApp"; // Name used in call to CreateWindow. return (RegisterClass(&wc)); } BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hWnd = CreateWindowEx( 0,//WS_EX_TOOLWINDOW, "MyApp", "共享软件程序发射器", WS_POPUP,//|WS_SIZEBOX, (Size.right-265)/2, (Size.bottom-240)/2, 265,// Default width. 240,// Default height. NULL, NULL,// Use the window class menu. hInstance, NULL ); if (!hWnd) return (FALSE); //ShowOwnedPopups(hWnd,TRUE); if(bRunMin) ShowWindow(hWnd,SW_MINIMIZE); else ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return (TRUE); } #pragma argsused int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hNull,LPSTR lpCmdLine, int nCmdShow) { MSG msg; hInst=hInstance; if(strcmp(lpCmdLine,"\0")==0) nRunflag=RUN_CLOSE; else if(strcmp(lpCmdLine,"/u")==0) nRunflag=RUN_UNINSTALL; else { if(strcmp(lpCmdLine,"/s")==0) { bRunMin=TRUE; nRunflag=RUN_MIN; } else { bRunMin=FALSE; nRunflag=RUN_EXE; } } GetWindowRect(GetDesktopWindow(),&Size); if (!InitApplication(hInstance)) return (FALSE); if(DdeInitialize(&idInst,(PFNCALLBACK)DdeCallBack, APPCMD_FILTERINITS|CBF_SKIP_CONNECT_CONFIRMS|CBF_FAIL_SELFCONNECTIONS|CBF_FAIL_POKES,0)) return (FALSE); hszAppName=DdeCreateStringHandle(idInst,szDdeTitle,0); DdeNameService(idInst,hszAppName,0,DNS_REGISTER); hConv=DdeConnect(idInst,hszAppName,hszAppName,NULL); if(hConv!=NULL) { switch(nRunflag) { case RUN_CLOSE: wsprintf(szCommand,"Restore"); break; case RUN_UNINSTALL: if(MessageBox(GetFocus(),"即将删除本软件在注册表中登记的内容,你以前的设置均会无用,继续吗?", "清除发射器设置",MB_YESNO | MB_ICONWARNING)==IDNO) { nRunflag=RUN_CLOSE; wsprintf(szCommand,"Restore"); } else wsprintf(szCommand,"Uninstall"); break; case RUN_EXE: wsprintf(szCommand,lpCmdLine); break; default: wsprintf(szCommand,"\0"); } if(nRunflag==RUN_UNINSTALL) { if(DdeClientTransaction((LPBYTE)szCommand,strlen(szCommand)+1,hConv,0,0,XTYP_EXECUTE,TIMEOUT_ASYNC,NULL)) //if(DdeGetLastError(idInst)==DMLERR_SERVER_DIED) { DdeNameService(idInst,hszAppName,0,DNS_UNREGISTER); DdeUninitialize(idInst); Uninstall(FALSE); return 0L; } } if(!DdeClientTransaction((LPBYTE)szCommand,strlen(szCommand)+1,hConv,0,0,XTYP_EXECUTE,6000,NULL)) { switch(DdeGetLastError(idInst)) { case DMLERR_BUSY: DdeClientTransaction((LPBYTE)szCommand,strlen(szCommand)+1,hConv,0,0,XTYP_EXECUTE,6000,NULL); break; } } DdeNameService(idInst,hszAppName,0,DNS_UNREGISTER); DdeUninitialize(idInst); return 0L;//(FALSE); } else { if(nRunflag==RUN_UNINSTALL) { if(MessageBox(GetFocus(),"即将删除本软件在注册表中登记的内容,你以前的设置均会无用,继续吗?", "清除发射器设置",MB_YESNO | MB_ICONWARNING)==IDYES) { Uninstall(FALSE); return 0L; } } if(nRunflag==RUN_CLOSE) bRunMin=FALSE; else bRunMin=TRUE; wsprintf(szRunCommand,lpCmdLine); } hbmMain=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_MAIN)); hbmSysButton=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_SYSBUTTON)); hbmAct=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_ACT)); hbmClock=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_NUM)); hbmBkg=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BKG)); if (!InitInstance(hInstance, nCmdShow)) { // DdeUninitialize(idInst); return (FALSE); } if( NOERROR != OleInitialize(NULL)) return FALSE; while (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } OleUninitialize() ; return (msg.wParam); } #pragma argsused LRESULT APIENTRY MainWndProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam) { HDC hDC,hMemDC; PAINTSTRUCT ps; hMainWnd=hWnd; switch(uMsg) { case WM_CREATE: // SetCursor(LoadCursor(hInst,IDC_ARROW)); { int i; for(i=0;i<10;i++) { ti[i].wHour=0; ti[i].wMinute=0; ti[i].nflag=0; wsprintf(ti[i].szInfo,"\0"); } } hDC=GetDC(hWnd); hMemDC=CreateCompatibleDC(hDC); SelectObject(hMemDC,hbmMain); BitBlt(hDC,0,0,265,240,hMemDC,0,0,SRCCOPY); DeleteDC(hMemDC); ReleaseDC(hWnd,hDC); PutToTaskBar(hWnd,0,LoadIcon(hInst,MAKEINTRESOURCE(IDI_APPICON)),"共享软件程序发射器"); InitTimeBmp(hWnd); hmenu = LoadMenu(hInst, MAKEINTRESOURCE(IDM_POPUP)); if (hmenu) hmenuTrackPopup = GetSubMenu(hmenu, 0); CheckReg(); Getcmd(); if(bSetAuto) { REGVALINFO ri; char sztemp[MAX_PATH]; ri.szValName=NULL; ri.dwType=REG_SZ; ri.lpData=(LPBYTE)"通过发射器创建快捷方式"; ri.cbData=30; RegSetGroupVal(HKEY_CLASSES_ROOT,"exefile\\shell\\ShortcutfromLuncher",1,&ri); RegSetGroupVal(HKEY_CLASSES_ROOT,"scrfile\\shell\\ShortcutfromLuncher",1,&ri); ri.szValName=NULL;//"DisplayName"; ri.dwType=REG_SZ; ri.lpData=(LPBYTE)"通过发射器启动"; ri.cbData=20; RegSetGroupVal(HKEY_CLASSES_ROOT,"exefile\\shell\\AddtoLuncher",1,&ri); RegSetGroupVal(HKEY_CLASSES_ROOT,"scrfile\\shell\\AddtoLuncher",1,&ri); ri.szValName=NULL; ri.dwType=REG_SZ; ri.lpData=(LPBYTE)"虚拟软驱"; ri.cbData=10; RegSetGroupVal(HKEY_CLASSES_ROOT,"Directory\\shell\\sharewareluncher.vrhd",1,&ri); wsprintf(sztemp,cmd); strcat(sztemp," -create %1"); ri.szValName=NULL; ri.dwType=REG_SZ; ri.lpData=(LPBYTE)sztemp; ri.cbData=MAX_PATH; RegSetGroupVal(HKEY_CLASSES_ROOT,"exefile\\shell\\ShortcutfromLuncher\\command",1,&ri); RegSetGroupVal(HKEY_CLASSES_ROOT,"scrfile\\shell\\ShortcutfromLuncher\\command",1,&ri); wsprintf(sztemp,cmd); strcat(sztemp," -add %1"); ri.szValName=NULL;//"DisplayName"; ri.dwType=REG_SZ; ri.lpData=(LPBYTE)sztemp; ri.cbData=MAX_PATH; RegSetGroupVal(HKEY_CLASSES_ROOT,"exefile\\shell\\AddtoLuncher\\command",1,&ri); RegSetGroupVal(HKEY_CLASSES_ROOT,"scrfile\\shell\\AddtoLuncher\\command",1,&ri); wsprintf(sztemp,cmd); strcat(sztemp," -vrhd %1"); ri.szValName=NULL; ri.dwType=REG_SZ; ri.lpData=(LPBYTE)sztemp; ri.cbData=MAX_PATH; RegSetGroupVal(HKEY_CLASSES_ROOT,"Directory\\shell\\sharewareluncher.vrhd\\command",1,&ri); SetAutoRun("Sharewareluncher","/s",TRUE); MakeUninstallLnk(TRUE); ChangeShortcut(); } if(bVerChanged) { bVerChanged=FALSE; SetAutoRun("Sharewareluncher","/s",TRUE); Uninstall(TRUE); } hTimeSecWnd=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)TimeThread,0,0,&dwThreadId); CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)KlockThread,0,0,&dwKlockId); RemapMenu(); GetAllIcon(); if(nRunflag==RUN_EXE) ExeAction(szRunCommand); break; case WM_MEASUREITEM: MeasureItem(lParam); break; case WM_DRAWITEM: DrawItem((LPDRAWITEMSTRUCT)lParam); break; case WM_MENUSELECT: if(LOWORD(wParam)!=0) { nOldSel=nSel; nSel=LOWORD(wParam); SendMessage(hWnd,WM_DRAWITEM,nSel,(LPARAM)&dis); nSel=-1; } return 0; case WM_PAINT: hDC=BeginPaint(hWnd,&ps); hMemDC=CreateCompatibleDC(hDC); SelectObject(hMemDC,hbmMain); BitBlt(hDC,0,0,265,240,hMemDC,0,0,SRCCOPY); DeleteDC(hMemDC); EndPaint(hWnd,&ps); ShowTime(hWnd); break; case MYWM_TIMEUP: TimeUp(hWnd,(int)wParam); break; case MYWM_EXEACT: ExeAction((LPSTR)lParam); break; case MYWM_ICON: switch(lParam) { case WM_LBUTTONDOWN: ShowWindow(hWnd,SW_RESTORE); SetForegroundWindow(hWnd); break; case WM_RBUTTONUP: { POINT pt; SetForegroundWindow(hWnd); SetActiveWindow(hWnd); GetCursorPos(&pt); TrackPopupMenuEx(hmenuTrackPopup, TPM_LEFTALIGN | TPM_TOPALIGN | // default values TPM_HORIZONTAL | TPM_LEFTBUTTON | // equivalent to 0 TPM_RIGHTBUTTON, // Right selection pt.x, pt.y, hWnd, NULL); //DestroyMenu(hmenu); } break; } break; case WM_SIZE: if(wParam==SIZE_MINIMIZED) { bMined=TRUE; ShowWindow(hWnd,SW_SHOWMINIMIZED);//SW_HIDE); SetWindowPos(hWnd, HWND_TOP, 0, 0, 265, 240, SWP_NOMOVE | SWP_NOSIZE | SWP_HIDEWINDOW) ; SuspendThread(hTimeSecWnd); } else { bMined=FALSE; ResumeThread(hTimeSecWnd); } break; case WM_LBUTTONDOWN: if(HIWORD(lParam)<25) { if(LOWORD(lParam)<25) { RECT rc; GetWindowRect(hWnd,&rc); TrackPopupMenuEx(hmenuTrackPopup, TPM_LEFTALIGN | TPM_TOPALIGN | // default values TPM_HORIZONTAL | TPM_LEFTBUTTON | // equivalent to 0 TPM_RIGHTBUTTON, // Right selection rc.left, rc.top+25, hWnd, NULL); break; } i=JudgePoint(lParam,2,bsSys); switch(i) { case -1: EasyMove(hWnd); break; case 0: ShowPush(hWnd,hbmSysButton,0,bsSys[i]); bHold=TRUE; bInTarget=TRUE; iSysNo=0; break; case 1: ShowPush(hWnd,hbmSysButton,0,bsSys[i]); bHold=TRUE; bInTarget=TRUE; iSysNo=1; break; } } if(HIWORD(lParam)>208) { if(InReady) break; i=JudgePoint(lParam,3,bsAct); switch(i) { case -1: break; case 0: ShowPush(hWnd,hbmAct,0,bsActPushed[0]); bHoldInAct=TRUE; bInAct=TRUE; iActNo=0; break; case 1: ShowPush(hWnd,hbmAct,0,bsActPushed[1]); bHoldInAct=TRUE; bInAct=TRUE; iActNo=1; break; case 2: ShowPush(hWnd,hbmAct,0,bsActPushed[2]); bHoldInAct=TRUE; bInAct=TRUE; iActNo=2; break; } } break; case WM_MOUSEMOVE: if(!bHold && !bHoldInAct) { i=JudgePoint(lParam,3,bsAct); if(i!=nActNo && InReady && i!=-1) { ShowPush(hWnd,hbmAct,0,bsAct[i]); InReady=FALSE; nActNo=i; } else if(i!=nActNo) { ShowPush(hWnd,hbmMain,0,bsActOrg[nActNo]); if(i!=-1) { ShowPush(hWnd,hbmAct,0,bsAct[i]); InReady=FALSE; } else InReady=TRUE; nActNo=i; } break; } if(bHoldInAct) { i=JudgePoint(lParam,3,bsAct); if(i!=iActNo && bInAct) { ShowPush(hWnd,hbmMain,0,bsActOrg[iActNo]); bInAct=FALSE; } else if(i==iActNo) { ShowPush(hWnd,hbmAct,0,bsActPushed[i]); bInAct=TRUE; } } if(bHold) { i=JudgePoint(lParam,2,bsSys); if(i!=iSysNo && bInTarget) { ShowPush(hWnd,hbmMain,0,bsSysOrg[iSysNo]); bInTarget=FALSE; } else if(i==iSysNo) { ShowPush(hWnd,hbmSysButton,0,bsSys[i]); bInTarget=TRUE; } } break; case WM_LBUTTONUP: if(HIWORD(lParam)>208) { i=JudgePoint(lParam,3,bsAct); if(i!=-1 && bInAct) { switch(i) { case 0: ShowPush(hWnd,hbmAct,0,bsAct[0]); ShowWindow(hWnd,SW_MINIMIZE); break; case 1: ShowPush(hWnd,hbmAct,0,bsAct[1]); CreatePropertySheet(hWnd); break; case 2: ShowPush(hWnd,hbmAct,0,bsAct[2]); nDlgflag=-99; bHelp=TRUE; DialogBox(hInst,MAKEINTRESOURCE(IDD_SHOWHELP),hWnd,(DLGPROC)DlgHelpProc); break; } } } else if(HIWORD(lParam)<25) { i=JudgePoint(lParam,2,bsSys); if(i!=-1 && bInTarget) { switch(i) { case 0: ShowPush(hWnd,hbmMain,0,bsSysOrg[i]); ShowWindow(hWnd,SW_MINIMIZE); break; case 1: ShowPush(hWnd,hbmMain,0,bsSysOrg[i]); ShowWindow(hWnd,SW_MINIMIZE); break; } } } bHoldInAct=bInAct=bHold=bInTarget=FALSE;; iActNo=iSysNo=-1; break; case WM_RBUTTONDOWN: if(HIWORD(lParam)>24 && JudgePoint(lParam,3,bsAct)==-1) { POINT pt; GetCursorPos(&pt); TrackPopupMenuEx(hmenuTrackPopup, TPM_LEFTALIGN | TPM_TOPALIGN | // default values TPM_HORIZONTAL | TPM_LEFTBUTTON | // equivalent to 0 TPM_RIGHTBUTTON, // Right selection pt.x, pt.y, hWnd, NULL); } break ; case WM_COMMAND: switch(wParam) { case CM_SETCLOCK: RunControlPanel("timedate.cpl"); break; case CM_ADD: if(!bDlgRuned && !bSheet) DialogBox(hInst,MAKEINTRESOURCE(IDD_LIST),hWnd,(DLGPROC)ListWndProc); else if(bSheet) { PropSheet_SetCurSel(hSheetWnd,NULL,1); } break; case CM_QUIT: if(hQuitWnd==NULL) if(DialogBox(hInst,MAKEINTRESOURCE(IDD_QUIT),hWnd,(DLGPROC)QuitProc)) SendMessage(hWnd,WM_DESTROY,0,0); break; default: if((int)wParam<11000 && (int)wParam>11050) break; if(!Lunch(hWnd,(int)wParam-11000)) { wsprintf(szErrr,"不能启动\"%s\"程序,请检查程序设置",aiAppInfo[(int)wParam-11000].szAppName); Errmsg(szErrr); } break; } break; case WM_TIMER: DoTimer(hWnd,(UINT)wParam); break; case WM_DESTROY: case WM_QUERYENDSESSION: if(hBaseWnd!=NULL) SendMessage(hBaseWnd,WM_CLOSE,0,0); DdeNameService(idInst,hszAppName,0,DNS_UNREGISTER); DdeUninitialize(idInst); DelTempTimer(); bQuit=TRUE; DelFromTaskBar(hWnd,0,"共享软件程序发射器"); DeleteObject(hbmAct); DeleteObject(hbmClock); DeleteObject(hbmMain); DeleteObject(hbmSysButton); DeleteObject(hbmBkg); { int n; for(n=0;n<3;n++) DeleteObject(hbmHHour[i]); for(n=0;n<10;n++) { DeleteObject(hbmLHour[i]); DeleteObject(hbmLMin[i]); DeleteObject(hbmLSec[i]); } for(n=0;n<6;n++) { DeleteObject(hbmHMin[i]); DeleteObject(hbmHSec[i]); } DeleteObject(hbmClockBkg); for(n=0;n =0) { GetMenuItemInfo(hmenuTrackPopup,nItem,TRUE,&mi); if (mi.wID != 0) { if (!(mi.fState&MF_OWNERDRAW) && !(mi.fState&MF_BITMAP)) { ci[nItem].idx=mi.wID-11000; ModifyMenu(hmenuTrackPopup,nItem,MF_BYPOSITION|MF_OWNERDRAW|mi.fState, mi.wID, (LPCTSTR)&ci[nItem]); } } } } void MeasureItem(LONG lParam) { LPMEASUREITEMSTRUCT lpm; //LPCOOLITEM lpci; lpm=(LPMEASUREITEMSTRUCT)lParam; if(lpm->CtlType == ODT_MENU) { lpm->itemWidth=200; lpm->itemHeight=20; //lpci=(LPCOOLITEM)lpm->itemData; } } void DrawItem(LPDRAWITEMSTRUCT lp) { LPCOOLITEM pItem; if (lp->CtlType == ODT_MENU) { UINT id = lp->itemID; dis=*lp; pItem = (LPCOOLITEM) lp->itemData; if (pItem) { HDC hDC = lp->hDC; RECT rc=lp->rcItem,rrc; // HFONT hfnt, hOldFont; if(id==(UINT)nSel)//wParam) { rrc=rc; rrc.right=rrc.left+20; if(id>=11000 && id<11050) DrawIconEx(hDC,2,rrc.top+2,hicon[pItem->idx],16,16,0,NULL,DI_NORMAL); DrawEdge(hDC,&rrc,BDR_RAISEDINNER,BF_RECT); SetTextColor(hDC,(COLORREF)(GetSysColor(COLOR_HIGHLIGHTTEXT))); SetBkColor(hDC,(COLORREF)(GetSysColor(COLOR_HIGHLIGHT))); rc.left+=22; FillRect(hDC,&rc,(HBRUSH)(COLOR_HIGHLIGHT+1)); // hfnt = GetStockObject(DEFAULT_GUI_FONT); // hOldFont = SelectObject(hDC, hfnt); // if(hOldFont) // { // TextOut(hDC,rc.left,rc.top,aiAppInfo[pItem->idx].szAppName,strlen(aiAppInfo[pItem->idx].szAppName)); DrawText(hDC,aiAppInfo[pItem->idx].szAppName,-1,&rc,DT_LEFT|DT_VCENTER|DT_SINGLELINE); // SelectObject(hDC, hOldFont); // } } else if(id<11050) { rrc=rc; rrc.right=rrc.left+20; FillRect(hDC,&rrc,(HBRUSH)(COLOR_MENU+1)); if(id>=11000 && id<11050) DrawIconEx(hDC,2,rrc.top+2,hicon[pItem->idx],16,16,0,NULL,DI_NORMAL); rc.left+=22; FillRect(hDC,&rc,(HBRUSH)(COLOR_MENU+1)); SetBkColor(hDC,(COLORREF)(GetSysColor(COLOR_MENU))); DrawText(hDC,aiAppInfo[pItem->idx].szAppName,-1,&rc,DT_LEFT|DT_VCENTER); } } } } void GetAllIcon(void) { int i; WORD w=0; for(i=0;i