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

📄 regwnd.c

📁 CC386 is a general-purpose 32-bit C compiler. It is not an optimizing compiler but given that the co
💻 C
📖 第 1 页 / 共 2 页
字号:
             &xst6, &st6buf
        }
        , &oldContext.FloatSave.RegisterArea[60],
            &regContext.FloatSave.RegisterArea[60], 0, editable | floating
    }
    , 
    {
        {
             &xst7, &st7buf
        }
        , &oldContext.FloatSave.RegisterArea[70],
            &regContext.FloatSave.RegisterArea[70], 0, editable | floating
    }
    , 
};

static TCHeader tch = 
{
    "Register", "Value", 0, 0
};
static int drawn;
void SaveRegisterContext(void)
{
    oldContext = regContext;
    StoppedThread->regs = regContext;
}

//-------------------------------------------------------------------------

LRESULT CALLBACK _export RegisterProc(HWND hwnd, UINT iMessage, WPARAM wParam,
    LPARAM lParam)
{
    static int charwidth;
    HDC dc;
    TEXTMETRIC metric;
    DEBUG_EVENT *xc;
    HFONT oldFont;
    LOGBRUSH brushstr;
    RECT r;
    int i;
    NM_TREEVIEW *nmt;
    switch (iMessage)
    {
        case WM_MDIACTIVATE:
            SendMessage(hwndCtrl, LCF_SETACTIVE, 0, lParam == (LPARAM)hwnd);
            if (lParam == (LPARAM)hwnd)
            {
                SendMessage(hwndSourceTab, WM_SETACTIVETAB, 0, (LPARAM)hwnd);
                SetFocus(hwndTree);
            }
            return TRUE;
        case WM_NOTIFY:
            nmt = (NM_TREEVIEW*)lParam;
            switch (nmt->hdr.code)
            {
            case TCN_EDITQUERY:
                if (uState != atBreakpoint)
                    return 0;
                for (i = 0; i < sizeof(regs) / sizeof(REGDATA); i++)
                    if (regs[i].hTreeItem == nmt->itemNew.hItem)
                        if (regs[i].flags &editable)
                            return (LRESULT)regs[i].ptrs.col2Text;
                return 0;
            case TCN_EDITDONE:
                for (i = 0; i < sizeof(regs) / sizeof(REGDATA); i++)
                if (regs[i].hTreeItem == nmt->itemNew.hItem)
                {
                    char *buf = (char*)nmt->itemNew.pszText;
                    if (regs[i].flags &floating)
                    {
                        float val;
                        int pos = regs[i].currentdataptr;
                        sscanf(buf, "%f", &val);
                        *(long double*)pos = val;
                        sprintf(regs[i].ptrs.col2Text, "%f", (double)val);
                    }
                    else
                    {
                        if (buf[0] == '0' && buf[1] == 'x')
                            sscanf(buf + 2, "%x", regs[i].currentdataptr);
                        else if ((buf[strlen(buf) - 1] &0xDF) == 'H')
                            sscanf(buf, "%x", regs[i].currentdataptr);
                        else
                            sscanf(buf, "%d", regs[i].currentdataptr);
                        sprintf(regs[i].ptrs.col2Text, "0x%08x", 
                            *regs[i].currentdataptr);
                    }
                    regs[i].ptrs.col2Color = 0xff;
                }
                return 0;
            }
            break;
        case WM_SYSCOMMAND:
            if (wParam == SC_CLOSE)
                SendMessage(hwnd, WM_CLOSE, 0, 0);
            break;
        case WM_COMMAND:
            switch (LOWORD(wParam))
            {
            case ID_SETCONTEXT:
                SaveRegisterContext();
                break;
            case ID_SETADDRESS:
                regContext = StoppedThread->regs;
                registerHandle = (HANDLE)lParam;
                if (lParam)
                {
                    int i;
                    for (i = 0; i < sizeof(regs) / sizeof(REGDATA); i++)
                    if (regs[i].currentdataptr)
                    {
                        if (regs[i].flags &floating)
                        {
                            double val;
                            int pos = regs[i].currentdataptr;
                            val = *(long double*)pos;

                            sprintf(regs[i].ptrs.col2Text, "%f", val);
                            if (!memcmp(regs[i].currentdataptr,
                                regs[i].olddataptr, 10))
                                regs[i].ptrs.col2Color = 0;
                            else
                                regs[i].ptrs.col2Color = 0xff;
                        }
                        else
                        {
                            sprintf(regs[i].ptrs.col2Text, "0x%08x", 
                                *regs[i].currentdataptr);
                            if (*regs[i].currentdataptr ==  *regs[i].olddataptr)
                                regs[i].ptrs.col2Color = 0;
                            else
                                regs[i].ptrs.col2Color = 0xff;
                        }
                    }
                    if (!drawn)
                    {
                        HTREEITEM after1 = 0, after2 = 0;
                        for (i = 0; i < sizeof(regs) / sizeof(REGDATA); i++)
                        {
                            TV_INSERTSTRUCT t;
                            memset(&t, 0, sizeof(t));
                            t.hParent = regs[i].currentdataptr ? after1 : 0;
                            t.hInsertAfter = regs[i].currentdataptr ? after2 :
                                after1;
                            #if !defined( _WIN32_IE) && !defined(__CCDL__)
                                t.item.mask = 0;
                                t.item.hItem = 0;
                                t.item.lParam = (int) &regs[i].ptrs;
                            #else 
                                t.u.item.mask = 0;
                                t.u.item.hItem = 0;
                                t.u.item.lParam = (int) &regs[i].ptrs;
                            #endif 
                            regs[i].hTreeItem = TreeView_InsertItem(hwndTree,
                                &t);
                            if (!regs[i].currentdataptr)
                            {
                                after1 = regs[i].hTreeItem;
                                after2 = 0;
                            }
                            else
                                after2 = regs[i].hTreeItem;
                        }
                        drawn = TRUE;
                    }
                }
                else if (!lParam && drawn)
                {
                    TreeView_DeleteAllItems(hwndTree);
                    drawn = FALSE;
                }
                InvalidateRect(hwndTree, 0, 0);
                break;
            default:
                return DefMDIChildProc(hwnd, iMessage, wParam, lParam);
            }
            break;
        case WM_SETFOCUS:
            break;
        case WM_KILLFOCUS:
            break;
        case WM_LBUTTONDOWN:
            break;
        case WM_CREATE:
            hwndRegister = hwnd;
            GetClientRect(hwnd, &r);
            hwndCtrl = CreateControlWindow(DID_REGWND, hwnd, &r, (int)(
                (LPMDICREATESTRUCT)(*(int*)lParam))->lParam, szRegTitle);
            SendMessage(hwndCtrl, LCF_ADJUSTRECT, 0, (LPARAM) &r);
            //         valueBitmap = LoadBitmap(hInstance, "ID_VALUEBMP") ;
            //         itemBitmap = LoadBitmap(hInstance, "ID_ITEMBMP") ;
            tch.colBmp1 = itemBitmap;
            tch.colBmp2 = valueBitmap;
            hwndTree = CreateextTreeWindow(hwndCtrl, TCS_LINE, &r, &tch);
            break;

        case WM_CLOSE:
            dmgrHideWindow(DID_REGWND, TRUE);
            return 0;
        case WM_DESTROY:
            DestroyWindow(hwndTree);
            //         DeleteObject(itemBitmap) ;
            //         DeleteObject(valueBitmap) ;
            hwndRegister = 0;
            registerHandle = 0;
            break;
        case WM_SIZE:
            r.left = r.top = 0;
            r.right = LOWORD(lParam);
            r.bottom = HIWORD(lParam);
            MoveWindow(hwndCtrl, 0, 0, r.right, r.bottom, TRUE);
            SendMessage(hwndCtrl, LCF_ADJUSTRECT, 0, (LPARAM) &r);
            MoveWindow(hwndTree, r.left, r.top, r.right - r.left, r.bottom -
                r.top, TRUE);
            break;
        case WM_INITMENUPOPUP:
            break;
        default:
            break;
    }
    return DefMDIChildProc(hwnd, iMessage, wParam, lParam);
}

//-------------------------------------------------------------------------

void RegisterRegisterWindow(void)
{
    WNDCLASS wc;
    memset(&wc, 0, sizeof(wc));
    wc.style = 0;
    wc.lpfnWndProc = &RegisterProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(0, IDI_APPLICATION);
    wc.hCursor = LoadCursor(0, IDC_ARROW);
    wc.hbrBackground = GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName = 0;
    wc.lpszClassName = szRegisterClassName;
    RegisterClass(&wc);
}

//-------------------------------------------------------------------------

HWND CreateRegisterWindow(void)
{
    MDICREATESTRUCT mc;
    HWND rv;
    RECT r;
    if (hwndRegister)
    {
        SendMessage(hwndRegister, WM_SETFOCUS, 0, 0);
        return hwndRegister;
    }
    GetClientRect(hwndClient, &r);
    mc.szClass = szRegisterClassName;
    mc.szTitle = szRegTitle;
    mc.hOwner = hInstance;
    mc.x = CW_USEDEFAULT;
    mc.y = CW_USEDEFAULT;
    mc.cx = 200;
    mc.cy = 400;
    mc.style = WS_CHILD | WS_CLIPSIBLINGS | WS_DLGFRAME;
    mc.lParam = (LPARAM)0;
    rv = (HWND)SendMessage(hwndClient, WM_MDICREATE, 0, (LPARAM) &mc);
    return rv;
}

⌨️ 快捷键说明

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