⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memview.cpp

📁 PNX系列设备驱动 PNX系列设备驱动
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                else if (yPos < 0) 
                    SendMessage(hWnd,WM_KEYDOWN, VK_UP,0L);
                else
                {
                    yCaret=yPos;
                    if(xPos < 13)
                        xCaret=13;
                    else if(globaldumptype == 0)        // Byte
                    {
                        if(xPos-13 > 15*3+1)
                            xCaret=13+15*3+1;
                        else
                        {
                            if(((xPos-13+1)%3) == 0)
                                xCaret=xPos+1;
                            else
                                xCaret=xPos;
                        }
                    }
                    else if(globaldumptype == 1)        // Word
                    {
                        if(xPos-13 > 7*5+3)
                            xCaret=13+7*5+3;
                        else
                        {
                            if(((xPos-13+1)%5) == 0)
                                xCaret=xPos+1;
                            else
                                xCaret=xPos;
                        }
                    }
                    else                                // Dword
                    {
                        if(xPos-13 > 3*9+7)
                            xCaret=13+3*9+7;
                        else
                        {
                            if(((xPos-13+1)%9) == 0)
                                xCaret=xPos+1;
                            else
                                xCaret=xPos;
                        }
                    }
                    CheckMemUpdate();
                    SetCaretPos(xCaret*xChar,yCaret*yChar);
                }
                selectionEnd=((PBYTE)(pmv->lpMem)+16*(yCaret+pmv->PosV));
            }
            InvalidateRect (hWnd, NULL, FALSE);
        }
        break;

    case WM_VSCROLL:
        VScrollBytes (hWnd, LOWORD (wParam),HIWORD(wParam) /* GetScrollPos (hWnd, SB_VERT) */, pmv);
        break;

    case WM_CHAR:
            {
            char temp[2];
            char x;
            unsigned int no,pos;
            HDC hDC;
            x=toupper(wParam);
            if (x==3)       // Ctrl-C
            {
                SendMessage(hWnd,WM_COMMAND,IDM_COPY,0);
                break;
            }
            else if (x==1)       // Ctrl-A
            {
                SendMessage(hWnd,WM_COMMAND,IDM_SELECT_ALL,0);
                break;
            }
            else if (x==13) // CR
            {
                CheckMemUpdate();
                break;
            }
            if(isdigit(x) || (x >= 'A' && x <= 'F'))
            {
            temp[0]=wParam;
            temp[1]=0;
            sscanf(temp,"%x",&no);

            if(mem == 0)            // If no pointer already
            {
                if(globaldumptype == 0)         // BYTE
                {
                    mem=((PBYTE)(pmv->lpMem)+16*(yCaret+pmv->PosV)+(xCaret-13)/3);
                    value=*(PBYTE)mem;
                }
                else if(globaldumptype == 1)    // WORD
                {
                    mem=((PWORD)(pmv->lpMem)+8*(yCaret+pmv->PosV)+(xCaret-13)/5);
                    value=*(PWORD)mem;
                }

                else if(globaldumptype == 2)    // DWORD
                {
                    mem=((PDWORD)(pmv->lpMem) + 4*(yCaret+pmv->PosV) + (xCaret-13)/9);
                    value=*(PDWORD)mem;
                }
            }
            if(globaldumptype == 0)         // BYTE
            {
                    pos=(xCaret-13)%3;
                    if(pos==0)
                    {
                        value &= 0x0f;
                        value |= (no <<4);
                    }
                    if(pos==1)
                    {
                        value &= 0xf0;
                        value |= no;
                    }
            }
            else if(globaldumptype == 1)    // WORD
            {
                    pos=(xCaret-13)%5;
                    if(pos==0)
                    {
                        value &= 0x0fff;
                        value |= (no << 12);
                    }
                    if(pos==1)
                    {
                        value &= 0xf0ff;
                        value |= (no << 8);
                    }
                    if(pos==2)
                    {
                        value &= 0xff0f;
                        value |= (no << 4);
                    }
                    if(pos==3)
                    {
                        value &= 0xfff0;
                        value |= no;
                    }
            }
            else if(globaldumptype == 2)    // DWORD
            {
                    pos=(xCaret-13)%9;
                    if(pos == 0)
                    {
                        value &= 0x0fffffff;
                        value |= (no << 28);
                    }
                    else if(pos == 1)
                    {
                        value &= 0xf0ffffff;
                        value |= (no << 24);
                    }
                    else if(pos == 2)
                    {
                        value &= 0xff0fffff;
                        value |= (no << 20);
                    }
                    else if(pos == 3)
                    {
                        value &= 0xfff0ffff;
                        value |= (no << 16);
                    }
                    else if(pos == 4)
                    {
                        value &= 0xffff0fff;
                        value |= (no << 12);
                    }
                    else if(pos == 5)
                    {
                        value &= 0xfffff0ff;
                        value |= (no << 8);
                    }
                    else if(pos == 6)
                    {
                        value &= 0xffffff0f;
                        value |= (no << 4);
                    }
                    else
                    {
                        value &= 0xfffffff0;
                        value |= no;
                    }
            }
            HideCaret(hWnd);
            hDC=GetDC(hWnd);
            SelectObject (hDC, hFont);
            SetTextColor (hDC, GetSysColor (COLOR_WINDOWTEXT));
            SetBkColor (hDC, GetSysColor (COLOR_WINDOW));
            TextOut(hDC,xCaret*xChar,yCaret*yChar,temp,1);
            if(globaldumptype == 0) // BYTE
            {
                char str[2];
                MemToAscii((BYTE)value,str);
                TextOut(hDC,xChar*(61 + (xCaret-13)/3),yCaret*yChar,str,1);
            }
            else if(globaldumptype == 1)    // WORD
            {
                char str[3];
                MemToAscii((WORD)value,str);
                TextOut(hDC,xChar*(60 + 2*((xCaret-13)/5)),yCaret*yChar,str,2);
            }
            else if(globaldumptype == 2)    // DWORD
            {
                char str[5];
                MemToAscii((DWORD)value,str);
                TextOut(hDC,xChar*(60 + 4*((xCaret-13)/9)),yCaret*yChar,str,4);
            }
            ReleaseDC(hWnd,hDC);
            SendMessage(hWnd,WM_KEYDOWN,VK_RIGHT,0L);
            ShowCaret(hWnd);
            }
        }
        break;
    case WM_DESTROY:
        {
        LPMEMVIEW    lpmv;

        hexWindow=FALSE;

        /* free virtual memory block  and local memory buffer */
        VirtualFree (pmv->lpMem, 0, MEM_RELEASE);
        LocalFree ((HANDLE)pmv);

        /* remove any old view memory */
        if ((lpmv = (LPMEMVIEW)GetWindowLong (hWnd, WXB_LPMEMVIEW)) != NULL)
        {
        VirtualFree (lpmv->lpMem, 0, MEM_RELEASE);
        LocalFree ((HANDLE)lpmv);
        }
        }
        break;

    case WM_SETFOCUS:
    // Create a solid black caret. 
        CreateCaret(hWnd, (HBITMAP) NULL, 2, yChar); 
 
    // Adjust the caret position, in client coordinates. 
        SetCaretPos(xCaret*xChar, yCaret*yChar); 
 
    // Display the caret. 
        ShowCaret(hWnd); 
        break;
    case WM_KILLFOCUS:  
 
    // The window is losing the keyboard focus, so destroy the caret. 
        CheckMemUpdate();
        DestroyCaret(); 
        break; 
    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
            case IDM_COPY:
                if(selectionStart != 0)
                    CopyClipboard(pmv); // Place selection in clipboard
                break;
            case IDM_SELECT_ALL:
                selectionStart = pmv->lpMem;
                selectionEnd = (BYTE *)pmv->lpMem + pmv->nSize - 16;
                selectionComplete=TRUE;
                InvalidateRect (hWnd, NULL, FALSE);
                break;
        }
        break;
    default:
        return (DefWindowProc(hWnd, uMsg, wParam, lParam));
        break;

    }
    return 0L;
}

void  WINAPI VScrollBytes (
    HWND     hWnd,
    int      cmd,
    int      pos,
    LPMEMVIEW    lpmv)
{
    int    nScrollInc;

    CheckMemUpdate();
    switch (cmd)
    {
        case SB_TOP:
        nScrollInc = -lpmv->PosV;
            break ;

        case SB_BOTTOM:
        nScrollInc = lpmv->RangeV - lpmv->PosV;
            break ;

        case SB_LINEUP:
            nScrollInc = -1;
            break;

        case SB_LINEDOWN:
            nScrollInc = 1;
            break;

        case SB_PAGEDOWN:
        nScrollInc = max (1, lpmv->yWin/yChar);
            break;

        case SB_PAGEUP:
        nScrollInc = min (-1, -(lpmv->yWin/yChar));
            break;
    
        case SB_THUMBPOSITION:
        nScrollInc = pos - lpmv->PosV;
            break;

    case SB_THUMBTRACK:
        nScrollInc = pos - lpmv->PosV;
            break;

        default:
            nScrollInc = 0;
    }
    if (nScrollInc > lpmv->RangeV-lpmv->PosV)
    nScrollInc = lpmv->RangeV-lpmv->PosV;

    if (nScrollInc < -lpmv->PosV)
    nScrollInc = -lpmv->PosV;

    if (nScrollInc)
    {
    lpmv->PosV += nScrollInc;

    if (ABS (nScrollInc) < lpmv->yWin/yChar)
        ScrollWindow (hWnd, 0, -(yChar*nScrollInc), NULL, NULL);
    else
        InvalidateRect (hWnd, NULL, TRUE);

    SetScrollPos (hWnd, SB_VERT, lpmv->PosV, TRUE);
    UpdateWindow(hWnd);
    SetCaretPos(xCaret*xChar, yCaret*yChar); 
    }
}



void  WINAPI KeyToScrollMsg (HWND hWnd,WPARAM    wParam)
{
    int       i, nKeys;
    static    struct
    {
        WORD wVirtKey;
        int  iMessage;
        WORD wRequest;
    }key2scroll [] = {
             VK_HOME,  WM_VSCROLL, SB_TOP,    VK_END,   WM_VSCROLL,
             SB_BOTTOM, VK_PRIOR, WM_VSCROLL, SB_PAGEUP, VK_NEXT,
             WM_VSCROLL, SB_PAGEDOWN, VK_UP,    WM_VSCROLL, SB_LINEUP,
             VK_DOWN,  WM_VSCROLL, SB_LINEDOWN, VK_LEFT,  WM_HSCROLL,
             SB_LINEUP, VK_RIGHT, WM_HSCROLL, SB_LINEDOWN,
             };

    nKeys = sizeof key2scroll / sizeof key2scroll[0];

    for (i=0; i<nKeys; i++)
    {
        if (wParam == key2scroll[i].wVirtKey)   
        {
            SendMessage (hWnd, key2scroll[i].iMessage, key2scroll[i].wRequest, 0L);
            return;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -