PDA

Просмотр полной версии : Модификация Unreal



valker
02.02.2005, 11:39
Захотелось получить установку точки останова в отладчике при помощи контекстного меню. Автора пинать не очень хотелось, так как проблема (вроде бы) несложная, и исходники, слава богу, присутствуют.
Но сколько ни бился, ничего не получилось...
Подскажите, кто в курсе!

Заранее спасибо.

SMT
02.02.2005, 20:28
Захотелось получить установку точки останова в отладчике при помощи контекстного меню.
Подскажите, кто в курсе!


void handle_mouse()
{
unsigned mx = ((mousepos & 0xFFFF)-temp.gx)/8,
my = (((mousepos >> 16) & 0x7FFF)-temp.gy)/16;
if (my >= trace_y && my < trace_y+trace_size && mx >= trace_x && mx < trace_x+32) {
needclr++; activedbg = WNDTRACE;
trace_curs = trpc[my - trace_y];
if (mx - trace_x < cs[1][0]) trace_mode = 0;
else if (mx - trace_x < cs[2][0]) trace_mode = 1;
else trace_mode = 2;
}
if (my >= mem_y && my < mem_y+mem_size && mx >= mem_x && mx < mem_x+37) {
needclr++; activedbg = WNDMEM;
unsigned dx = mx-mem_x;
if (mem_dump) {
if (dx >= 5) mem_curs = mem_top + (dx-5) + (my-mem_y)*32;
} else {
unsigned mem_se = (dx-5)%3;
if (dx >= 29) mem_curs = mem_top + (dx-29) + (my-mem_y)*8, mem_ascii=1;
if (dx >= 5 && mem_se != 2 && dx < 29)
mem_curs = mem_top + (dx-5)/3 + (my-mem_y)*8,
mem_second = mem_se, mem_ascii=0;
}
}
if (mx >= regs_x && my >= regs_y && mx < regs_x+32 && my < regs_y+4) {
needclr++; activedbg = WNDREGS;
for (unsigned i = 0; i < sizeof regs_layout / sizeof *regs_layout; i++) {
unsigned delta = 1;
if (regs_layout[i].width == 16) delta = 4;
if (regs_layout[i].width == 8) delta = 2;
if (my-regs_y == regs_layout[i].y && mx-regs_x-regs_layout[i].x < delta) regs_curs = i;
}
}
if (mousepos & 0x80000000) { // right-click
enum { IDM_BPX=1, IDM_SOME_OTHER };
HMENU menu = CreatePopupMenu();
if (activedbg == WNDTRACE) {
AppendMenu(menu, MF_STRING, IDM_BPX, "breakpoint");
} else {
AppendMenu(menu, MF_STRING, 0, "I don't know");
AppendMenu(menu, MF_STRING, 0, "what to place");
AppendMenu(menu, MF_STRING, 0, "to menu, so");
AppendMenu(menu, MF_STRING, 0, "No Stuff Here");
}
int cmd = TrackPopupMenu(menu, TPM_RETURNCMD | TPM_NONOTIFY | TPM_LEFTALIGN | TPM_TOPALIGN,
(mousepos & 0xFFFF) + temp.client.left,
((mousepos>>16) & 0x7FFF) + temp.client.top, 0, wnd, 0);
DestroyMenu(menu);
if (cmd == IDM_BPX) cbpx();
//if (cmd == IDM_SOME_OTHER) some_other();
//needclr++;
}
mousepos = 0;
}