BOOL CMemoryDlg::DlgProc(UINT message, WPARAM wParam, LPARAM lParam)
{

	switch(message)
	{
	case WM_COMMAND:
		{
			CtrlMemView *mv = CtrlMemView::getFrom(GetDlgItem(m_hDlg,IDC_MEMVIEW));
			switch (LOWORD(wParam))
			{
			case IDC_REGIONS:
				switch (HIWORD(wParam)) 
				{ 
				case LBN_DBLCLK:
					{
						HWND lb = GetDlgItem(m_hDlg,LOWORD(wParam));
						int n = ComboBox_GetCurSel(lb);
						if (n!=-1)
						{
							unsigned int addr = (unsigned int)ComboBox_GetItemData(lb,n);
							mv->gotoAddr(addr);
						}
					}
					break;
				};
				break;
			case IDC_SYMBOLS: 
				switch (HIWORD(wParam)) 
				{ 
				case LBN_DBLCLK:
					{

						HWND lb = GetDlgItem(m_hDlg,LOWORD(wParam));
						int n = ListBox_GetCurSel(lb);
						if (n!=-1)
						{
							unsigned int addr = (unsigned int)ListBox_GetItemData(lb,n);
							mv->gotoAddr(addr);
						}
					}
					break;
				};
				break;		
			case IDC_MODENORMAL:
				mv->setMode(MV_NORMAL);
				break;
			case IDC_MODESYMBOLS:
				mv->setMode(MV_NORMAL);
	//			mv->setMode(MV_SYMBOLS);
				break;
			}
		}
		break;
	case WM_DEB_MAPLOADED:
		NotifyMapLoaded();
		break;
	case WM_DEB_GOTOADDRESSEDIT:
	{
		CtrlMemView *mv = CtrlMemView::getFrom(GetDlgItem(m_hDlg,IDC_MEMVIEW));
		char temp[256];
		u32 addr;
		GetWindowText(GetDlgItem(m_hDlg,IDC_ADDRESS),temp,255);

		if (parseExpression(temp,cpu,addr) == false)
		{
			displayExpressionError(m_hDlg);
		} else {
			mv->gotoAddr(addr);
			SetFocus(GetDlgItem(m_hDlg,IDC_MEMVIEW));
		}
		break;
	}
	case WM_INITDIALOG:
		{
			return TRUE;
		}
		break;
	case WM_SIZE:
		Size();
		break;
	case WM_CLOSE:
		Show(false);
		break;
	}
		
	return FALSE;
}
Exemple #2
0
LRESULT CALLBACK CtrlMemView::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	CtrlMemView *ccp = CtrlMemView::getFrom(hwnd);
	static bool lmbDown=false,rmbDown=false;
    switch(msg)
    {
	case WM_COMMAND:
	/*	switch(LOWORD(wParam))
		{
		case ID_MEMVIEW_DUMP:
			MessageBox(hwnd,"This feature has not been implemented.","Sorry",0);
			break;
		case ID_MEMVIEW_GOTOINDISASM:
			CDisasm::Goto(ccp->selection);
			break;

		case ID_MEMVIEW_ADDMEMORYBREAKPOINT:
			{
#ifdef LOGGING
				CMemChecksDlg::Show(true);
				TMemCheck mc;
				_u32 addr = ccp->getSelection();
				int fun = Debugger_GetSymbolNum(addr);
				int st,end;
				if (fun!=-1)
				{
					st = Debugger_GetSymbolAddr(fun);
					end = st + Debugger_GetSymbolSize(fun)-4;
					if (end<st) end=st; //for smaller than 4 bytes symbols
				}
				else
				{
					st=addr;
					end=addr;
				}
				mc.iStartAddress = st;
				mc.iEndAddress = end;
				mc.bRange=(end-st)>4;
				mc.bBreak=true;
				mc.bLog=true;
				mc.bOnRead=true;
				mc.bOnWrite=true;
				CMemChecksDlg::AddNewCheck(mc);
#else
				MessageBox(hwnd,"This build does not support this feature.","Speed build restrictions",0);
#endif
			}
			break;
		case ID_MEMVIEW_COPYVALUE:
			{
				char temp[24];
				sprintf(temp,"%08x",CMemory::ReadUnchecked_U32(ccp->selection));
				CopyTextToClipboard(hwnd,temp);
			}
			break;
		}*/
		break;
    case WM_NCCREATE:
        // Allocate a new CustCtrl structure for this window.
        ccp = new CtrlMemView(hwnd);

		ccp->setDebugger(&di);
		ccp->setMode(MV_NORMAL);
		
        // Continue with window creation.
        return ccp != NULL;
		
		// Clean up when the window is destroyed.
    case WM_NCDESTROY:
        delete ccp;
        break;
	case WM_SETFONT:
		break;
	case WM_SIZE:
		ccp->redraw();
		break;
	case WM_PAINT:
		ccp->onPaint(wParam,lParam);
		break;	
	case WM_VSCROLL:
		ccp->onVScroll(wParam,lParam);
		break;
	case WM_ERASEBKGND:
		return FALSE;
	case WM_KEYDOWN:
		ccp->onKeyDown(wParam,lParam);
		break;
	case WM_LBUTTONDOWN: SetFocus(hwnd); lmbDown=true; ccp->onMouseDown(wParam,lParam,1); break;
	case WM_RBUTTONDOWN: rmbDown=true; ccp->onMouseDown(wParam,lParam,2); break;
	case WM_MOUSEMOVE:   ccp->onMouseMove(wParam,lParam,(lmbDown?1:0) | (rmbDown?2:0)); break;
	case WM_LBUTTONUP:   lmbDown=false; ccp->onMouseUp(wParam,lParam,1); break;
	case WM_RBUTTONUP:   rmbDown=false; ccp->onMouseUp(wParam,lParam,2); break;
	case WM_SETFOCUS:
		SetFocus(hwnd);
		ccp->hasFocus=true;
		ccp->redraw();
		break;
	case WM_KILLFOCUS:
		ccp->hasFocus=false;
		ccp->redraw();
		break;
    default:
        break;
    }
	
    return DefWindowProc(hwnd, msg, wParam, lParam);
}