📄 dialogs.c
字号:
case IDC_COMMANDLINE:
{
BOOL bEnableOK = FALSE;
char args[MAX_PATH];
if (GetDlgItemText(hwnd,IDC_COMMANDLINE,args,MAX_PATH))
if (ExtractFirstArgument(args,args,NULL))
if (lstrlen(args))
bEnableOK = TRUE;
EnableWindow(GetDlgItem(hwnd,IDOK),bEnableOK);
}
break;
case IDOK:
{
char arg1[MAX_PATH];
char arg2[MAX_PATH];
SHELLEXECUTEINFO sei;
if (GetDlgItemText(hwnd,IDC_COMMANDLINE,arg1,MAX_PATH))
{
ExpandEnvironmentStringsEx(arg1,COUNTOF(arg1));
ExtractFirstArgument(arg1,arg1,arg2);
ZeroMemory(&sei,sizeof(SHELLEXECUTEINFO));
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.hwnd = hwnd;
sei.lpVerb = NULL;
sei.lpFile = arg1;
sei.lpParameters = arg2;
sei.lpDirectory = NULL;
sei.nShow = SW_SHOWNORMAL;
if (ShellExecuteEx(&sei))
EndDialog(hwnd,IDOK);
else
PostMessage(hwnd,WM_NEXTDLGCTL,
(WPARAM)(GetDlgItem(hwnd,IDC_COMMANDLINE)),1);
}
}
break;
case IDCANCEL:
EndDialog(hwnd,IDCANCEL);
break;
}
return TRUE;
}
return FALSE;
}
//=============================================================================
//
// RunDlg()
//
void RunDlg(HWND hwnd,LPCSTR lpstrDefault)
{
DialogBoxParam(g_hInstance,MAKEINTRESOURCE(IDD_RUN),
hwnd,RunDlgProc,(LPARAM)lpstrDefault);
}
//=============================================================================
//
// OpenWithDlgProc()
//
extern char tchOpenWithDir[MAX_PATH];
extern char tchOpenWithDirBuf[MAX_PATH];
extern int flagNoFadeHidden;
extern int cxOpenWithDlg;
extern int cyOpenWithDlg;
BOOL CALLBACK OpenWithDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
{
static int cxClient;
static int cyClient;
static int mmiPtMaxY;
static int mmiPtMinX;
switch(umsg)
{
case WM_INITDIALOG:
{
RECT rc;
char tch[MAX_PATH];
int cGrip;
LVCOLUMN lvc = { LVCF_FMT|LVCF_TEXT, LVCFMT_LEFT, 0, "", -1, 0, 0, 0 };
GetClientRect(hwnd,&rc);
cxClient = rc.right - rc.left;
cyClient = rc.bottom - rc.top;
GetWindowRect(hwnd,&rc);
mmiPtMaxY = rc.bottom-rc.top;
mmiPtMinX = rc.right-rc.left;
if (cxOpenWithDlg < (rc.right-rc.left))
cxOpenWithDlg = rc.right-rc.left;
if (cyOpenWithDlg < (rc.bottom-rc.top))
cyOpenWithDlg = rc.bottom-rc.top;
SetWindowPos(hwnd,NULL,rc.left,rc.top,cxOpenWithDlg,cyOpenWithDlg,SWP_NOZORDER);
SetWindowLong(hwnd,GWL_STYLE,GetWindowLong(hwnd,GWL_STYLE)|WS_THICKFRAME);
SetWindowPos(hwnd,NULL,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED);
GetMenuString(GetSystemMenu(GetParent(hwnd),FALSE),SC_SIZE,tch,COUNTOF(tch),MF_BYCOMMAND);
InsertMenu(GetSystemMenu(hwnd,FALSE),SC_CLOSE,MF_BYCOMMAND|MF_STRING|MF_ENABLED,SC_SIZE,tch);
InsertMenu(GetSystemMenu(hwnd,FALSE),SC_CLOSE,MF_BYCOMMAND|MF_SEPARATOR,0,NULL);
SetWindowLong(GetDlgItem(hwnd,IDC_RESIZEGRIP3),GWL_STYLE,
GetWindowLong(GetDlgItem(hwnd,IDC_RESIZEGRIP3),GWL_STYLE)|SBS_SIZEGRIP|WS_CLIPSIBLINGS);
cGrip = GetSystemMetrics(SM_CXHTHUMB);
SetWindowPos(GetDlgItem(hwnd,IDC_RESIZEGRIP3),NULL,cxClient-cGrip,
cyClient-cGrip,cGrip,cGrip,SWP_NOZORDER);
SetWindowLong(hwnd,DWL_USER,lParam);
ListView_SetExtendedListViewStyle(GetDlgItem(hwnd,IDC_OPENWITHDIR),/*LVS_EX_FULLROWSELECT|*//*LVS_EX_DOUBLEBUFFER*/0x00010000|LVS_EX_LABELTIP);
ListView_InsertColumn(GetDlgItem(hwnd,IDC_OPENWITHDIR),0,&lvc);
DirList_Init(GetDlgItem(hwnd,IDC_OPENWITHDIR),NULL);
DirList_Fill(GetDlgItem(hwnd,IDC_OPENWITHDIR),tchOpenWithDir,DL_ALLOBJECTS,NULL,FALSE,flagNoFadeHidden,DS_NAME,FALSE);
DirList_StartIconThread(GetDlgItem(hwnd,IDC_OPENWITHDIR));
ListView_SetItemState(GetDlgItem(hwnd,IDC_OPENWITHDIR),0,LVIS_FOCUSED,LVIS_FOCUSED);
MakeBitmapButton(hwnd,IDC_GETOPENWITHDIR,g_hInstance,IDB_OPEN);
CenterDlgInParent(hwnd);
}
return TRUE;
case WM_DESTROY:
{
RECT rc;
DirList_Destroy(GetDlgItem(hwnd,IDC_OPENWITHDIR));
GetWindowRect(hwnd,&rc);
cxOpenWithDlg = rc.right-rc.left;
cyOpenWithDlg = rc.bottom-rc.top;
}
return FALSE;
case WM_SIZE:
{
RECT rc;
int dxClient = LOWORD(lParam) - cxClient;
int dyClient = HIWORD(lParam) - cyClient;
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
GetWindowRect(GetDlgItem(hwnd,IDC_RESIZEGRIP3),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDC_RESIZEGRIP3),NULL,rc.left+dxClient,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
InvalidateRect(GetDlgItem(hwnd,IDC_RESIZEGRIP3),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDOK),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDOK),NULL,rc.left+dxClient,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
InvalidateRect(GetDlgItem(hwnd,IDOK),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDCANCEL),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDCANCEL),NULL,rc.left+dxClient,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
InvalidateRect(GetDlgItem(hwnd,IDCANCEL),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDC_OPENWITHDIR),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDC_OPENWITHDIR),NULL,0,0,rc.right-rc.left+dxClient,rc.bottom-rc.top+dyClient,SWP_NOZORDER|SWP_NOMOVE);
InvalidateRect(GetDlgItem(hwnd,IDC_OPENWITHDIR),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDC_GETOPENWITHDIR),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDC_GETOPENWITHDIR),NULL,rc.left,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
ListView_SetColumnWidth(GetDlgItem(hwnd,IDC_OPENWITHDIR),0,LVSCW_AUTOSIZE_USEHEADER);
InvalidateRect(GetDlgItem(hwnd,IDC_OPENWITHDIR),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDC_OPENWITHDESCR),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDC_OPENWITHDESCR),NULL,rc.left,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
InvalidateRect(GetDlgItem(hwnd,IDC_OPENWITHDESCR),NULL,TRUE);
}
return TRUE;
case WM_GETMINMAXINFO:
{
LPMINMAXINFO lpmmi = (LPMINMAXINFO)lParam;
lpmmi->ptMinTrackSize.x = mmiPtMinX;
lpmmi->ptMinTrackSize.y = mmiPtMaxY;
//lpmmi->ptMaxTrackSize.y = mmiPtMaxY;
}
return TRUE;
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR)lParam;
if (pnmh->idFrom == IDC_OPENWITHDIR)
{
switch(pnmh->code)
{
case LVN_GETDISPINFO:
DirList_GetDispInfo(GetDlgItem(hwnd,IDC_OPENWITHDIR),lParam,flagNoFadeHidden);
break;
case LVN_DELETEITEM:
DirList_DeleteItem(GetDlgItem(hwnd,IDC_OPENWITHDIR),lParam);
break;
case LVN_ITEMCHANGED: {
NM_LISTVIEW *pnmlv = (NM_LISTVIEW*)lParam;
EnableWindow(GetDlgItem(hwnd,IDOK),(pnmlv->uNewState & LVIS_SELECTED));
}
break;
case NM_DBLCLK:
if (ListView_GetSelectedCount(GetDlgItem(hwnd,IDC_OPENWITHDIR)))
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDOK,1),0);
break;
}
}
}
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_GETOPENWITHDIR:
{
if (GetDirectory(hwnd,IDS_OPENWITH,tchOpenWithDir,tchOpenWithDir,TRUE))
{
lstrcpy(tchOpenWithDirBuf,tchOpenWithDir);
DirList_Fill(GetDlgItem(hwnd,IDC_OPENWITHDIR),tchOpenWithDir,DL_ALLOBJECTS,NULL,FALSE,flagNoFadeHidden,DS_NAME,FALSE);
DirList_StartIconThread(GetDlgItem(hwnd,IDC_OPENWITHDIR));
ListView_EnsureVisible(GetDlgItem(hwnd,IDC_OPENWITHDIR),0,FALSE);
ListView_SetItemState(GetDlgItem(hwnd,IDC_OPENWITHDIR),0,LVIS_FOCUSED,LVIS_FOCUSED);
}
PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,IDC_OPENWITHDIR)),1);
}
break;
case IDOK: {
LPDLITEM lpdli = (LPDLITEM)GetWindowLong(hwnd,DWL_USER);
lpdli->mask = DLI_FILENAME | DLI_TYPE;
lpdli->ntype = DLE_NONE;
DirList_GetItem(GetDlgItem(hwnd,IDC_OPENWITHDIR),(-1),lpdli);
if (lpdli->ntype != DLE_NONE)
EndDialog(hwnd,IDOK);
else
MessageBeep(0);
}
break;
case IDCANCEL:
EndDialog(hwnd,IDCANCEL);
break;
}
return TRUE;
}
return FALSE;
}
//=============================================================================
//
// OpenWithDlg()
//
BOOL OpenWithDlg(HWND hwnd,LPCSTR lpstrFile)
{
DLITEM dliOpenWith;
dliOpenWith.mask = DLI_FILENAME;
if (IDOK == DialogBoxParam(g_hInstance,MAKEINTRESOURCE(IDD_OPENWITH),
hwnd,OpenWithDlgProc,(LPARAM)&dliOpenWith))
{
SHELLEXECUTEINFO sei;
char szParam[MAX_PATH];
ZeroMemory(&sei,sizeof(SHELLEXECUTEINFO));
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.hwnd = hwnd;
sei.lpVerb = NULL;
sei.lpFile = dliOpenWith.szFileName;
sei.lpParameters = szParam;
sei.lpDirectory = NULL;
sei.nShow = SW_SHOWNORMAL;
// resolve links and get short path name
if (!(PathIsLnkFile(lpstrFile) && PathGetLnkPath(lpstrFile,szParam,COUNTOF(szParam))))
lstrcpy(szParam,lpstrFile);
GetShortPathName(szParam,szParam,sizeof(char)*COUNTOF(szParam));
//PathQuoteSpaces(szParam);
ShellExecuteEx(&sei);
return(TRUE);
}
return(FALSE);
}
//=============================================================================
//
// FavoritesDlgProc()
//
extern char tchFavoritesDir[MAX_PATH];
extern char tchFavoritesDirBuf[MAX_PATH];
//extern int flagNoFadeHidden;
extern int cxFavoritesDlg;
extern int cyFavoritesDlg;
BOOL CALLBACK FavoritesDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
{
static int cxClient;
static int cyClient;
static int mmiPtMaxY;
static int mmiPtMinX;
switch(umsg)
{
case WM_INITDIALOG:
{
RECT rc;
char tch[MAX_PATH];
int cGrip;
LVCOLUMN lvc = { LVCF_FMT|LVCF_TEXT, LVCFMT_LEFT, 0, "", -1, 0, 0, 0 };
GetClientRect(hwnd,&rc);
cxClient = rc.right - rc.left;
cyClient = rc.bottom - rc.top;
GetWindowRect(hwnd,&rc);
mmiPtMaxY = rc.bottom-rc.top;
mmiPtMinX = rc.right-rc.left;
if (cxFavoritesDlg < (rc.right-rc.left))
cxFavoritesDlg = rc.right-rc.left;
if (cyFavoritesDlg < (rc.bottom-rc.top))
cyFavoritesDlg = rc.bottom-rc.top;
SetWindowPos(hwnd,NULL,rc.left,rc.top,cxFavoritesDlg,cyFavoritesDlg,SWP_NOZORDER);
SetWindowLong(hwnd,GWL_STYLE,GetWindowLong(hwnd,GWL_STYLE)|WS_THICKFRAME);
SetWindowPos(hwnd,NULL,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED);
GetMenuString(GetSystemMenu(GetParent(hwnd),FALSE),SC_SIZE,tch,COUNTOF(tch),MF_BYCOMMAND);
InsertMenu(GetSystemMenu(hwnd,FALSE),SC_CLOSE,MF_BYCOMMAND|MF_STRING|MF_ENABLED,SC_SIZE,tch);
InsertMenu(GetSystemMenu(hwnd,FALSE),SC_CLOSE,MF_BYCOMMAND|MF_SEPARATOR,0,NULL);
SetWindowLong(GetDlgItem(hwnd,IDC_RESIZEGRIP3),GWL_STYLE,
GetWindowLong(GetDlgItem(hwnd,IDC_RESIZEGRIP3),GWL_STYLE)|SBS_SIZEGRIP|WS_CLIPSIBLINGS);
cGrip = GetSystemMetrics(SM_CXHTHUMB);
SetWindowPos(GetDlgItem(hwnd,IDC_RESIZEGRIP3),NULL,cxClient-cGrip,
cyClient-cGrip,cGrip,cGrip,SWP_NOZORDER);
SetWindowLong(hwnd,DWL_USER,lParam);
ListView_SetExtendedListViewStyle(GetDlgItem(hwnd,IDC_FAVORITESDIR),/*LVS_EX_FULLROWSELECT|*//*LVS_EX_DOUBLEBUFFER*/0x00010000|LVS_EX_LABELTIP);
ListView_InsertColumn(GetDlgItem(hwnd,IDC_FAVORITESDIR),0,&lvc);
DirList_Init(GetDlgItem(hwnd,IDC_FAVORITESDIR),NULL);
DirList_Fill(GetDlgItem(hwnd,IDC_FAVORITESDIR),tchFavoritesDir,DL_ALLOBJECTS,NULL,FALSE,flagNoFadeHidden,DS_NAME,FALSE);
DirList_StartIconThread(GetDlgItem(hwnd,IDC_FAVORITESDIR));
ListView_SetItemState(GetDlgItem(hwnd,IDC_FAVORITESDIR),0,LVIS_FOCUSED,LVIS_FOCUSED);
MakeBitmapButton(hwnd,IDC_GETFAVORITESDIR,g_hInstance,IDB_OPEN);
CenterDlgInParent(hwnd);
}
return TRUE;
case WM_DESTROY:
{
RECT rc;
DirList_Destroy(GetDlgItem(hwnd,IDC_FAVORITESDIR));
GetWindowRect(hwnd,&rc);
cxFavoritesDlg = rc.right-rc.left;
cyFavoritesDlg = rc.bottom-rc.top;
}
return FALSE;
case WM_SIZE:
{
RECT rc;
int dxClient = LOWORD(lParam) - cxClient;
int dyClient = HIWORD(lParam) - cyClient;
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
GetWindowRect(GetDlgItem(hwnd,IDC_RESIZEGRIP3),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDC_RESIZEGRIP3),NULL,rc.left+dxClient,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
InvalidateRect(GetDlgItem(hwnd,IDC_RESIZEGRIP3),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDOK),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDOK),NULL,rc.left+dxClient,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
InvalidateRect(GetDlgItem(hwnd,IDOK),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDCANCEL),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDCANCEL),NULL,rc.left+dxClient,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
InvalidateRect(GetDlgItem(hwnd,IDCANCEL),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDC_FAVORITESDIR),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDC_FAVORITESDIR),NULL,0,0,rc.right-rc.left+dxClient,rc.bottom-rc.top+dyClient,SWP_NOZORDER|SWP_NOMOVE);
ListView_SetColumnWidth(GetDlgItem(hwnd,IDC_FAVORITESDIR),0,LVSCW_AUTOSIZE_USEHEADER);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -