sumatradialogs.cc.svn-base
来自「SumatraPDF是一款小型开源的pdf阅读工具。虽然玲珑小巧(只有800多K」· SVN-BASE 代码 · 共 456 行 · 第 1/2 页
SVN-BASE
456 行
assert(win);
if (!win) return INVALID_PAGE_NO;
data.currPageNo = win->dm->startPage();
data.pageCount = win->dm->pageCount();
dialogResult = DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_DIALOG_GOTO_PAGE), win->hwndFrame, Dialog_GoToPage_Proc, (LPARAM)&data);
if (DIALOG_OK_PRESSED == dialogResult) {
if (win->dm->validPageNo(data.pageEnteredOut)) {
return data.pageEnteredOut;
}
}
return INVALID_PAGE_NO;
}
/* For passing data to/from AssociateWithPdf dialog */
typedef struct {
BOOL dontAskAgain;
} Dialog_PdfAssociate_Data;
static BOOL CALLBACK Dialog_PdfAssociate_Proc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
Dialog_PdfAssociate_Data * data;
if (WM_INITDIALOG == message)
{
/* TODO: intelligently center the dialog within the parent window? */
data = (Dialog_PdfAssociate_Data*)lParam;
assert(data);
SetWindowLongPtr(hDlg, GWL_USERDATA, (LONG_PTR)data);
win_set_textw(hDlg, _TRW("Associate with PDF files?"));
SetDlgItemTextW(hDlg, IDC_STATIC, _TRW("Make SumatraPDF default application for PDF files?"));
SetDlgItemTextW(hDlg, IDC_DONT_ASK_ME_AGAIN, _TRW("Don't ask me again"));
CheckDlgButton(hDlg, IDC_DONT_ASK_ME_AGAIN, BST_UNCHECKED);
SetFocus(GetDlgItem(hDlg, IDOK));
return FALSE;
}
switch (message)
{
case WM_COMMAND:
data = (Dialog_PdfAssociate_Data*)GetWindowLongPtr(hDlg, GWL_USERDATA);
assert(data);
data->dontAskAgain = FALSE;
switch (LOWORD(wParam))
{
case IDOK:
if (BST_CHECKED == IsDlgButtonChecked(hDlg, IDC_DONT_ASK_ME_AGAIN))
data->dontAskAgain = TRUE;
EndDialog(hDlg, DIALOG_OK_PRESSED);
return TRUE;
case IDCANCEL:
if (BST_CHECKED == IsDlgButtonChecked(hDlg, IDC_DONT_ASK_ME_AGAIN))
data->dontAskAgain = TRUE;
EndDialog(hDlg, DIALOG_NO_PRESSED);
return TRUE;
case IDC_DONT_ASK_ME_AGAIN:
return TRUE;
}
break;
}
return FALSE;
}
/* Show "associate this application with PDF files" dialog.
Returns DIALOG_YES_PRESSED if "Yes" button was pressed or
DIALOG_NO_PRESSED if "No" button was pressed.
Returns the state of "don't ask me again" checkbox" in <dontAskAgain> */
int Dialog_PdfAssociate(HWND hwnd, BOOL *dontAskAgainOut)
{
assert(dontAskAgainOut);
Dialog_PdfAssociate_Data data;
int dialogResult = DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_DIALOG_PDF_ASSOCIATE), hwnd, Dialog_PdfAssociate_Proc, (LPARAM)&data);
if (dontAskAgainOut)
*dontAskAgainOut = data.dontAskAgain;
return dialogResult;
}
/* For passing data to/from ChangeLanguage dialog */
typedef struct {
int langId;
} Dialog_ChangeLanguage_Data;
static BOOL CALLBACK Dialog_ChangeLanguage_Proc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
Dialog_ChangeLanguage_Data * data;
HWND langList;
int sel;
if (WM_INITDIALOG == message)
{
DIALOG_SIZER_START(sz)
DIALOG_SIZER_ENTRY(IDOK, DS_MoveY)
DIALOG_SIZER_ENTRY(IDCANCEL, DS_MoveX | DS_MoveY)
DIALOG_SIZER_ENTRY(IDC_CHANGE_LANG_LANG_LIST, DS_SizeY | DS_SizeX)
DIALOG_SIZER_END()
DialogSizer_Set(hDlg, sz, TRUE, NULL);
data = (Dialog_ChangeLanguage_Data*)lParam;
assert(data);
SetWindowLongPtr(hDlg, GWL_USERDATA, (LONG_PTR)data);
/* TODO: for some reason this doesn't work well e.g. when using
russion translation, the russian part of window title is garbage (?)
not russian text. Maybe I need to change the font ? */
win_set_textw(hDlg, _TRW("Change language"));
WCHAR *langName;
langList = GetDlgItem(hDlg, IDC_CHANGE_LANG_LANG_LIST);
int idx = 0;
for (int i=0; i < LANGS_COUNT; i++) {
langName = utf8_to_utf16(g_menuDefLang[i].m_title);
lb_append_stringw_no_sort(langList, langName);
free(langName);
if (g_menuDefLang[i].m_id == data->langId)
idx = i;
}
lb_set_selection(langList, idx);
SetFocus(langList);
return FALSE;
}
switch (message)
{
case WM_COMMAND:
data = (Dialog_ChangeLanguage_Data*)GetWindowLongPtr(hDlg, GWL_USERDATA);
assert(data);
if (HIWORD(wParam) == LBN_DBLCLK) {
assert(IDC_CHANGE_LANG_LANG_LIST == LOWORD(wParam));
langList = GetDlgItem(hDlg, IDC_CHANGE_LANG_LANG_LIST);
assert(langList == (HWND)lParam);
sel = lb_get_selection(langList);
data->langId = g_menuDefLang[sel].m_id;
EndDialog(hDlg, DIALOG_OK_PRESSED);
return FALSE;
}
switch (LOWORD(wParam))
{
case IDOK:
langList = GetDlgItem(hDlg, IDC_CHANGE_LANG_LANG_LIST);
sel = lb_get_selection(langList);
data->langId = g_menuDefLang[sel].m_id;
EndDialog(hDlg, DIALOG_OK_PRESSED);
return TRUE;
case IDCANCEL:
EndDialog(hDlg, DIALOG_CANCEL_PRESSED);
return TRUE;
}
break;
}
return FALSE;
}
/* Show "Change Language" dialog.
Returns language id (as stored in g_langs[]._langId) or -1 if the user
chose 'cancel' */
int Dialog_ChangeLanguge(HWND hwnd, int currLangId)
{
Dialog_ChangeLanguage_Data data;
data.langId = currLangId;
int dialogResult = DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_DIALOG_CHANGE_LANGUAGE), hwnd, Dialog_ChangeLanguage_Proc, (LPARAM)&data);
if (DIALOG_CANCEL_PRESSED == dialogResult)
return -1;
return data.langId;
}
static BOOL CALLBACK Dialog_NewVersion_Proc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
Dialog_NewVersion_Data * data;
WCHAR *txt;
if (WM_INITDIALOG == message)
{
/* TODO: intelligently center the dialog within the parent window? */
data = (Dialog_NewVersion_Data*)lParam;
assert(NULL != data);
SetWindowLongPtr(hDlg, GWL_USERDATA, (LONG_PTR)data);
win_set_textw(hDlg, _TRW("New version available."));
txt = wstr_printf(_TRW("You have version %s"), data->currVersion);
SetDlgItemTextW(hDlg, IDC_YOU_HAVE, txt);
free((void*)txt);
txt = wstr_printf(_TRW("New version %s is available. Download new version?"), data->newVersion);
SetDlgItemTextW(hDlg, IDC_NEW_AVAILABLE, txt);
free(txt);
SetDlgItemTextW(hDlg, IDC_SKIP_THIS_VERSION, _TRW("Skip this version"));
CheckDlgButton(hDlg, IDC_SKIP_THIS_VERSION, BST_UNCHECKED);
SetFocus(GetDlgItem(hDlg, IDOK));
return FALSE;
}
switch (message)
{
case WM_COMMAND:
data = (Dialog_NewVersion_Data*)GetWindowLongPtr(hDlg, GWL_USERDATA);
assert(data);
data->skipThisVersion= FALSE;
switch (LOWORD(wParam))
{
case IDOK:
if (BST_CHECKED == IsDlgButtonChecked(hDlg, IDC_SKIP_THIS_VERSION))
data->skipThisVersion= TRUE;
EndDialog(hDlg, DIALOG_OK_PRESSED);
return TRUE;
case IDCANCEL:
if (BST_CHECKED == IsDlgButtonChecked(hDlg, IDC_SKIP_THIS_VERSION))
data->skipThisVersion= TRUE;
EndDialog(hDlg, DIALOG_NO_PRESSED);
return TRUE;
case IDC_SKIP_THIS_VERSION:
return TRUE;
}
break;
}
return FALSE;
}
int Dialog_NewVersionAvailable(HWND hwnd, Dialog_NewVersion_Data *data)
{
int dialogResult = DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_DIALOG_NEW_VERSION), hwnd, Dialog_NewVersion_Proc, (LPARAM)data);
return dialogResult;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?