📄 ceditorwindow.cpp
字号:
BOOL
CDiskProperties::OnCommand(
PGPUInt16 notifyCode,
PGPUInt16 itemId,
HWND ctrl)
{
switch (itemId)
{
case IDC_MOUNTSTART_CHECK:
OnMountStartupCheck();
return TRUE;
case IDC_OVERRIDE_CHECK:
OnOverrideCheck();
return TRUE;
case IDC_REENCRYPT_BUTTON:
OnReEncryptButton();
return TRUE;
case IDC_UNMOUNT_CHECK:
OnAutoUnmountCheck();
return TRUE;
}
return CDialog::OnCommand(notifyCode, itemId, ctrl);
}
void
CDiskProperties::OnContextMenu(HWND menuWnd, CPoint coords)
{
CHelpShower::ShowContextMenu(menuWnd, DiskPropertiesDlgHelpIDs);
}
void
CDiskProperties::OnHelp(HELPINFO *pInfo)
{
CHelpShower::ShowForControl(static_cast<HWND>(pInfo->hItemHandle),
DiskPropertiesDlgHelpIDs);
}
BOOL
CDiskProperties::OnInitDialog(HWND focusCtrl)
{
CDialog::OnInitDialog(focusCtrl);
mReEncryptButton.Subclass(GetDlgItem(IDC_REENCRYPT_BUTTON));
mMountStartupCheck.Subclass(GetDlgItem(IDC_MOUNTSTART_CHECK));
mOverrideCheck.Subclass(GetDlgItem(IDC_OVERRIDE_CHECK));
mAutoUnmountCheck.Subclass(GetDlgItem(IDC_UNMOUNT_CHECK));
mCurAlgoEdit.Subclass(GetDlgItem(IDC_CURALGO_EDIT));
mMinutesEdit.Subclass(GetDlgItem(IDC_MINUTES_EDIT));
mMinutesText.Subclass(GetDlgItem(IDC_MINUTES_TEXT));
mMinutesUDCtrl.Subclass(GetDlgItem(IDC_MINUTES_UDCTRL));
InitControls();
Center();
SetForegroundWindow();
return TRUE;
}
// Class CEditorWindow variables
CIcon CEditorWindow::WindowIcon;
CCursor CEditorWindow::WindowCursor;
// Class CEditorWindow member functions
CEditorWindow::CEditorWindow() : mPContext(NULL)
{
mPPrefs = new EditorWindowPrefs;
}
CEditorWindow::~CEditorWindow()
{
delete mPPrefs;
}
void
CEditorWindow::Display(
const CPGPdiskContext& context,
const char *path,
HWND owner)
{
pgpAssertStrValid(path);
pgpAssert(IsWindow(owner));
mPContext = &context;
mPath = path;
ReadWindowPrefs();
// Load the accelerator.
mAccel.Load(UModuleInstance::Get(), MAKEINTRESOURCE(IDR_EDITOR_ACCEL));
// Create the menu.
mMainMenu.Load(UModuleInstance::Get(), MAKEINTRESOURCE(IDR_EDITOR_MENU));
// Create the window.
CPath cpath(path), fileName;
cpath.GetDisplayFileName(fileName);
CString title;
title.Format(UCommonStrings::Get(UCommonStrings::kEditorWindowTitle),
fileName.Get());
Create(kEditorWindowClassName, NULL, title, WS_OVERLAPPEDWINDOW, 0,
mPPrefs->posX, mPPrefs->posY, mPPrefs->width, mPPrefs->height,
owner, mMainMenu);
// Enter simple modal loop.
ShowModal(mAccel);
// flush prefs
try
{
CPGPclPrefs prefs(context.PGPclPrefs());
prefs.Flush();
}
catch (CComboError&) { }
}
void
CEditorWindow::InitClass()
{
WindowCursor.Load(NULL, IDC_ARROW, TRUE);
WindowIcon.Load(UModuleInstance::Get(), MAKEINTRESOURCE(IDI_EDITICON));
RegisterClass(kEditorWindowClassName, 0, 0, 0, WindowIcon, NULL,
WindowCursor, reinterpret_cast<HBRUSH>(COLOR_BTNFACE + 1));
}
void
CEditorWindow::CleanupClass()
{
UnregisterClass(kEditorWindowClassName);
}
void
CEditorWindow::ReadWindowPrefs()
{
CPGPclPrefs prefs(mPContext->PGPclPrefs());
CPGPData prefData;
try
{
prefs.GetData(kPGPPrefDiskEditorWinPos, prefData);
if (prefData.Size() < sizeof(*mPPrefs))
THROW_PGPERROR(kPGPError_BadParams);
pgpCopyMemory(prefData.Get(), mPPrefs, sizeof(*mPPrefs));
}
catch (CComboError&)
{
mPPrefs->posX = kDefaultPosX;
mPPrefs->posY = kDefaultPosY;
mPPrefs->width = kDefaultWidth;
mPPrefs->height = kDefaultHeight;
mPPrefs->diskUserColumns = kDefaultDiskUserColumns;
mPPrefs->showToolbar = kDefaultShowToolbar;
mPPrefs->largeButtons = kDefaultLargeButtons;
mPPrefs->showText = kDefaultShowText;
mPPrefs->toolTips = kDefaultToolTips;
prefs.SetData(kPGPPrefDiskEditorWinPos, prefData);
}
}
void
CEditorWindow::WriteWindowPrefs() const
{
CRect wndRect;
GetWindowRect(wndRect);
mPPrefs->posX = wndRect.Left();
mPPrefs->posY = wndRect.Top();
mPPrefs->width = wndRect.Width();
mPPrefs->height = wndRect.Height();
CPGPclPrefs prefs(mPContext->PGPclPrefs());
CPGPData prefData(const_cast<EditorWindowPrefs *>(mPPrefs),
sizeof(*mPPrefs));
prefs.SetData(kPGPPrefDiskEditorWinPos, prefData);
}
void
CEditorWindow::ShowStatusBarHelp(PGPUInt16 ctrlId)
{
using namespace UCommonStrings;
CommonString stringID;
switch (ctrlId)
{
// The editor main menu/toolbar.
case IDM_MOUNT:
stringID = kEditorMountHelp;
break;
case IDM_UNMOUNT:
stringID = kEditorUnmountHelp;
break;
case IDM_REENCRYPT:
stringID = kEditorReEncryptHelp;
break;
case IDM_DISKPROPS:
stringID = kEditorPropertiesHelp;
break;
case IDM_DISKOPTIONS:
stringID = kEditorOptionsHelp;
break;
case IDM_EXIT:
stringID = kEditorExitHelp;
break;
case IDM_ADDUSER:
stringID = kEditorAddUserHelp;
break;
case IDM_REMOVEUSER:
stringID = kEditorRemUserHelp;
break;
case IDM_MOUNTUSING:
stringID = kEditorMountUsingHelp;
break;
case IDM_CHANGEPASS:
stringID = kEditorChangePassHelp;
break;
case IDM_SETASADMIN:
stringID = kEditorSetAsAdminHelp;
break;
case IDM_TOGGLEDISABLE:
stringID = kEditorToggleDisableHelp;
break;
case IDM_TOGGLERO:
stringID = kEditorToggleROHelp;
break;
case IDM_VIEWKIND:
stringID = kEditorViewKindHelp;
break;
case IDM_VIEWRO:
stringID = kEditorViewROHelp;
break;
case IDM_VIEWTOOLBAR:
stringID = kEditorViewToolbarHelp;
break;
case IDM_HELP_CONTENTS:
stringID = kEditorHelpContentsHelp;
break;
case IDM_ABOUTPGP:
stringID = kEditorAboutPGPHelp;
break;
// The disk users context menu.
case IDM_LOOKUP:
stringID = kEditorLookupHelp;
break;
// The toolbar context menu.
case IDM_LARGEBUTTONS:
stringID = kEditorLargeButtonsHelp;
break;
case IDM_SHOWTEXT:
stringID = kEditorShowTextHelp;
break;
case IDM_SHOWTOOLTIPS:
stringID = kEditorShowTooltipsHelp;
break;
default:
mStatusBar.SetText(0, 0, "");
return;
}
mStatusBar.SetText(0, 0, const_cast<char *>(Get(stringID)));
}
void
CEditorWindow::ResizeUsersView()
{
CRect clientRect;
GetClientRect(clientRect);
CRect rebarRect;
if (mPPrefs->showToolbar)
{
mTBRebar.GetWindowRect(rebarRect);
ScreenToClient(rebarRect);
}
CRect statusBarRect;
mStatusBar.GetWindowRect(statusBarRect);
ScreenToClient(statusBarRect);
CRect usersRect;
usersRect.Left() = kXMarginDiskUsers;
usersRect.Top() = rebarRect.Bottom() + kYMarginToolbarDK;
usersRect.Right() = clientRect.Right() - kXMarginDiskUsers;
usersRect.Bottom() = statusBarRect.Top() - kYMarginDKStatusBar;
mUsersView.MoveWindow(usersRect.Left(), usersRect.Top(),
usersRect.Width(), usersRect.Height());
}
void
CEditorWindow::ResizeToolbar()
{
CRect clientRect;
GetClientRect(clientRect);
// Set rebar size.
mToolbar.AutoSize();
PGPUInt16 buttonHeight, buttonWidth;
mToolbar.GetButtonSize(buttonWidth, buttonHeight);
REBARBANDINFO rbbInfo;
pgpClearMemory(&rbbInfo, sizeof(rbbInfo));
rbbInfo.cbSize = sizeof(rbbInfo);
rbbInfo.fMask = RBBIM_CHILDSIZE | RBBIM_SIZE;
rbbInfo.cxMinChild = 0;
rbbInfo.cyMinChild = buttonHeight + 4;
rbbInfo.cx = clientRect.Right() - kXMarginRebar - 1;
mTBRebar.SetBandInfo(0, rbbInfo);
mTBRebar.MoveWindow(kXMarginRebar, kYMarginRebar, rbbInfo.cx,
buttonHeight + 4);
mToolbar.AutoSize();
}
void
CEditorWindow::ReFillUsersView()
{
CPGPdiskDisk disk;
disk.Open(*mPContext, mPath, TRUE);
CPGPdiskUserSet diskUsers;
disk.ExportUserSet(diskUsers);
mUsersView.Fill(mPContext, diskUsers);
}
void
CEditorWindow::CreateUsersView()
{
mUsersView.Create(Handle(), IDC_EDITORKEYS_VIEW);
ResizeUsersView();
ReFillUsersView();
mUsersView.SetActiveColumns(mPPrefs->diskUserColumns);
mUsersView.ShowWindow(SW_SHOW);
}
void
CEditorWindow::CreateStatusBar()
{
mStatusBar.Create(Handle(), IDC_EDITOR_STATUSBAR);
}
void
CEditorWindow::CreateToolbar()
{
using namespace UCommonStrings;
// Create the rebar.
mTBRebar.Create(Handle(), IDC_EDITOR_REBAR, WS_BORDER | CCS_NODIVIDER |
CCS_NOPARENTALIGN | CCS_NORESIZE | RBS_VARHEIGHT | RBS_BANDBORDERS |
RBS_FIXEDORDER);
REBARINFO rbInfo;
pgpClearMemory(&rbInfo, sizeof(rbInfo));
rbInfo.cbSize = sizeof(rbInfo);
rbInfo.fMask = 0;
mTBRebar.SetBarInfo(rbInfo);
// Create the toolbar.
mToolbar.Create(mTBRebar.Handle(), IDC_EDITOR_TOOLBAR, CCS_NODIVIDER |
TBSTYLE_FLAT | (mPPrefs->toolTips ? TBSTYLE_TOOLTIPS : 0));
mToolbar.SetButtonWidth(0, kMaxButtonWidth);
// Create private toolbar structures.
ToolbarButton *pMount = new ToolbarButton;
mButtons.AddTail(pMount);
ToolbarButton *pUnmount = new ToolbarButton;
mButtons.AddTail(pUnmount);
ToolbarButton *pProperties = new ToolbarButton;
mButtons.AddTail(pProperties);
ToolbarButton *pSep1 = new ToolbarButton;
mButtons.AddTail(pSep1);
ToolbarButton *pAdd = new ToolbarButton;
mButtons.AddTail(pAdd);
ToolbarButton *pRemUser = new ToolbarButton;
mButtons.AddTail(pRemUser);
// Load appropriate imagelist.
CDC dc;
dc.AttachFromWindow(NULL, TRUE); // DC for desktop
PGPUInt32 numBits = dc.GetDeviceCaps(BITSPIXEL) *
dc.GetDeviceCaps(PLANES);
PGPUInt32 colorFlag, bitmapID;
if (numBits <= 8)
{
colorFlag = ILC_COLOR4;
if (mPPrefs->largeButtons)
bitmapID = IDB_TOOLBAR4B;
else
bitmapID = IDB_TOOLBAR4BSM;
}
else
{
colorFlag = ILC_COLOR8;
if (mPPrefs->largeButtons)
bitmapID = IDB_TOOLBAR8B;
else
bitmapID = IDB_TOOLBAR8BSM;
}
CBitmap bitmap(UModuleInstance::Get(), MAKEINTRESOURCE(bitmapID));
if (mPPrefs->largeButtons)
{
mImages.Create(kXBigImage, kYBigImage, ILC_MASK | colorFlag,
kNumToolbarButtons, 0);
}
else
{
mImages.Create(kXSmallImage, kYSmallImage, ILC_MASK | colorFlag,
kNumToolbarButtons, 0);
}
mImages.AddMasked(bitmap, ImageIDs::kMaskColor);
mToolbar.SetImageList(mImages);
// Add mount button.
pMount->tbButton.iBitmap = ImageIDs::kPGPdiskMount;
pMount->tbButton.idCommand = IDM_MOUNT;
pMount->tbButton.fsState = TBSTATE_ENABLED;
pMount->tbButton.fsStyle = TBSTYLE_BUTTON;
pMount->tbButton.dwData = reinterpret_cast<PGPUInt32>(pMount);
pMount->tbButton.iString = (mPPrefs->showText ?
mToolbar.AddString(0, Get(kEditorMountCaption)) : NULL);
pMount->index = mToolbar.AddButtons(1, &pMount->tbButton);
// Add unmount button.
pUnmount->tbButton.iBitmap = ImageIDs::kPGPdiskUnmount;
pUnmount->tbButton.idCommand = IDM_UNMOUNT;
pUnmount->tbButton.fsState = TBSTATE_ENABLED;
pUnmount->tbButton.fsStyle = TBSTYLE_BUTTON;
pUnmount->tbButton.dwData = reinterpret_cast<PGPUInt32>(pUnmount);
pUnmount->tbButton.iString = (mPPrefs->showText ?
mToolbar.AddString(0, Get(kEditorUnmountCaption)) : NULL);
pUnmount->index = mToolbar.AddButtons(1, &pUnmount->tbButton);
// Add properties button.
pProperties->tbButton.iBitmap = ImageIDs::kPGPdiskProps;
pProperties->tbButton.idCommand = IDM_DISKPROPS;
pProperties->tbButton.fsState = TBSTATE_ENABLED;
pProperties->tbButton.fsStyle = TBSTYLE_BUTTON;
pProperties->tbButton.dwData = reinterpret_cast<PGPUInt32>(
pProperties);
pProperties->tbButton.iString = (mPPrefs->showText ?
mToolbar.AddString(0, Get(kEditorPropertiesCaption)) : NULL);
pProperties->index = mToolbar.AddButtons(1, &pProperties->tbButton);
// Add separator.
pSep1->tbButton.iBitmap = 0;
pSep1->tbButton.idCommand = 0;
pSep1->tbButton.fsState = 0;
pSep1->tbButton.fsStyle = TBSTYLE_SEP;
pSep1->tbButton.dwData = reinterpret_cast<PGPUInt32>(pSep1);
pSep1->tbButton.iString = NULL;
pSep1->index = mToolbar.AddButtons(1, &pSep1->tbButton);
// Add add user button.
pAdd->tbButton.iBitmap = ImageIDs::kPGPdiskAddUser;
pAdd->tbButton.idCommand = IDM_ADDUSER;
pAdd->tbButton.fsState = TBSTATE_ENABLED;
pAdd->tbButton.fsStyle = TBSTYLE_BUTTON;
pAdd->tbButton.dwData = reinterpret_cast<PGPUInt32>(pAdd);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -