📄 listview.c
字号:
#include <user\dlg.h>
#include <stdio.h>
#include <commctrl.h>
#include <string.h>
#include "sharewareluncher.h"
#include "listview.h"
#include "resource.h"
#define MYWM_TIMEUP (WM_USER+111)
void TransDate(int);
void ListDel(int);
void SortList(void);
extern int Runit(BOOL);
extern void MakeShortcut(void);
extern HWND hAddWnd;
extern BOOL bNoLunch;
extern HINSTANCE hInst;
extern int nAppNum;
extern APPINFO aiAppInfo[50];
extern HMENU hMenu,hmenuTrackPopup;
extern char szRunCommand[300];
extern BOOL bAddExe,bCreateLink;
extern BOOL bDlgRuned,bSheet;
extern PROPSHEETPAGE * ps;
extern HWND hMainWnd;
HWND hListWnd,hBarWnd;
int nBarPos[]={212,270,-1};
char szerr[100];
BOOL bAnyChanged=FALSE;
int naiIndex=-1;
HWND hListAppWnd;
#pragma argsused
LONG APIENTRY ListWndProc(HWND hWnd,UINT message, WPARAM wParam,LPARAM lParam)
{
int i,j;
REGVALINFO RegInfo[5];
char szSubKey[256];
switch (message)
{
case WM_INITDIALOG:
hListAppWnd=hWnd;
bDlgRuned=TRUE;
{
HWND hItemWnd;
hItemWnd=GetDlgItem(hWnd,IDC_OK);
if(bSheet)
ShowWindow(hItemWnd,SW_HIDE);
else
ShowWindow(hItemWnd,SW_SHOW);
}
hListWnd=GetDlgItem(hWnd,IDC_LISTAPP);
for (i=0; i < nAppNum; i++)
{
SendMessage(hListWnd,LB_ADDSTRING,0,(LPARAM)(aiAppInfo[i].szAppName));
SendMessage(hListWnd, LB_SETITEMDATA, SendMessage(hListWnd, LB_FINDSTRING, -1, (LPARAM)(aiAppInfo[i].szAppName)), (LPARAM) i);
}
if (hListWnd == NULL)
MessageBox (NULL, "加载共享软件程序信息时出错!", "出错", MB_OK );
SetFocus(hListWnd);
hBarWnd=GetDlgItem(hWnd,IDC_INFOBAR);
SendMessage(hBarWnd,SB_SETPARTS,3,(LPARAM)nBarPos);
SendMessage(hBarWnd,SB_SETTEXT,(1 | 0),(LPARAM)"运行日期");
if(bSheet)
{
ps = (PROPSHEETPAGE *)lParam;
return (TRUE);
}
if(bAddExe || bCreateLink)
SendMessage(hWnd,WM_COMMAND,IDOK,0);
break;
case MYWM_TIMEUP: //临时借用
if(bAddExe || bCreateLink)
{
if(hAddWnd==NULL)
SendMessage(hWnd,WM_COMMAND,IDOK,0);
else
SendMessage(hAddWnd,WM_INITDIALOG,0,0);
}
break;
case MYWM_ICON: //临时借用
if(bAnyChanged)
{
bAnyChanged=FALSE;
SortList();
for(i=0;i<nAppNum;i++)
{
if(i<10)
wsprintf(szSubKey,"SOFTWARE\\phonix\\sharewareluncher\\menuitem00%d",i);
else
wsprintf(szSubKey,"SOFTWARE\\phonix\\sharewareluncher\\menuitem0%d",i);
RegInfo[0].szValName="AppName";
RegInfo[1].szValName="AppCmdLine";
RegInfo[2].szValName="Year";
RegInfo[3].szValName="Month";
RegInfo[4].szValName="Day";
RegInfo[0].dwType=REG_SZ;
RegInfo[1].dwType=REG_SZ;
RegInfo[2].dwType=REG_DWORD;
RegInfo[3].dwType=REG_DWORD;
RegInfo[4].dwType=REG_DWORD;
RegInfo[0].lpData=(LPBYTE)&(aiAppInfo[i].szAppName);
RegInfo[1].lpData=(LPBYTE)&(aiAppInfo[i].szAppCmd);
RegInfo[2].lpData=(LPBYTE)&(aiAppInfo[i].stVrDate.wYear);
RegInfo[3].lpData=(LPBYTE)&(aiAppInfo[i].stVrDate.wMonth);
RegInfo[4].lpData=(LPBYTE)&(aiAppInfo[i].stVrDate.wDay);
RegInfo[0].cbData=80;
RegInfo[1].cbData=300;
RegInfo[2].cbData=(DWORD)sizeof(DWORD);
RegInfo[3].cbData=(DWORD)sizeof(DWORD);
RegInfo[4].cbData=(DWORD)sizeof(DWORD);
RegSetGroupVal(HKEY_LOCAL_MACHINE,szSubKey,5,RegInfo);
}
RemapMenu();
GetAllIcon();
}
break;
case WM_COMMAND:
switch ( LOWORD( wParam ))
{
case IDOK:
if(nAppNum>49)
{
Errmsg("抱歉,你已不能再添加程序");
if(bAddExe || bCreateLink)
{
if(!bSheet || !bNoLunch)
SendMessage(hWnd,WM_COMMAND,IDC_OK,0);
else
bCreateLink=bAddExe=FALSE;
}
break;
}
if(DialogBox(hInst,MAKEINTRESOURCE(IDD_ADD),hWnd,(DLGPROC)AddDlgProc))
{
MENUITEMINFO mi;
bAnyChanged=TRUE;
SendMessage(hListWnd,LB_ADDSTRING,0,(LPARAM)aiAppInfo[nAppNum-1].szAppName);
SendMessage(hListWnd, LB_SETITEMDATA, SendMessage(hListWnd, LB_FINDSTRING, -1, (LPARAM)(aiAppInfo[nAppNum-1].szAppName)), (LPARAM) (nAppNum-1));
mi.cbSize=sizeof(mi);
mi.fMask=MIIM_TYPE | MIIM_ID; mi.fType=MFT_STRING; mi.fState=MFS_DEFAULT;
mi.wID=11000+nAppNum-1;
mi.dwTypeData=aiAppInfo[nAppNum-1].szAppName; mi.cch=strlen(aiAppInfo[nAppNum-1].szAppName);
InsertMenuItem(hmenuTrackPopup,nAppNum-1,TRUE,&mi);
if(nAppNum==1)
{
mi.fType=MFT_SEPARATOR;
InsertMenuItem(hmenuTrackPopup,CM_SETCLOCK,FALSE,&mi);
}
}
if(bAddExe || bCreateLink)
{
if(!bSheet || !bNoLunch)
SendMessage(hWnd,WM_COMMAND,IDC_OK,0);
else
bCreateLink=bAddExe=FALSE;
}
SendMessage(hWnd,MYWM_ICON,0,0);
break;
case IDCANCEL:
i=SendMessage(hListWnd,LB_GETCURSEL,0,0);
if(i==LB_ERR)
break;
j=SendMessage(hListWnd, LB_GETITEMDATA, i, (LPARAM) 0);
wsprintf(szerr,"如果删除\"%s\"程序,你将不能通过本软件启动该程序。\n确实要删除吗?",aiAppInfo[j].szAppName);
if(MessageBox(hWnd,szerr,"确认删除",MB_OKCANCEL | MB_ICONQUESTION)==IDCANCEL)
break;
SendMessage(hListWnd,LB_DELETESTRING,i,0L);
nAppNum--;
ListDel(j);
bAnyChanged=TRUE;
SendMessage(hBarWnd,SB_SETTEXT,(0 | 0),(LPARAM)" ");
SendMessage(hBarWnd,SB_SETTEXT,(2 | 0),(LPARAM)" ");
RemoveMenu(hmenuTrackPopup,11000+j,MF_BYCOMMAND);
if(nAppNum==0)
RemoveMenu(hmenuTrackPopup,0,MF_BYPOSITION);
//DrawMenuBar(hmenuTrackPopup);
SendMessage(hWnd,MYWM_ICON,0,0);
break;
case IDHELP:
//ListDel();
i=SendMessage(hListWnd,LB_GETCURSEL,0,0);
if(i==LB_ERR)
break;
naiIndex=SendMessage(hListWnd, LB_GETITEMDATA, i, (LPARAM) 0);
if(DialogBox(hInst,MAKEINTRESOURCE(IDD_ADD),hWnd,(DLGPROC)AddDlgProc))
{
MENUITEMINFO mi;
bAnyChanged=TRUE;
SendMessage(hListWnd,LB_DELETESTRING,i,0L);
SendMessage(hListWnd,LB_ADDSTRING,0,(LPARAM)aiAppInfo[naiIndex].szAppName);
SendMessage(hListWnd, LB_SETITEMDATA, SendMessage(hListWnd, LB_FINDSTRING, -1, (LPARAM)(aiAppInfo[naiIndex].szAppName)), (LPARAM) naiIndex);
SendMessage(hBarWnd,SB_SETTEXT,(0 | 0),(LPARAM)" ");
SendMessage(hBarWnd,SB_SETTEXT,(2 | 0),(LPARAM)" ");
mi.cbSize=sizeof(mi);
mi.fMask=MIIM_TYPE | MIIM_ID; mi.fType=MFT_STRING; mi.fState=MFS_DEFAULT;
mi.wID=11000+naiIndex;
mi.dwTypeData=aiAppInfo[naiIndex].szAppName; mi.cch=strlen(aiAppInfo[naiIndex].szAppName);
SetMenuItemInfo(hmenuTrackPopup,11000+naiIndex,FALSE,&mi);
//DrawMenuBar(hmenuTrackPopup);
naiIndex=-1;
SendMessage(hWnd,MYWM_ICON,0,0);
}
break;
case IDC_OK:
SendMessage(hWnd,MYWM_ICON,0,0);
bDlgRuned=FALSE;
if(bAddExe)
{
for(i=0;i<nAppNum;i++)
{ if(strcmpi(szRunCommand,aiAppInfo[i].szAppCmd)==0 && !bNoLunch) Lunch(hMainWnd,i); }
bAddExe=FALSE;
bNoLunch=TRUE;
}
if(bCreateLink)
{
bCreateLink=FALSE;
MakeShortcut();
}
if(!bSheet)
{
hListAppWnd=NULL;
EndDialog(hWnd,TRUE);
}
return TRUE;
}
switch(HIWORD(wParam))
{
case LBN_SELCHANGE:
i=SendMessage((HWND)lParam,LB_GETCURSEL,0,0);
if(i==LB_ERR)
{
SendMessage(hBarWnd,SB_SETTEXT,(0 | 0),(LPARAM)" ");
SendMessage(hBarWnd,SB_SETTEXT,(2 | 0),(LPARAM)" ");
break;
}
i=SendMessage((HWND)lParam, LB_GETITEMDATA, i, (LPARAM) 0);
SendMessage(hBarWnd,SB_SETTEXT,(0 | 0),(LPARAM)aiAppInfo[i].szAppCmd);
TransDate(i);
SendMessage(hBarWnd,SB_SETTEXT,(2 | 0),(LPARAM)szerr);
break;
case LBN_DBLCLK:
SendMessage(hWnd,WM_COMMAND,IDHELP,0);
break;
}
break;
case WM_CLOSE:
SendMessage(hWnd,MYWM_ICON,0,0);
bDlgRuned=FALSE;
bSheet=FALSE;
hListAppWnd=NULL;
EndDialog(hWnd,TRUE);
return TRUE;
case WM_NOTIFY:
switch (((NMHDR FAR *) lParam)->code)
{
case PSN_SETACTIVE:
bDlgRuned=TRUE;
bSheet=TRUE;
SetFocus(hListWnd);
break;
case PSN_APPLY:
SendMessage(hWnd,MYWM_ICON,0,0);
bDlgRuned=FALSE;
bSheet=FALSE;
SetWindowLong(hMainWnd, GWL_STYLE, GetWindowLong(hMainWnd,GWL_STYLE));
ShowWindow(hMainWnd, SW_SHOW);
SetWindowLong(hWnd,DWL_MSGRESULT, FALSE);
return TRUE;
case PSN_KILLACTIVE:
bSheet=FALSE;
SetWindowLong(hWnd,DWL_MSGRESULT, FALSE);
return (TRUE);
case PSN_RESET:
bDlgRuned=FALSE;
bSheet=FALSE;
break;
case PSN_HELP:
break;
}
default:
return FALSE;
}
return FALSE;
}
void TransDate(int i)
{
if(aiAppInfo[i].stVrDate.wMonth<10)
wsprintf(szerr,"0%d/",aiAppInfo[i].stVrDate.wMonth);
else
wsprintf(szerr,"%d/",aiAppInfo[i].stVrDate.wMonth);
if(aiAppInfo[i].stVrDate.wDay<10)
wsprintf(szerr,"%s0%d/%4d",szerr,aiAppInfo[i].stVrDate.wDay,aiAppInfo[i].stVrDate.wYear);
else
wsprintf(szerr,"%s%d/%4d",szerr,aiAppInfo[i].stVrDate.wDay,aiAppInfo[i].stVrDate.wYear);
if(aiAppInfo[i].stVrDate.wYear==0 || aiAppInfo[i].stVrDate.wMonth==0 || aiAppInfo[i].stVrDate.wDay==0)
wsprintf(szerr,"无");
}
void ListDel(int x)
{
int i,j;
char szSubKeyname[256];
REGVALINFO r;
for(i=x;i<nAppNum;i++)
{
aiAppInfo[i]=aiAppInfo[i+1];
}
if(nAppNum<10)
wsprintf(szSubKeyname,"SOFTWARE\\phonix\\sharewareluncher\\menuitem00%d",nAppNum);
else
wsprintf(szSubKeyname,"SOFTWARE\\phonix\\sharewareluncher\\menuitem0%d",nAppNum);
RegDeleteKey(HKEY_LOCAL_MACHINE,szSubKeyname);
r.szValName="Num";
r.dwType=REG_DWORD;
r.lpData=(LPBYTE)&(nAppNum);
r.cbData=(DWORD)sizeof(DWORD);
RegSetGroupVal(HKEY_LOCAL_MACHINE,"SOFTWARE\\phonix\\sharewareluncher",1,&r);
for(i=0;i<nAppNum;i++)
{
j=SendMessage(hListWnd,LB_GETITEMDATA,i,0L);
if(j>x)
SendMessage(hListWnd,LB_SETITEMDATA,i,(LPARAM)(j-1));
}
}
void SortList(void)
{
int i,j,pi[50];
APPINFO aiTemp,aiSort;
MENUITEMINFO mi;
for(i=0;i<nAppNum;i++)
{
pi[i]=SendMessage(hListWnd,LB_GETITEMDATA,i,0L);
}
for(i=0;i<nAppNum;i++)
{
if(pi[i]!=i)
{
aiSort=aiAppInfo[pi[i]];
aiTemp=aiAppInfo[i];
aiAppInfo[i]=aiSort;
aiAppInfo[pi[i]]=aiTemp;
for(j=0;j<nAppNum;j++)
{
if(pi[j]==i)
pi[j]=pi[i];
}
}
}
for(i=0;i<nAppNum;i++)
{
mi.cbSize=sizeof(mi);
mi.fMask=MIIM_TYPE | MIIM_ID; mi.fType=MFT_STRING; mi.fState=MFS_DEFAULT;
mi.wID=11000+i;
mi.dwTypeData=aiAppInfo[i].szAppName; mi.cch=strlen(aiAppInfo[i].szAppName);
SetMenuItemInfo(hmenuTrackPopup,i,TRUE,&mi);
SendMessage(hListWnd, LB_SETITEMDATA, SendMessage(hListWnd, LB_FINDSTRING, -1, (LPARAM)(aiAppInfo[i].szAppName)), (LPARAM) i);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -