📄 dlgnewvolwizard.c
字号:
switch (uMsg)
{
case PSCB_GETVERSION:
{
// We do *NOT* set the version here. The resize causes the page
// to be displayed *over* the property sheet's tabs. Setting
// this version prevents this from working correctly
// retval = COMCTL32_VERSION;
break;
}
}
return retval;
}
// =========================================================================
// 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 _dlgNewVolWizard_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_dlgNewVolWizard_UserRNG);
SetControlVisible(hDlg, IDC_STATIC_USERRNGPLACEHOLDER, FALSE);
}
else
{
SizeControlMaxWidth(hDlg, IDCTRL_USERRNG);
SizeControlMaxDepth(hDlg, IDCTRL_USERRNG);
}
}
// =========================================================================
BOOL CALLBACK dlgNewVolWizard_HandleMsg_WM_INITDIALOG(HWND hDlg, LPARAM lParam)
{
SHINITDLGINFO shidi;
int i;
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgNewVolWizard_HandleMsg_WM_INITDIALOG\n")));
// Setup globals...
// Don't recreate menu if it's already been done
if (G_dlgNewVolWizard_MenuBar == NULL)
{
G_dlgNewVolWizard_MenuBar = SetupMenu(hDlg, IDR_MENU_WIZARD);
}
for (i = 0; i < NEWVOLWIZARD_STEPS; i++)
{
G_dlgNewVolWizard_PageCompleted[i] = FALSE;
}
memset(
&G_dlgNewVolWizard_NewVolParams,
0,
sizeof(G_dlgNewVolWizard_NewVolParams)
);
//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
// Note: You will get a "Data Abort" error here if lParam is dereferenced
// here and it's NULL
SetWindowLong(
hDlg,
GWL_USERDATA,
((LPPROPSHEETPAGE)lParam)->lParam
);
// Default values for controls...
SetDlgItemText(hDlg, IDC_EDIT_FILENAME, DEFAULT_FILENAME);
SetDlgItemText(hDlg, IDC_EDIT_KEYFILE, DEFAULT_KEYFILE);
SetDlgItemText(hDlg, IDC_EDIT_PASSWORD, DEFAULT_PASSWORD);
SetDlgItemText(hDlg, IDC_EDIT_PASSWORDCONFIRM, DEFAULT_PASSWORD);
SetDlgItemInt(hDlg, IDC_EDIT_OFFSET, DEFAULT_OFFSET, TRUE);
// CDB location radiobutton...
if (DEFAULT_CDBSTOREDINVOLUME == TRUE)
{
CheckDlgButton(
hDlg,
IDC_RADIO_CDBINVOLUME,
BST_CHECKED
);
}
else
{
CheckDlgButton(
hDlg,
IDC_RADIO_CDBINKEYFILE,
BST_CHECKED
);
}
// Use volume IV checkbox...
if (DEFAULT_VOLUMEIV == TRUE)
{
CheckDlgButton(
hDlg,
IDC_CHECK_VOLUMEIV,
BST_CHECKED
);
}
else
{
CheckDlgButton(
hDlg,
IDC_CHECK_VOLUMEIV,
BST_UNCHECKED
);
}
// RNG location 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);
SetDlgItemInt(hDlg, IDC_EDIT_SIZE, DEFAULT_VOLUME_SIZE, TRUE);
SetDlgItemInt(hDlg, IDC_EDIT_MASTERKEYLEN, DEFAULT_CYPHERKEYLENGTH, TRUE);
if (_dlgNewVolWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_WELCOME)
{
SDUTextSetBold(hDlg, IDC_STATIC_WELCOME_TITLE, TRUE);
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_WELCOME_TITLE,
IDS_STRING_WIZTITLE_NEWVOL
);
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_WELCOME_DESC,
IDS_STRING_WIZDESC_NEWVOL
);
}
else if (_dlgNewVolWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_FILENAME)
{
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTR_FILENAME
);
}
else if (_dlgNewVolWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_OFFSET)
{
// Make warning more prominent...
SizeControlMaxWidthBorder(
hDlg,
IDC_STATIC_WARNING_BLOCK_1,
FREEOTFE_DLG_BORDER
);
SDUTextSetBold(hDlg, IDC_STATIC_WARNING_BLOCK_1, TRUE);
SDUTextSetUnderline(hDlg, IDC_STATIC_WARNING_BLOCK_1, TRUE);
SizeControlMaxWidthBorder(
hDlg,
IDC_STATIC_WARNING_BLOCK_2,
FREEOTFE_DLG_BORDER
);
SDUTextSetBold(hDlg, IDC_STATIC_WARNING_BLOCK_2, TRUE);
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTR_OFFSET
);
}
else if (_dlgNewVolWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_SIZE)
{
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTR_SIZE
);
}
else if (_dlgNewVolWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_HASHCYPHERIV)
{
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTR_HASHCYPHERIV
);
}
else if (_dlgNewVolWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_MASTERKEYLEN)
{
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTR_MASTERKEYLEN
);
}
else if (_dlgNewVolWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_RNGSELECT)
{
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTR_RNGSELECT
);
}
else if (_dlgNewVolWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_RNGMOUSEMOVEMENT)
{
G_dlgNewVolWizard_UserRNG = CreateWindow(
USERRNG_CONTROL, // Class name
USERRNG_CONTROL, // Window title
(WS_VISIBLE | WS_BORDER), // Style
CW_USEDEFAULT, // X
CW_USEDEFAULT, // Y
CW_USEDEFAULT, // Width
CW_USEDEFAULT, // Height
hDlg, // Parent window
(HMENU)IDCTRL_USERRNG, // Menu/CtrlID
G_hInstance,
NULL
);
if (G_dlgNewVolWizard_UserRNG == NULL)
{
MsgError(hDlg, TEXT("Unable to create user RNG"));
}
else
{
_dlgNewVolWizard_ResizeUserRNG(hDlg, TRUE);
}
SetDlgItemInt(
hDlg,
IDC_STATIC_USERRNG_STORED,
G_dlgNewVolWizard_NewVolParams.RandomPoolFilled_UserInput,
TRUE
);
SetDlgItemInt(
hDlg,
IDC_STATIC_USERRNG_REQUIRED,
(sizeof(G_dlgNewVolWizard_NewVolParams.RandomPool_UserInput) * 8),
TRUE
);
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTR_RNGMOUSEMOVEMENT
);
}
else if (_dlgNewVolWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_PASSWORD)
{
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTR_PASSWORD
);
}
else if (_dlgNewVolWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_SALT)
{
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTR_SALT
);
}
else if (_dlgNewVolWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_CDBLOCATION)
{
SetDlgItemString(
G_hInstance,
hDlg,
IDC_STATIC_INSTRUCTION,
IDS_STRING_INSTR_CDBLOCATION
);
}
SizeControlMaxWidthBorder(
hDlg,
IDC_STATIC_INSTRUCTION,
FREEOTFE_DLG_BORDER
);
SizeControlMaxDepth(hDlg, IDC_STATIC_INSTRUCTION);
_dlgNewVolWizard_PopulateComboboxes(hDlg);
_dlgNewVolWizard_EnableDisableControls(hDlg);
// Set menu buttons as on the first page
_dlgNewVolWizard_SetWizardButtons(0);
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgNewVolWizard_HandleMsg_WM_INITDIALOG\n")));
return TRUE;
}
// =========================================================================
// SelectedUserData - If not NULL, will be set to the data associated with
// the currently selected item
// Returns TRUE/FALSE on success/failure
BOOL dlgNewVolWizard_Combobox_GetItem(
HWND hDlg,
UINT ComboboxID,
void** SelectedUserData
)
{
BOOL retval = FALSE;
LRESULT itemIdx;
LRESULT lResult;
itemIdx = SendMessage(
GetDlgItem(hDlg, ComboboxID),
(UINT)CB_GETCURSEL,
0, // From API docs, must be zero
0
);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -