
 Сообщение от 
valker
					
				 
				Захотелось получить установку точки останова в отладчике при помощи контекстного меню.
Подскажите, кто в курсе!
			
		 
	 
 
 Код:
 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;
}