📄 regwnd.c
字号:
&xst6, &st6buf
}
, &oldContext.FloatSave.RegisterArea[60],
®Context.FloatSave.RegisterArea[60], 0, editable | floating
}
,
{
{
&xst7, &st7buf
}
, &oldContext.FloatSave.RegisterArea[70],
®Context.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) ®s[i].ptrs;
#else
t.u.item.mask = 0;
t.u.item.hItem = 0;
t.u.item.lParam = (int) ®s[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 + -