For https://bugs.winehq.org/show_bug.cgi?id=42563
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- programs/regedit/edit.c | 1 + programs/regedit/hexedit.c | 13 ------------- 2 files changed, 1 insertion(+), 13 deletions(-)
diff --git a/programs/regedit/edit.c b/programs/regedit/edit.c index c8b77bd..c982791 100644 --- a/programs/regedit/edit.c +++ b/programs/regedit/edit.c @@ -151,6 +151,7 @@ static INT_PTR CALLBACK bin_modify_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wPara else SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, g_pszDefaultValueName); SendDlgItemMessageW(hwndDlg, IDC_VALUE_DATA, HEM_SETDATA, (WPARAM)params->cbData, (LPARAM)params->pData); + SendDlgItemMessageW(hwndDlg, IDC_VALUE_DATA, WM_SETFONT, (WPARAM) GetStockObject(ANSI_FIXED_FONT), TRUE); return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { diff --git a/programs/regedit/hexedit.c b/programs/regedit/hexedit.c index fc6c3a3..46d9b82 100644 --- a/programs/regedit/hexedit.c +++ b/programs/regedit/hexedit.c @@ -330,16 +330,6 @@ HexEdit_Char (HEXEDIT_INFO *infoPtr, WCHAR ch) }
static inline LRESULT -HexEdit_Create (HEXEDIT_INFO *infoPtr, LPCREATESTRUCTW lpcs) -{ - HexEdit_SetFont(infoPtr, GetStockObject(SYSTEM_FONT), FALSE); - HexEdit_UpdateScrollbars(infoPtr); - - return 0; -} - - -static inline LRESULT HexEdit_Destroy (HEXEDIT_INFO *infoPtr) { HWND hwnd = infoPtr->hwndSelf; @@ -630,9 +620,6 @@ HexEdit_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case WM_CHAR: return HexEdit_Char (infoPtr, (WCHAR)wParam);
- case WM_CREATE: - return HexEdit_Create (infoPtr, (LPCREATESTRUCTW)lParam); - case WM_DESTROY: return HexEdit_Destroy (infoPtr);
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- programs/regedit/hexedit.c | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-)
diff --git a/programs/regedit/hexedit.c b/programs/regedit/hexedit.c index 46d9b82..e9729eb 100644 --- a/programs/regedit/hexedit.c +++ b/programs/regedit/hexedit.c @@ -73,32 +73,35 @@ static inline BYTE hexchar_to_byte(WCHAR ch) return -1; }
-static LPWSTR HexEdit_GetLineText(BYTE *pData, LONG cbData, LONG pad) +static LPWSTR HexEdit_GetLineText(int offset, BYTE *pData, LONG cbData, LONG pad) { + static const WCHAR percent_04xW[] = {'%','0','4','X',' ',' ',0}; static const WCHAR percent_02xW[] = {'%','0','2','X',' ',0};
- WCHAR *lpszLine = heap_xalloc((cbData * 3 + pad * 3 + DIV_SPACES + cbData + 1) * sizeof(WCHAR)); + WCHAR *lpszLine = heap_xalloc((6 + cbData * 3 + pad * 3 + DIV_SPACES + cbData + 1) * sizeof(WCHAR)); LONG i;
+ wsprintfW(lpszLine, percent_04xW, offset); + for (i = 0; i < cbData; i++) - wsprintfW(lpszLine + i*3, percent_02xW, pData[i]); + wsprintfW(lpszLine + 6 + i*3, percent_02xW, pData[offset + i]); for (i = 0; i < pad * 3; i++) - lpszLine[cbData * 3 + i] = ' '; + lpszLine[6 + cbData * 3 + i] = ' ';
for (i = 0; i < DIV_SPACES; i++) - lpszLine[cbData * 3 + pad * 3 + i] = ' '; + lpszLine[6 + cbData * 3 + pad * 3 + i] = ' ';
/* attempt an ASCII representation if the characters are printable, * otherwise display a '.' */ for (i = 0; i < cbData; i++) { /* (C1_ALPHA|C1_BLANK|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER) */ - if (isprint(pData[i])) - lpszLine[cbData * 3 + pad * 3 + DIV_SPACES + i] = pData[i]; + if (isprint(pData[offset + i])) + lpszLine[6 + cbData * 3 + pad * 3 + DIV_SPACES + i] = pData[offset + i]; else - lpszLine[cbData * 3 + pad * 3 + DIV_SPACES + i] = '.'; + lpszLine[6 + cbData * 3 + pad * 3 + DIV_SPACES + i] = '.'; } - lpszLine[cbData * 3 + pad * 3 + DIV_SPACES + cbData] = 0; + lpszLine[6 + cbData * 3 + pad * 3 + DIV_SPACES + cbData] = 0; return lpszLine; }
@@ -110,9 +113,9 @@ HexEdit_Paint(HEXEDIT_INFO *infoPtr) INT nXStart, nYStart; COLORREF clrOldText; HFONT hOldFont; - BYTE *pData; INT iMode; LONG lByteOffset = infoPtr->nScrollPos * infoPtr->nBytesPerLine; + int i;
/* Make a gap from the frame */ nXStart = GetSystemMetrics(SM_CXBORDER); @@ -125,17 +128,16 @@ HexEdit_Paint(HEXEDIT_INFO *infoPtr)
iMode = SetBkMode(hdc, TRANSPARENT); hOldFont = SelectObject(hdc, infoPtr->hFont); - - for (pData = infoPtr->pData + lByteOffset; pData < infoPtr->pData + infoPtr->cbData; pData += infoPtr->nBytesPerLine) + + for (i = lByteOffset; i < infoPtr->cbData; i += infoPtr->nBytesPerLine) { LPWSTR lpszLine; - LONG nLineLen = min((LONG)((infoPtr->pData + infoPtr->cbData) - pData), - infoPtr->nBytesPerLine); + LONG nLineLen = min(infoPtr->cbData - i, infoPtr->nBytesPerLine);
- lpszLine = HexEdit_GetLineText(pData, nLineLen, infoPtr->nBytesPerLine - nLineLen); + lpszLine = HexEdit_GetLineText(i, infoPtr->pData, nLineLen, infoPtr->nBytesPerLine - nLineLen);
/* FIXME: draw hex <-> ASCII mapping highlighted? */ - TextOutW(hdc, nXStart, nYStart, lpszLine, infoPtr->nBytesPerLine * 3 + DIV_SPACES + nLineLen); + TextOutW(hdc, nXStart, nYStart, lpszLine, lstrlenW(lpszLine));
nYStart += infoPtr->nHeight; heap_free(lpszLine); @@ -158,14 +160,14 @@ HexEdit_UpdateCaret(HEXEDIT_INFO *infoPtr) INT nByteLinePos = nCaretBytePos % infoPtr->nBytesPerLine; INT nLine = nCaretBytePos / infoPtr->nBytesPerLine; LONG nLineLen = min(infoPtr->cbData - nLine * infoPtr->nBytesPerLine, infoPtr->nBytesPerLine); - LPWSTR lpszLine = HexEdit_GetLineText(infoPtr->pData + nLine * infoPtr->nBytesPerLine, nLineLen, infoPtr->nBytesPerLine - nLineLen); + LPWSTR lpszLine = HexEdit_GetLineText(nLine * infoPtr->nBytesPerLine, infoPtr->pData, nLineLen, infoPtr->nBytesPerLine - nLineLen); INT nCharOffset;
/* calculate offset of character caret is on in the line */ if (infoPtr->bFocusHex) - nCharOffset = nByteLinePos*3 + infoPtr->nCaretPos % 2; + nCharOffset = 6 + nByteLinePos*3 + infoPtr->nCaretPos % 2; else - nCharOffset = infoPtr->nBytesPerLine*3 + DIV_SPACES + nByteLinePos; + nCharOffset = 6 + infoPtr->nBytesPerLine*3 + DIV_SPACES + nByteLinePos;
hdc = GetDC(infoPtr->hwndSelf); hOldFont = SelectObject(hdc, infoPtr->hFont); @@ -517,7 +519,7 @@ HexEdit_SetFont (HEXEDIT_INFO *infoPtr, HFONT hFont, BOOL redraw) SIZE size;
memset(pData, 0, i); - lpszLine = HexEdit_GetLineText(pData, i, 0); + lpszLine = HexEdit_GetLineText(0, pData, i, 0); GetTextExtentPoint32W(hdc, lpszLine, lstrlenW(lpszLine), &size); heap_free(lpszLine); heap_free(pData);
Both in the interest of having an even 8 bytes per line, and of having more than two lines visible at once.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- programs/regedit/regedit.rc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/programs/regedit/regedit.rc b/programs/regedit/regedit.rc index 4a51bcf..a3e0a01 100644 --- a/programs/regedit/regedit.rc +++ b/programs/regedit/regedit.rc @@ -336,17 +336,17 @@ BEGIN PUSHBUTTON "Cancel",IDCANCEL,160,81,45,15,WS_GROUP END
-IDD_EDIT_BINARY DIALOG 22, 17, 170, 100 +IDD_EDIT_BINARY DIALOG 22, 17, 250, 200 STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU CAPTION "Edit Binary" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Value name:",IDC_STATIC,5,5,119,8 - EDITTEXT IDC_VALUE_NAME,5,15,160,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED + EDITTEXT IDC_VALUE_NAME,5,15,240,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED LTEXT "Value data:",IDC_STATIC,5,30,90,8 - CONTROL "",IDC_VALUE_DATA,"HexEdit",WS_TABSTOP,5,40,160,40 - DEFPUSHBUTTON "OK",IDOK,70,83,45,15,WS_GROUP - PUSHBUTTON "Cancel",IDCANCEL,120,83,45,15,WS_GROUP + CONTROL "",IDC_VALUE_DATA,"HexEdit",WS_TABSTOP,5,40,240,140 + DEFPUSHBUTTON "OK",IDOK,70,183,45,15,WS_GROUP + PUSHBUTTON "Cancel",IDCANCEL,120,183,45,15,WS_GROUP END
IDD_EDIT_MULTI_STRING DIALOG 22, 17, 210, 175
The scrollbar should be updated every time the line width is recalculated.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- programs/regedit/hexedit.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/programs/regedit/hexedit.c b/programs/regedit/hexedit.c index e9729eb..c7bdd0a 100644 --- a/programs/regedit/hexedit.c +++ b/programs/regedit/hexedit.c @@ -530,6 +530,8 @@ HexEdit_SetFont (HEXEDIT_INFO *infoPtr, HFONT hFont, BOOL redraw) } }
+ HexEdit_UpdateScrollbars(infoPtr); + if (infoPtr->hFont) SelectObject(hdc, hOldFont); ReleaseDC (infoPtr->hwndSelf, hdc);