mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 18:03:33 +00:00
Bug 5531: [PATCH] regedit: cut, copy, paste, etc. on hexedit by Katayama Hirofumi
svn path=/trunk/; revision=48334
This commit is contained in:
parent
35efa046d1
commit
1a92fc2831
29 changed files with 508 additions and 27 deletions
|
@ -587,8 +587,8 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
pt.x = pt.y = 0;
|
pt.x = pt.y = 0;
|
||||||
}
|
|
||||||
ClientToScreen(pChildWnd->hListWnd, &pt);
|
ClientToScreen(pChildWnd->hListWnd, &pt);
|
||||||
|
}
|
||||||
if(i == -1)
|
if(i == -1)
|
||||||
{
|
{
|
||||||
TrackPopupMenu(GetSubMenu(hPopupMenus, PM_NEW), TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);
|
TrackPopupMenu(GetSubMenu(hPopupMenus, PM_NEW), TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);
|
||||||
|
|
|
@ -47,9 +47,11 @@ typedef struct
|
||||||
|
|
||||||
INT SelStart;
|
INT SelStart;
|
||||||
INT SelEnd;
|
INT SelEnd;
|
||||||
BOOL SelOnField;
|
|
||||||
} HEXEDIT_DATA, *PHEXEDIT_DATA;
|
} HEXEDIT_DATA, *PHEXEDIT_DATA;
|
||||||
|
|
||||||
|
static const TCHAR ClipboardFormatName[] = TEXT("RegEdit_HexData");
|
||||||
|
static UINT ClipboardFormatID = 0;
|
||||||
|
|
||||||
/* hit test codes */
|
/* hit test codes */
|
||||||
#define HEHT_LEFTMARGIN (0x1)
|
#define HEHT_LEFTMARGIN (0x1)
|
||||||
#define HEHT_ADDRESS (0x2)
|
#define HEHT_ADDRESS (0x2)
|
||||||
|
@ -67,6 +69,8 @@ RegisterHexEditorClass(HINSTANCE hInstance)
|
||||||
{
|
{
|
||||||
WNDCLASSEX WndClass;
|
WNDCLASSEX WndClass;
|
||||||
|
|
||||||
|
ClipboardFormatID = RegisterClipboardFormat(ClipboardFormatName);
|
||||||
|
|
||||||
ZeroMemory(&WndClass, sizeof(WNDCLASSEX));
|
ZeroMemory(&WndClass, sizeof(WNDCLASSEX));
|
||||||
WndClass.cbSize = sizeof(WNDCLASSEX);
|
WndClass.cbSize = sizeof(WNDCLASSEX);
|
||||||
WndClass.style = CS_DBLCLKS;
|
WndClass.style = CS_DBLCLKS;
|
||||||
|
@ -218,7 +222,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO
|
||||||
if(ScrollPos + First == 0)
|
if(ScrollPos + First == 0)
|
||||||
{
|
{
|
||||||
/* draw address */
|
/* draw address */
|
||||||
_stprintf(addr, _T("%04X"), 0);
|
wsprintf(addr, TEXT("%04X"), 0);
|
||||||
TextOut(hDC, hed->LeftMargin, First * hed->LineHeight, addr, 4);
|
TextOut(hDC, hed->LeftMargin, First * hed->LineHeight, addr, 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -240,7 +244,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO
|
||||||
dx = hed->LeftMargin;
|
dx = hed->LeftMargin;
|
||||||
|
|
||||||
/* draw address */
|
/* draw address */
|
||||||
_stprintf(addr, _T("%04lX"), linestart);
|
wsprintf(addr, TEXT("%04lX"), linestart);
|
||||||
TextOut(hDC, dx, dy, addr, 4);
|
TextOut(hDC, dx, dy, addr, 4);
|
||||||
|
|
||||||
dx += ((4 + hed->AddressSpacing) * hed->CharWidth);
|
dx += ((4 + hed->AddressSpacing) * hed->CharWidth);
|
||||||
|
@ -260,7 +264,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO
|
||||||
rct.left += dh;
|
rct.left += dh;
|
||||||
rct.right += dh;
|
rct.right += dh;
|
||||||
|
|
||||||
_stprintf(hex, _T("%02X"), *(current++));
|
wsprintf(hex, TEXT("%02X"), *(current++));
|
||||||
if (i0 <= i && i < i1)
|
if (i0 <= i && i < i1)
|
||||||
{
|
{
|
||||||
rct2.left = dx;
|
rct2.left = dx;
|
||||||
|
@ -285,7 +289,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO
|
||||||
i = isave;
|
i = isave;
|
||||||
for(x = 0; x < hed->ColumnsPerLine && current < end; x++)
|
for(x = 0; x < hed->ColumnsPerLine && current < end; x++)
|
||||||
{
|
{
|
||||||
_stprintf(hex, _T("%C"), *(current++));
|
wsprintf(hex, _T("%C"), *(current++));
|
||||||
hex[0] = ((hex[0] & _T('\x007f')) >= _T(' ') ? hex[0] : _T('.'));
|
hex[0] = ((hex[0] & _T('\x007f')) >= _T(' ') ? hex[0] : _T('.'));
|
||||||
if (i0 <= i && i < i1)
|
if (i0 <= i && i < i1)
|
||||||
{
|
{
|
||||||
|
@ -415,6 +419,149 @@ HEXEDIT_IndexFromPoint(PHEXEDIT_DATA hed, POINTS pt, DWORD Hit, POINT *EditPos,
|
||||||
return Index;
|
return Index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
HEXEDIT_Copy(PHEXEDIT_DATA hed)
|
||||||
|
{
|
||||||
|
PBYTE pb, buf;
|
||||||
|
UINT cb;
|
||||||
|
INT i0, i1;
|
||||||
|
HGLOBAL hGlobal;
|
||||||
|
|
||||||
|
if (hed->SelStart < hed->SelEnd)
|
||||||
|
{
|
||||||
|
i0 = hed->SelStart;
|
||||||
|
i1 = hed->SelEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i0 = hed->SelEnd;
|
||||||
|
i1 = hed->SelStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
cb = i1 - i0;
|
||||||
|
if (cb == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
hGlobal = GlobalAlloc(GHND | GMEM_SHARE, cb + sizeof(DWORD));
|
||||||
|
if (hGlobal == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pb = GlobalLock(hGlobal);
|
||||||
|
if (pb)
|
||||||
|
{
|
||||||
|
*(PDWORD)pb = cb;
|
||||||
|
pb += sizeof(DWORD);
|
||||||
|
buf = (PBYTE) LocalLock(hed->hBuffer);
|
||||||
|
if (buf)
|
||||||
|
{
|
||||||
|
CopyMemory(pb, buf + i0, cb);
|
||||||
|
LocalUnlock(hed->hBuffer);
|
||||||
|
}
|
||||||
|
GlobalUnlock(hGlobal);
|
||||||
|
|
||||||
|
if (OpenClipboard(hed->hWndSelf))
|
||||||
|
{
|
||||||
|
EmptyClipboard();
|
||||||
|
SetClipboardData(ClipboardFormatID, hGlobal);
|
||||||
|
CloseClipboard();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
GlobalFree(hGlobal);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
HEXEDIT_Delete(PHEXEDIT_DATA hed)
|
||||||
|
{
|
||||||
|
PBYTE buf;
|
||||||
|
INT i0, i1;
|
||||||
|
UINT bufsize;
|
||||||
|
|
||||||
|
if (hed->SelStart < hed->SelEnd)
|
||||||
|
{
|
||||||
|
i0 = hed->SelStart;
|
||||||
|
i1 = hed->SelEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i0 = hed->SelEnd;
|
||||||
|
i1 = hed->SelStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i0 != i1)
|
||||||
|
{
|
||||||
|
bufsize = (hed->hBuffer ? LocalSize(hed->hBuffer) : 0);
|
||||||
|
buf = (PBYTE) LocalLock(hed->hBuffer);
|
||||||
|
if (buf)
|
||||||
|
{
|
||||||
|
MoveMemory(buf + i0, buf + i1, bufsize - i1);
|
||||||
|
LocalUnlock(hed->hBuffer);
|
||||||
|
}
|
||||||
|
HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize - (i1 - i0));
|
||||||
|
hed->InMid = FALSE;
|
||||||
|
hed->Index = hed->SelStart = hed->SelEnd = i0;
|
||||||
|
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
|
||||||
|
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
|
||||||
|
InvalidateRect(hed->hWndSelf, NULL, TRUE);
|
||||||
|
HEXEDIT_MoveCaret(hed, TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
HEXEDIT_Paste(PHEXEDIT_DATA hed)
|
||||||
|
{
|
||||||
|
HGLOBAL hGlobal;
|
||||||
|
UINT bufsize;
|
||||||
|
PBYTE pb, buf;
|
||||||
|
DWORD cb;
|
||||||
|
|
||||||
|
HEXEDIT_Delete(hed);
|
||||||
|
bufsize = (hed->hBuffer ? LocalSize(hed->hBuffer) : 0);
|
||||||
|
|
||||||
|
if (OpenClipboard(hed->hWndSelf))
|
||||||
|
{
|
||||||
|
hGlobal = GetClipboardData(ClipboardFormatID);
|
||||||
|
if (hGlobal != NULL)
|
||||||
|
{
|
||||||
|
pb = (PBYTE) GlobalLock(hGlobal);
|
||||||
|
cb = *(PDWORD) pb;
|
||||||
|
pb += sizeof(DWORD);
|
||||||
|
HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize + cb);
|
||||||
|
buf = (PBYTE) LocalLock(hed->hBuffer);
|
||||||
|
if (buf)
|
||||||
|
{
|
||||||
|
MoveMemory(buf + hed->Index + cb, buf + hed->Index,
|
||||||
|
bufsize - hed->Index);
|
||||||
|
CopyMemory(buf + hed->Index, pb, cb);
|
||||||
|
LocalUnlock(hed->hBuffer);
|
||||||
|
}
|
||||||
|
GlobalUnlock(hGlobal);
|
||||||
|
}
|
||||||
|
CloseClipboard();
|
||||||
|
}
|
||||||
|
InvalidateRect(hed->hWndSelf, NULL, TRUE);
|
||||||
|
HEXEDIT_MoveCaret(hed, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
HEXEDIT_Cut(PHEXEDIT_DATA hed)
|
||||||
|
{
|
||||||
|
HEXEDIT_Copy(hed);
|
||||||
|
HEXEDIT_Delete(hed);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
HEXEDIT_SelectAll(PHEXEDIT_DATA hed)
|
||||||
|
{
|
||||||
|
INT bufsize;
|
||||||
|
|
||||||
|
bufsize = (hed->hBuffer ? (INT) LocalSize(hed->hBuffer) : 0);
|
||||||
|
hed->Index = hed->SelStart = 0;
|
||||||
|
hed->SelEnd = bufsize;
|
||||||
|
InvalidateRect(hed->hWndSelf, NULL, TRUE);
|
||||||
|
HEXEDIT_MoveCaret(hed, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
/*** Control specific messages ************************************************/
|
/*** Control specific messages ************************************************/
|
||||||
|
|
||||||
static LRESULT
|
static LRESULT
|
||||||
|
@ -808,19 +955,18 @@ HEXEDIT_WM_LBUTTONDOWN(PHEXEDIT_DATA hed, INT Buttons, POINTS Pt)
|
||||||
|
|
||||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||||
{
|
{
|
||||||
if (hed->SelOnField)
|
if (hed->EditingField)
|
||||||
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_HEXDUMP, &EditPos, &NewField);
|
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_HEXDUMP, &EditPos, &NewField);
|
||||||
else
|
else
|
||||||
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_ASCIIDUMP, &EditPos, &NewField);
|
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_ASCIIDUMP, &EditPos, &NewField);
|
||||||
hed->SelEnd = hed->Index;
|
hed->SelEnd = hed->Index;
|
||||||
hed->EditingField = hed->SelOnField;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Hit = HEXEDIT_HitRegionTest(hed, Pt);
|
Hit = HEXEDIT_HitRegionTest(hed, Pt);
|
||||||
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, Hit, &EditPos, &NewField);
|
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, Hit, &EditPos, &NewField);
|
||||||
hed->SelStart = hed->SelEnd = hed->Index;
|
hed->SelStart = hed->SelEnd = hed->Index;
|
||||||
hed->SelOnField = hed->EditingField = NewField;
|
hed->EditingField = NewField;
|
||||||
SetCapture(hed->hWndSelf);
|
SetCapture(hed->hWndSelf);
|
||||||
}
|
}
|
||||||
hed->CaretCol = EditPos.x;
|
hed->CaretCol = EditPos.x;
|
||||||
|
@ -839,7 +985,7 @@ HEXEDIT_WM_LBUTTONUP(PHEXEDIT_DATA hed, INT Buttons, POINTS Pt)
|
||||||
POINT EditPos;
|
POINT EditPos;
|
||||||
if (GetCapture() == hed->hWndSelf)
|
if (GetCapture() == hed->hWndSelf)
|
||||||
{
|
{
|
||||||
if (hed->SelOnField)
|
if (hed->EditingField)
|
||||||
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_HEXDUMP, &EditPos, &NewField);
|
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_HEXDUMP, &EditPos, &NewField);
|
||||||
else
|
else
|
||||||
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_ASCIIDUMP, &EditPos, &NewField);
|
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_ASCIIDUMP, &EditPos, &NewField);
|
||||||
|
@ -860,7 +1006,7 @@ HEXEDIT_WM_MOUSEMOVE(PHEXEDIT_DATA hed, INT Buttons, POINTS Pt)
|
||||||
POINT EditPos;
|
POINT EditPos;
|
||||||
if (GetCapture() == hed->hWndSelf)
|
if (GetCapture() == hed->hWndSelf)
|
||||||
{
|
{
|
||||||
if (hed->SelOnField)
|
if (hed->EditingField)
|
||||||
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_HEXDUMP, &EditPos, &NewField);
|
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_HEXDUMP, &EditPos, &NewField);
|
||||||
else
|
else
|
||||||
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_ASCIIDUMP, &EditPos, &NewField);
|
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_ASCIIDUMP, &EditPos, &NewField);
|
||||||
|
@ -900,8 +1046,51 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode)
|
||||||
|
|
||||||
switch(VkCode)
|
switch(VkCode)
|
||||||
{
|
{
|
||||||
case VK_DELETE:
|
case 'X':
|
||||||
|
if (GetAsyncKeyState(VK_SHIFT) >= 0 &&
|
||||||
|
GetAsyncKeyState(VK_CONTROL) < 0 && hed->SelStart != hed->SelEnd)
|
||||||
|
HEXEDIT_Cut(hed);
|
||||||
|
else
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'C':
|
||||||
|
if (GetAsyncKeyState(VK_SHIFT) >= 0 &&
|
||||||
|
GetAsyncKeyState(VK_CONTROL) < 0 && hed->SelStart != hed->SelEnd)
|
||||||
|
HEXEDIT_Copy(hed);
|
||||||
|
else
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'V':
|
||||||
|
if (GetAsyncKeyState(VK_SHIFT) >= 0 && GetAsyncKeyState(VK_CONTROL) < 0)
|
||||||
|
HEXEDIT_Paste(hed);
|
||||||
|
else
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'A':
|
||||||
|
if (GetAsyncKeyState(VK_SHIFT) >= 0 && GetAsyncKeyState(VK_CONTROL) < 0)
|
||||||
|
HEXEDIT_SelectAll(hed);
|
||||||
|
else
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VK_INSERT:
|
||||||
if (hed->SelStart != hed->SelEnd)
|
if (hed->SelStart != hed->SelEnd)
|
||||||
|
{
|
||||||
|
if (GetAsyncKeyState(VK_SHIFT) >= 0 && GetAsyncKeyState(VK_CONTROL) < 0)
|
||||||
|
HEXEDIT_Copy(hed);
|
||||||
|
}
|
||||||
|
if (GetAsyncKeyState(VK_SHIFT) < 0 && GetAsyncKeyState(VK_CONTROL) >= 0)
|
||||||
|
HEXEDIT_Paste(hed);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VK_DELETE:
|
||||||
|
if (GetAsyncKeyState(VK_SHIFT) < 0 && GetAsyncKeyState(VK_CONTROL) >= 0 &&
|
||||||
|
hed->SelStart != hed->SelEnd)
|
||||||
|
HEXEDIT_Copy(hed);
|
||||||
|
if (i0 != i1)
|
||||||
{
|
{
|
||||||
buf = (PBYTE) LocalLock(hed->hBuffer);
|
buf = (PBYTE) LocalLock(hed->hBuffer);
|
||||||
if (buf)
|
if (buf)
|
||||||
|
@ -946,7 +1135,7 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VK_BACK:
|
case VK_BACK:
|
||||||
if (hed->SelStart != hed->SelEnd)
|
if (i0 != i1)
|
||||||
{
|
{
|
||||||
buf = (PBYTE) LocalLock(hed->hBuffer);
|
buf = (PBYTE) LocalLock(hed->hBuffer);
|
||||||
if (buf)
|
if (buf)
|
||||||
|
@ -986,6 +1175,8 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode)
|
||||||
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
|
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
|
||||||
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
|
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
return TRUE;
|
||||||
HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize - 1);
|
HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize - 1);
|
||||||
hed->InMid = FALSE;
|
hed->InMid = FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1056,6 +1247,9 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode)
|
||||||
InvalidateRect(hed->hWndSelf, NULL, TRUE);
|
InvalidateRect(hed->hWndSelf, NULL, TRUE);
|
||||||
HEXEDIT_MoveCaret(hed, TRUE);
|
HEXEDIT_MoveCaret(hed, TRUE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -1185,6 +1379,40 @@ HEXEDIT_WM_SIZE(PHEXEDIT_DATA hed, DWORD sType, WORD NewWidth, WORD NewHeight)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
HEXEDIT_WM_CONTEXTMENU(PHEXEDIT_DATA hed, INT x, INT y)
|
||||||
|
{
|
||||||
|
HMENU hMenu;
|
||||||
|
RECT rc;
|
||||||
|
|
||||||
|
if (x == -1 && y == -1)
|
||||||
|
{
|
||||||
|
GetWindowRect(hed->hWndSelf, &rc);
|
||||||
|
x = rc.left;
|
||||||
|
y = rc.top;
|
||||||
|
}
|
||||||
|
|
||||||
|
hMenu = GetSubMenu(hPopupMenus, PM_HEXEDIT);
|
||||||
|
if (hed->SelStart == hed->SelEnd)
|
||||||
|
{
|
||||||
|
EnableMenuItem(hMenu, ID_HEXEDIT_CUT, MF_GRAYED);
|
||||||
|
EnableMenuItem(hMenu, ID_HEXEDIT_COPY, MF_GRAYED);
|
||||||
|
EnableMenuItem(hMenu, ID_HEXEDIT_PASTE, MF_GRAYED);
|
||||||
|
EnableMenuItem(hMenu, ID_HEXEDIT_DELETE, MF_GRAYED);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EnableMenuItem(hMenu, ID_HEXEDIT_CUT, MF_ENABLED);
|
||||||
|
EnableMenuItem(hMenu, ID_HEXEDIT_COPY, MF_ENABLED);
|
||||||
|
EnableMenuItem(hMenu, ID_HEXEDIT_PASTE, MF_ENABLED);
|
||||||
|
EnableMenuItem(hMenu, ID_HEXEDIT_DELETE, MF_ENABLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
SetForegroundWindow(hed->hWndSelf);
|
||||||
|
TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, x, y, 0, hed->hWndSelf, NULL);
|
||||||
|
PostMessage(hed->hWndSelf, WM_NULL, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
INT_PTR CALLBACK
|
INT_PTR CALLBACK
|
||||||
HexEditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
HexEditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
|
@ -1291,11 +1519,32 @@ HexEditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_CONTEXTMENU:
|
case WM_CONTEXTMENU:
|
||||||
/* FIXME: Implement Cut, Copy, Paste, Delete and Select All */
|
HEXEDIT_WM_CONTEXTMENU(hed, (short)LOWORD(lParam), (short)HIWORD(lParam));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
/* FIXME: Implement Cut, Copy, Paste, Delete and Select All */
|
switch(LOWORD(wParam))
|
||||||
|
{
|
||||||
|
case ID_HEXEDIT_CUT:
|
||||||
|
HEXEDIT_Cut(hed);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ID_HEXEDIT_COPY:
|
||||||
|
HEXEDIT_Copy(hed);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ID_HEXEDIT_PASTE:
|
||||||
|
HEXEDIT_Paste(hed);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ID_HEXEDIT_DELETE:
|
||||||
|
HEXEDIT_Delete(hed);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ID_HEXEDIT_SELECT_ALL:
|
||||||
|
HEXEDIT_SelectAll(hed);
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Çàïîìíÿíå ñòîéíîñòòà íà êëþ÷à", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Çàïîìíÿíå ñòîéíîñòòà íà êëþ÷à", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Z&kopírovat název klíèe", ID_EDIT_COPYKEYNAME
|
MENUITEM "Z&kopírovat název klíèe", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "S&chlüsselnamen kopieren", ID_EDIT_COPYKEYNAME
|
MENUITEM "S&chlüsselnamen kopieren", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "&Ausschneiden", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Kopieren", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Einfügen", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Löschen", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "A&lles auswählen", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&ÁíôéãñáöÞ Ïíüìáôïò Êëåéäéïý", ID_EDIT_COPYKEYNAME
|
MENUITEM "&ÁíôéãñáöÞ Ïíüìáôïò Êëåéäéïý", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -165,6 +165,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Copiar nombre de clave", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Copiar nombre de clave", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -165,6 +165,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Copier le nom de la clé", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Copier le nom de la clé", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -163,6 +163,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Copy Nama Kunci", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Copy Nama Kunci", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -165,6 +165,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Copia il nome della chiave", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Copia il nome della chiave", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "キー名のコピー(&C)", ID_EDIT_COPYKEYNAME
|
MENUITEM "キー名のコピー(&C)", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "切り取り(&C)", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "コピー(&C)", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "貼\り付け(&P)", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "削除(&D)", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "すべて選択(&A)", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -147,6 +147,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "키 이름 복사(&C)", ID_EDIT_COPYKEYNAME
|
MENUITEM "키 이름 복사(&C)", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Kopier nøkkelnavn", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Kopier nøkkelnavn", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -167,6 +167,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Kopiuj nazwê klucza", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Kopiuj nazwê klucza", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -163,6 +163,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Copiar nome da chave", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Copiar nome da chave", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -163,6 +163,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Êîïèðîâàòü èìÿ êëþ÷à", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Êîïèðîâàòü èìÿ êëþ÷à", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -147,6 +147,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Kopiera nyckelnamn", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Kopiera nyckelnamn", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -163,6 +163,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Êîï³þâàòè ³ì'ÿ ðîçä³ëó", ID_EDIT_COPYKEYNAME
|
MENUITEM "&Êîï³þâàòè ³ì'ÿ ðîçä³ëó", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,15 @@ BEGIN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "复制项名称(&C)", ID_EDIT_COPYKEYNAME
|
MENUITEM "复制项名称(&C)", ID_EDIT_COPYKEYNAME
|
||||||
END
|
END
|
||||||
|
POPUP ""
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||||
|
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||||
|
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||||
|
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#define PM_MODIFYVALUE 0
|
#define PM_MODIFYVALUE 0
|
||||||
#define PM_NEW 1
|
#define PM_NEW 1
|
||||||
#define PM_TREECONTEXT 2
|
#define PM_TREECONTEXT 2
|
||||||
|
#define PM_HEXEDIT 3
|
||||||
|
|
||||||
#define MAX_NEW_KEY_LEN 128
|
#define MAX_NEW_KEY_LEN 128
|
||||||
|
|
||||||
|
|
|
@ -108,6 +108,11 @@
|
||||||
#define ID_REGISTRY_PRINTSUBTREE 32832
|
#define ID_REGISTRY_PRINTSUBTREE 32832
|
||||||
#define ID_REGISTRY_PRINTERSETUP 32833
|
#define ID_REGISTRY_PRINTERSETUP 32833
|
||||||
#define ID_REGISTRY_SAVESUBTREEAS 32834
|
#define ID_REGISTRY_SAVESUBTREEAS 32834
|
||||||
|
#define ID_HEXEDIT_CUT 32835
|
||||||
|
#define ID_HEXEDIT_COPY 32836
|
||||||
|
#define ID_HEXEDIT_PASTE 32837
|
||||||
|
#define ID_HEXEDIT_DELETE 32838
|
||||||
|
#define ID_HEXEDIT_SELECT_ALL 32839
|
||||||
#define IDS_LICENSE 32835
|
#define IDS_LICENSE 32835
|
||||||
#define IDS_ERROR 32836
|
#define IDS_ERROR 32836
|
||||||
#define IDS_BAD_VALUE 32837
|
#define IDS_BAD_VALUE 32837
|
||||||
|
@ -203,6 +208,7 @@
|
||||||
#define IDC_LOOKAT_DATA 2016
|
#define IDC_LOOKAT_DATA 2016
|
||||||
#define IDC_MATCHSTRING 2017
|
#define IDC_MATCHSTRING 2017
|
||||||
#define IDC_MATCHCASE 2018
|
#define IDC_MATCHCASE 2018
|
||||||
|
|
||||||
#define IDS_FINISHEDFIND 2019
|
#define IDS_FINISHEDFIND 2019
|
||||||
|
|
||||||
#define ID_FAVORITES_MIN 2100
|
#define ID_FAVORITES_MIN 2100
|
||||||
|
@ -210,4 +216,5 @@
|
||||||
|
|
||||||
#define ID_ACCEL 3000
|
#define ID_ACCEL 3000
|
||||||
|
|
||||||
|
|
||||||
#define IDC_STATIC -1
|
#define IDC_STATIC -1
|
||||||
|
|
|
@ -540,15 +540,16 @@ BOOL CreateNewKey(HWND hwndTV, HTREEITEM hItem)
|
||||||
TCHAR szNewKey[128];
|
TCHAR szNewKey[128];
|
||||||
LPCTSTR pszKeyPath;
|
LPCTSTR pszKeyPath;
|
||||||
int iIndex = 1;
|
int iIndex = 1;
|
||||||
HKEY hRootKey;
|
LONG nResult;
|
||||||
HKEY hKey = NULL;
|
HKEY hRootKey = NULL, hKey = NULL, hNewKey = NULL;
|
||||||
HKEY hNewKey = NULL;
|
|
||||||
BOOL bSuccess = FALSE;
|
BOOL bSuccess = FALSE;
|
||||||
DWORD dwDisposition;
|
DWORD dwDisposition;
|
||||||
HTREEITEM hNewItem;
|
HTREEITEM hNewItem;
|
||||||
|
|
||||||
pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, hItem, &hRootKey);
|
pszKeyPath = GetItemPath(hwndTV, hItem, &hRootKey);
|
||||||
if (RegOpenKey(hRootKey, pszKeyPath, &hKey) != ERROR_SUCCESS)
|
if (pszKeyPath[0] == TEXT('\0'))
|
||||||
|
hKey = hRootKey;
|
||||||
|
else if (RegOpenKey(hRootKey, pszKeyPath, &hKey) != ERROR_SUCCESS)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
if (LoadString(hInst, IDS_NEW_KEY, szNewKeyFormat, sizeof(szNewKeyFormat) / sizeof(szNewKeyFormat[0])) <= 0)
|
if (LoadString(hInst, IDS_NEW_KEY, szNewKeyFormat, sizeof(szNewKeyFormat) / sizeof(szNewKeyFormat[0])) <= 0)
|
||||||
|
@ -557,13 +558,20 @@ BOOL CreateNewKey(HWND hwndTV, HTREEITEM hItem)
|
||||||
/* Need to create a new key with a unique name */
|
/* Need to create a new key with a unique name */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
_sntprintf(szNewKey, sizeof(szNewKey) / sizeof(szNewKey[0]), szNewKeyFormat, iIndex++);
|
wsprintf(szNewKey, szNewKeyFormat, iIndex++);
|
||||||
RegCreateKeyEx(hKey, szNewKey, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hNewKey, &dwDisposition);
|
nResult = RegCreateKeyEx(hKey, szNewKey, 0, NULL, 0, KEY_WRITE, NULL, &hNewKey, &dwDisposition);
|
||||||
if (hNewKey && (dwDisposition == REG_OPENED_EXISTING_KEY))
|
if (hNewKey && dwDisposition == REG_OPENED_EXISTING_KEY)
|
||||||
{
|
{
|
||||||
RegCloseKey(hNewKey);
|
RegCloseKey(hNewKey);
|
||||||
hNewKey = NULL;
|
hNewKey = NULL;
|
||||||
}
|
}
|
||||||
|
else if (!hNewKey)
|
||||||
|
{
|
||||||
|
TCHAR sz[256];
|
||||||
|
wsprintf(sz, TEXT("Cannot create new key!\n\nError Code: %d"), nResult);
|
||||||
|
MessageBox(hFrameWnd, sz, NULL, MB_ICONERROR);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
while(!hNewKey);
|
while(!hNewKey);
|
||||||
|
|
||||||
|
@ -578,7 +586,7 @@ BOOL CreateNewKey(HWND hwndTV, HTREEITEM hItem)
|
||||||
bSuccess = TRUE;
|
bSuccess = TRUE;
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if (hKey)
|
if (hKey != hRootKey && hKey)
|
||||||
RegCloseKey(hKey);
|
RegCloseKey(hKey);
|
||||||
if (hNewKey)
|
if (hNewKey)
|
||||||
RegCloseKey(hNewKey);
|
RegCloseKey(hNewKey);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue