📄 dialogs.c
字号:
GetWindowRect(GetDlgItem(hwnd,IDC_FILEMRU),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDC_FILEMRU),NULL,0,0,rc.right-rc.left+dxClient,rc.bottom-rc.top+dyClient,SWP_NOZORDER|SWP_NOMOVE);
ListView_SetColumnWidth(GetDlgItem(hwnd,IDC_FILEMRU),0,LVSCW_AUTOSIZE_USEHEADER);
InvalidateRect(GetDlgItem(hwnd,IDC_FILEMRU),NULL,TRUE);
GetWindowRect(GetDlgItem(hwnd,IDC_SAVEMRU),&rc);
MapWindowPoints(NULL,hwnd,(LPPOINT)&rc,2);
SetWindowPos(GetDlgItem(hwnd,IDC_SAVEMRU),NULL,rc.left,rc.top+dyClient,0,0,SWP_NOZORDER|SWP_NOSIZE);
InvalidateRect(GetDlgItem(hwnd,IDC_SAVEMRU),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: {
if (((LPNMHDR)(lParam))->idFrom == IDC_FILEMRU) {
switch (((LPNMHDR)(lParam))->code) {
case NM_DBLCLK:
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDOK,1),0);
break;
case LVN_GETDISPINFO: {
/*
LV_DISPINFO *lpdi = (LPVOID)lParam;
if (lpdi->item.mask & LVIF_IMAGE) {
char tch[MAX_PATH];
LV_ITEM lvi;
SHFILEINFO shfi;
DWORD dwFlags = SHGFI_SMALLICON | SHGFI_SYSICONINDEX | SHGFI_ATTRIBUTES | SHGFI_ATTR_SPECIFIED;
DWORD dwAttr = 0;
ZeroMemory(&lvi,sizeof(LV_ITEM));
lvi.mask = LVIF_TEXT;
lvi.pszText = tch;
lvi.cchTextMax = COUNTOF(tch);
lvi.iItem = lpdi->item.iItem;
ListView_GetItem(GetDlgItem(hwnd,IDC_FILEMRU),&lvi);
if (!PathFileExists(tch)) {
dwFlags |= SHGFI_USEFILEATTRIBUTES;
dwAttr = FILE_ATTRIBUTE_NORMAL;
shfi.dwAttributes = 0;
SHGetFileInfo(PathFindFileName(tch),dwAttr,&shfi,sizeof(SHFILEINFO),dwFlags);
}
else {
shfi.dwAttributes = SFGAO_LINK | SFGAO_SHARE;
SHGetFileInfo(tch,dwAttr,&shfi,sizeof(SHFILEINFO),dwFlags);
}
lpdi->item.iImage = shfi.iIcon;
lpdi->item.mask |= LVIF_DI_SETITEM;
lpdi->item.stateMask = 0;
lpdi->item.state = 0;
if (shfi.dwAttributes & SFGAO_LINK) {
lpdi->item.mask |= LVIF_STATE;
lpdi->item.stateMask |= LVIS_OVERLAYMASK;
lpdi->item.state |= INDEXTOOVERLAYMASK(2);
}
if (shfi.dwAttributes & SFGAO_SHARE) {
lpdi->item.mask |= LVIF_STATE;
lpdi->item.stateMask |= LVIS_OVERLAYMASK;
lpdi->item.state |= INDEXTOOVERLAYMASK(1);
}
dwAttr = GetFileAttributes(tch);
if (!flagNoFadeHidden &&
dwAttr != INVALID_FILE_ATTRIBUTES &&
dwAttr & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) {
lpdi->item.mask |= LVIF_STATE;
lpdi->item.stateMask |= LVIS_CUT;
lpdi->item.state |= LVIS_CUT;
}
}
*/
}
break;
case LVN_ITEMCHANGED:
case LVN_DELETEITEM:
EnableWindow(GetDlgItem(hwnd,IDOK),ListView_GetSelectedCount(GetDlgItem(hwnd,IDC_FILEMRU)));
break;
}
}
}
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case 0x00A0:
{
int i;
char tch[MAX_PATH];
LV_ITEM lvi;
SHFILEINFO shfi;
DWORD dwtid;
LPICONTHREADINFO lpit = (LPVOID)GetProp(hwnd,"it");
SetEvent(lpit->hExitThread);
while (WaitForSingleObject(lpit->hTerminatedThread,0) != WAIT_OBJECT_0) {
MSG msg;
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
ResetEvent(lpit->hExitThread);
SetEvent(lpit->hTerminatedThread);
ListView_DeleteAllItems(GetDlgItem(hwnd,IDC_FILEMRU));
ZeroMemory(&lvi,sizeof(LV_ITEM));
lvi.mask = LVIF_TEXT | LVIF_IMAGE;
SHGetFileInfo("Icon",FILE_ATTRIBUTE_NORMAL,&shfi,sizeof(SHFILEINFO),
SHGFI_USEFILEATTRIBUTES | SHGFI_SMALLICON | SHGFI_SYSICONINDEX);
lvi.iImage = shfi.iIcon;
for (i = 0; i < MRU_Enum(pFileMRU,0,NULL,0); i++) {
MRU_Enum(pFileMRU,i,tch,COUNTOF(tch));
// SendDlgItemMessage(hwnd,IDC_FILEMRU,LB_ADDSTRING,0,(LPARAM)tch); }
// SendDlgItemMessage(hwnd,IDC_FILEMRU,LB_SETCARETINDEX,0,FALSE);
lvi.iItem = i;
lvi.pszText = tch;
ListView_InsertItem(GetDlgItem(hwnd,IDC_FILEMRU),&lvi);
}
ListView_SetItemState(GetDlgItem(hwnd,IDC_FILEMRU),0,LVIS_FOCUSED,LVIS_FOCUSED);
ListView_SetColumnWidth(GetDlgItem(hwnd,IDC_FILEMRU),0,LVSCW_AUTOSIZE_USEHEADER);
CreateThread(NULL,0,FileMRUIconThread,(LPVOID)lpit,0,&dwtid);
}
break;
case IDC_FILEMRU:
break;
case IDOK:
{
char tch[MAX_PATH];
//int iItem;
//if ((iItem = SendDlgItemMessage(hwnd,IDC_FILEMRU,LB_GETCURSEL,0,0)) != LB_ERR)
if (ListView_GetSelectedCount(GetDlgItem(hwnd,IDC_FILEMRU)))
{
//SendDlgItemMessage(hwnd,IDC_FILEMRU,LB_GETTEXT,(WPARAM)iItem,(LPARAM)tch);
LV_ITEM lvi;
ZeroMemory(&lvi,sizeof(LV_ITEM));
lvi.mask = LVIF_TEXT;
lvi.pszText = tch;
lvi.cchTextMax = COUNTOF(tch);
lvi.iItem = ListView_GetNextItem(GetDlgItem(hwnd,IDC_FILEMRU),-1,LVNI_ALL | LVNI_SELECTED);
ListView_GetItem(GetDlgItem(hwnd,IDC_FILEMRU),&lvi);
PathUnquoteSpaces(tch);
if (!PathFileExists(tch)) {
// Ask...
if (IDYES == MsgBox(MBYESNO,IDS_ERR_MRUDLG)) {
MRU_Delete(pFileMRU,lvi.iItem);
//SendDlgItemMessage(hwnd,IDC_FILEMRU,LB_DELETESTRING,(WPARAM)iItem,0);
//ListView_DeleteItem(GetDlgItem(hwnd,IDC_FILEMRU),lvi.iItem);
// must use IDM_VIEW_REFRESH, index might change...
SendMessage(hwnd,WM_COMMAND,MAKELONG(0x00A0,1),0);
//EnableWindow(GetDlgItem(hwnd,IDOK),
// (LB_ERR != SendDlgItemMessage(hwnd,IDC_GOTO,LB_GETCURSEL,0,0)));
EnableWindow(GetDlgItem(hwnd,IDOK),
ListView_GetSelectedCount(GetDlgItem(hwnd,IDC_FILEMRU)));
}
}
else {
lstrcpy((LPSTR)GetWindowLong(hwnd,DWL_USER),tch);
EndDialog(hwnd,IDOK);
}
}
}
break;
case IDCANCEL:
EndDialog(hwnd,IDCANCEL);
break;
}
return TRUE;
}
return FALSE;
}
//=============================================================================
//
// FileMRUDlg()
//
//
BOOL FileMRUDlg(HWND hwnd,LPSTR lpstrFile)
{
if (IDOK == DialogBoxParam(g_hInstance,MAKEINTRESOURCE(IDD_FILEMRU),
hwnd,FileMRUDlgProc,(LPARAM)lpstrFile))
return TRUE;
else
return FALSE;
}
//=============================================================================
//
// ColumnWrapDlgProc()
//
// Controls: 100 Edit
//
BOOL CALLBACK ColumnWrapDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
{
static int *piNumber;
switch(umsg)
{
case WM_INITDIALOG:
{
piNumber = (int*)lParam;
SetDlgItemInt(hwnd,100,*piNumber,FALSE);
SendDlgItemMessage(hwnd,100,EM_LIMITTEXT,15,0);
CenterDlgInParent(hwnd);
}
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK: {
BOOL fTranslated;
int iNewNumber = GetDlgItemInt(hwnd,100,&fTranslated,FALSE);
if (fTranslated)
{
*piNumber = iNewNumber;
EndDialog(hwnd,IDOK);
}
else
PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,100)),1);
}
break;
case IDCANCEL:
EndDialog(hwnd,IDCANCEL);
break;
}
return TRUE;
}
return FALSE;
}
//=============================================================================
//
// ColumnWrapDlg()
//
BOOL ColumnWrapDlg(HWND hwnd,UINT uidDlg,int *iNumber)
{
int iResult;
iResult = DialogBoxParam(
g_hInstance,
MAKEINTRESOURCE(uidDlg),
hwnd,
ColumnWrapDlgProc,(LPARAM)iNumber);
return (iResult == IDOK) ? TRUE : FALSE;
}
//=============================================================================
//
// WordWrapSettingsDlgProc()
//
// Controls: 100 Edit
// 101 Combo
//
extern BOOL bShowWordWrapSymbols;
extern int iWordWrapSymbols;
BOOL CALLBACK WordWrapSettingsDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
{
static int *piNumber;
switch(umsg)
{
case WM_INITDIALOG:
{
char tch[512];
char *p1, *p2;
piNumber = (int*)lParam;
SetDlgItemInt(hwnd,100,*piNumber,FALSE);
SendDlgItemMessage(hwnd,100,EM_LIMITTEXT,15,0);
// Load options
GetString(IDS_WORDWRAPVISUALS,tch,COUNTOF(tch));
lstrcat(tch,"|");
p1 = tch;
while (p2 = strchr(p1,'|')) {
*p2++ = '\0';
if (*p1)
SendDlgItemMessage(hwnd,101,CB_ADDSTRING,0,(LPARAM)p1);
p1 = p2;
}
SendDlgItemMessage(hwnd,101,CB_SETCURSEL,(WPARAM)(bShowWordWrapSymbols) ? iWordWrapSymbols+1 : 0,0);
SendDlgItemMessage(hwnd,101,CB_SETEXTENDEDUI,TRUE,0);
CenterDlgInParent(hwnd);
}
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK: {
BOOL fTranslated;
int iSel;
int iNewNumber = GetDlgItemInt(hwnd,100,&fTranslated,FALSE);
if (fTranslated)
{
*piNumber = iNewNumber;
iSel = SendDlgItemMessage(hwnd,101,CB_GETCURSEL,0,0);
if (iSel > 0) {
bShowWordWrapSymbols = TRUE;
iWordWrapSymbols = iSel-1;
}
else {
bShowWordWrapSymbols = FALSE;
}
EndDialog(hwnd,IDOK);
}
else
PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,100)),1);
}
break;
case IDCANCEL:
EndDialog(hwnd,IDCANCEL);
break;
}
return TRUE;
}
return FALSE;
}
//=============================================================================
//
// WordWrapSettingsDlg()
//
BOOL WordWrapSettingsDlg(HWND hwnd,UINT uidDlg,int *iNumber)
{
int iResult;
iResult = DialogBoxParam(
g_hInstance,
MAKEINTRESOURCE(uidDlg),
hwnd,
WordWrapSettingsDlgProc,(LPARAM)iNumber);
return (iResult == IDOK) ? TRUE : FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -