📄 dlgchpasskeyfilewizard.c
字号:
HRSRC hrsrc;
HGLOBAL hglb;
hrsrc = FindResource(
G_hInstance,
MAKEINTRESOURCE(ResourceID),
RT_DIALOG
);
hglb = LoadResource(G_hInstance, hrsrc);
dlgtempl = (DLGTEMPLATE*)LockResource(hglb);
return CreateDialogIndirectParam(
G_hInstance,
dlgtempl,
ParentHWND,
dlgChpassKeyfileWizard_PropSheetPageProc,
SUBTAB_FLAG
);
}
// =========================================================================
// The first time the user RNG is setup, it must use the designtime
// positioned placeholder. Subsequently, it can just resize it's width and
// depth itsself (having already got it's top border from the placeholder)
void _dlgChpassKeyfileWizard_ResizeUserRNG(
HWND hDlg,
BOOL usePlaceholder
)
{
HWND hWndTmp;
// We resize the userRNG such that it's as wide and deep as we
// can make it, but with the top as being where the top of the
// placeholder text was; this makes it easier to position on the
// dialog at design time
if (usePlaceholder)
{
SizeControlMaxWidth(hDlg, IDC_STATIC_USERRNGPLACEHOLDER);
SizeControlMaxDepth(hDlg, IDC_STATIC_USERRNGPLACEHOLDER);
hWndTmp = GetDlgItem(hDlg, IDC_STATIC_USERRNGPLACEHOLDER);
SizeWindowToOverlapWindow(hWndTmp, G_dlgChpassKeyfileWizard_UserRNG);
SetControlVisible(hDlg, IDC_STATIC_USERRNGPLACEHOLDER, FALSE);
}
else
{
SizeControlMaxWidth(hDlg, IDCTRL_USERRNG);
SizeControlMaxDepth(hDlg, IDCTRL_USERRNG);
}
}
// =========================================================================
BOOL CALLBACK dlgChpassKeyfileWizard_HandleMsg_WM_INITDIALOG(HWND hDlg, LPARAM lParam)
{
SHINITDLGINFO shidi;
int i;
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgChpassKeyfileWizard_HandleMsg_WM_INITDIALOG\n")));
// Setup globals...
// Don't recreate menu if it's already been done
if (G_dlgChpassKeyfileWizard_MenuBar == NULL)
{
G_dlgChpassKeyfileWizard_MenuBar = SetupMenu(hDlg, IDR_MENU_WIZARD);
}
for (i = 0; i < CHPASS_KEYFILEWIZARD_STEPS; i++)
{
G_dlgChpassKeyfileWizard_PageCompleted[i] = FALSE;
}
memset(
&G_dlgChpassKeyfileWizard_ChpassKeyfileParams,
0,
sizeof(G_dlgChpassKeyfileWizard_ChpassKeyfileParams)
);
//xxx - get rid of this?
// This isn't actually needed for property sheet dialog...
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = (
SHIDIF_DONEBUTTON |
SHIDIF_SIPDOWN |
SHIDIF_SIZEDLGFULLSCREEN
);
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
// Set userdata on the page being initialized; we use this to identify
// the different pages
// Because this procedure is called to initialize both the propertysheet
// pages *and* the dialogs (windows) created for the Password/Advanced tabs
// on the src/dest details propertysheet page, we ensure this isn't set
// for those windows.
// This is done by passing a flag lParam to them when they're created,
// and detecting it here
// Note: You will get a "Data Abort" error here if lParam is dereferenced
// here and it's NULL
if (lParam != SUBTAB_FLAG)
{
SetWindowLong(
hDlg,
GWL_USERDATA,
((LPPROPSHEETPAGE)lParam)->lParam
);
}
// Default values for controls...
SetDlgItemText(hDlg, IDC_EDIT_FILENAME, DEFAULT_FILENAME);
SetDlgItemText(hDlg, IDC_EDIT_PASSWORD, DEFAULT_PASSWORD);
SetDlgItemText(hDlg, IDC_EDIT_PASSWORDCONFIRM, DEFAULT_PASSWORD);
SetDlgItemInt(hDlg, IDC_EDIT_OFFSET, DEFAULT_OFFSET, TRUE);
// RNG select checkbox...
if (DEFAULT_RND_USERINPUT)
{
CheckDlgButton(
hDlg,
IDC_CHECK_RNGUSERINPUT,
BST_CHECKED
);
}
if (DEFAULT_RNG_MSCRYPTOAPI)
{
CheckDlgButton(
hDlg,
IDC_CHECK_RNGMSCRYPTOAPI,
BST_CHECKED
);
}
SetDlgItemInt(hDlg, IDC_EDIT_SALTLENGTH, DEFAULT_SALTLENGTH, TRUE);
SetDlgItemInt(hDlg, IDC_EDIT_KEYITERATIONS, DEFAULT_KEYITERATIONS, TRUE);
if (_dlgChpassKeyfileWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_WELCOME)
{
int titleString;
int descString;
SDUTextSetBold(hDlg, IDC_STATIC_WELCOME_TITLE, TRUE);
if (G_dlgChpassKeyfileWizard_DlgMode == DLGMODE_NEWKEYFILE)
{
titleString = IDS_STRING_WIZTITLE_NEWKEYFILE;
descString = IDS_STRING_WIZDESC_NEWKEYFILE;
}
else
{
titleString = IDS_STRING_WIZTITLE_CHPASS;
descString = IDS_STRING_WIZDESC_CHPASS;
}
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_WELCOME_TITLE,
titleString
);
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_WELCOME_DESC,
descString
);
}
else if (_dlgChpassKeyfileWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_SRCFILENAME)
{
SetStaticText(hDlg, IDC_STATIC_FILENAME, TEXT("Volume/keyfile:"));
if (G_dlgChpassKeyfileWizard_DlgMode == DLGMODE_NEWKEYFILE)
{
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTWIZNEWKEYFILE_SRCFILE
);
}
else
{
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTWIZCHPASS_SRCFILE
);
}
}
else if (_dlgChpassKeyfileWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_SRCDETAILS)
{
HWND tmpHWND;
TCITEM tci;
// Setup the tab control to get the WinCE look and feel...
tmpHWND = GetDlgItem(hDlg, IDC_TAB1);
SendMessage(tmpHWND, CCM_SETVERSION, COMCTL32_VERSION, 0);
tci.mask = TCIF_TEXT;
tci.pszText = TEXT("Password");
TabCtrl_InsertItem(tmpHWND, SRCDETAILSTAB_IDX_PASSWORD, &tci);
tci.mask = TCIF_TEXT;
tci.pszText = TEXT("Advanced");
TabCtrl_InsertItem(tmpHWND, SRCDETAILSTAB_IDX_ADVANCED, &tci);
// Create the contents for the two tabs
hSrcDetailsWndPassword = _dlgChpassKeyfileWizard_CreateDialogWindow(
tmpHWND,
IDD_NEWVOLWIZARD_PASSWORD
);
hSrcDetailsWndAdvanced = _dlgChpassKeyfileWizard_CreateDialogWindow(
tmpHWND,
IDD_VOL_ADV_OPTS
);
// Adjust controls for the context in which they will appear...
SetControlVisible(
hSrcDetailsWndAdvanced,
IDC_STATIC_MOUNTPOINT,
FALSE
);
SetControlVisible(
hSrcDetailsWndAdvanced,
IDC_EDIT_MOUNTPOINT,
FALSE
);
SetControlVisible(
hSrcDetailsWndPassword,
IDC_STATIC_PASSWORDCONFIRM,
FALSE
);
SetControlVisible(
hSrcDetailsWndPassword,
IDC_EDIT_PASSWORDCONFIRM,
FALSE
);
// Set defaults...
// Password...
SetDlgItemText(
hSrcDetailsWndPassword,
IDC_EDIT_PASSWORD,
DEFAULT_PASSWORD
);
if (G_dlgChpassKeyfileWizard_DlgMode == DLGMODE_NEWKEYFILE)
{
SetDlgItemString(
G_hInstance,
hSrcDetailsWndPassword,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTWIZNEWKEYFILE_SRCPASSWORD
);
}
else
{
SetDlgItemString(
G_hInstance,
hSrcDetailsWndPassword,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTWIZCHPASS_SRCPASSWORD
);
}
// Advanced...
SetDlgItemInt(
hSrcDetailsWndAdvanced,
IDC_EDIT_OFFSET,
DEFAULT_OFFSET,
TRUE
);
CheckDlgButton(
hSrcDetailsWndAdvanced,
IDC_CHECK_CDBATOFFSET,
BST_CHECKED
);
SetControlEnabled(
hSrcDetailsWndAdvanced,
IDC_CHECK_CDBATOFFSET,
FALSE
);
SetDlgItemInt(
hSrcDetailsWndAdvanced,
IDC_EDIT_SALTLENGTH,
DEFAULT_SALTLENGTH,
TRUE
);
SetDlgItemInt(
hSrcDetailsWndAdvanced,
IDC_EDIT_KEYITERATIONS,
DEFAULT_KEYITERATIONS,
TRUE
);
}
else if (_dlgChpassKeyfileWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_DESTFILENAME)
{
SetStaticText(hDlg, IDC_STATIC_FILENAME, TEXT("New keyfile:"));
// Note: Only used when creating a new keyfile
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTWIZNEWKEYFILE_DESTFILE
);
}
else if (_dlgChpassKeyfileWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_DESTDETAILS)
{
HWND tmpHWND;
TCITEM tci;
// Setup the tab control to get the WinCE look and feel...
tmpHWND = GetDlgItem(hDlg, IDC_TAB1);
SendMessage(tmpHWND, CCM_SETVERSION, COMCTL32_VERSION, 0);
tci.mask = TCIF_TEXT;
tci.pszText = TEXT("Password");
TabCtrl_InsertItem(tmpHWND, DESTDETAILSTAB_IDX_PASSWORD, &tci);
tci.mask = TCIF_TEXT;
tci.pszText = TEXT("Advanced");
TabCtrl_InsertItem(tmpHWND, DESTDETAILSTAB_IDX_ADVANCED, &tci);
// Create the contents for the two tabs
hDestDetailsWndPassword = _dlgChpassKeyfileWizard_CreateDialogWindow(
tmpHWND,
IDD_NEWVOLWIZARD_PASSWORD
);
hDestDetailsWndAdvanced = _dlgChpassKeyfileWizard_CreateDialogWindow(
tmpHWND,
IDD_VOL_ADV_OPTS
);
SetControlVisible(
hDestDetailsWndAdvanced,
IDC_STATIC_MOUNTPOINT,
FALSE
);
SetControlVisible(
hDestDetailsWndAdvanced,
IDC_EDIT_MOUNTPOINT,
FALSE
);
// Set defaults...
// Password...
SetDlgItemText(
hDestDetailsWndPassword,
IDC_EDIT_PASSWORD,
DEFAULT_PASSWORD
);
SetDlgItemText(
hDestDetailsWndPassword,
IDC_EDIT_PASSWORDCONFIRM,
DEFAULT_PASSWORD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -