
// MemDumpDlg.h : файл заголовка
//

#pragma once
#include "afxcmn.h"
#include "DumpListCtrl.h"
#include "EnterEditCtrl.h"
#include "GFResizeDialogHelper.h"

class CDebugger;

struct DISPLAY_MODE_PARAM
{
	DUMP_DISPLAY_MODE mode;
	LPTSTR name;
};
#define NUMBER_DISPLAY_MODE 2

// диалоговое окно CMemDumpDlg
class CMemDumpDlg : public CDialogEx
{
		CDebugger           *m_pDebugger;
		GFResizeDialogHelper m_Resizer;
		CDumpListCtrl        m_listMemory;
		CEnterEdit           m_AddrEdit;
		CFont                hFont;
		HACCEL               m_hAccelTable;
		int                 m_currentddm; //индекс текущего режима
		static DISPLAY_MODE_PARAM m_dmarray[NUMBER_DISPLAY_MODE]; //в этом массиве

	public:
		CMemDumpDlg(CWnd *pParent = nullptr);  // стандартный конструктор
		virtual ~CMemDumpDlg();

		enum { IDD = IDD_MEMDUMP_DLG };
		void                AttachDebugger(CDebugger *pDbgr);

		inline WORD         GetDumpAddress()
		{
			return m_listMemory.GetDumpAddress();
		}
		WORD GetDebugMemDumpWord(WORD dumpAddress);
		BYTE GetDebugMemDumpByte(WORD dumpAddress);
		void DisplayMemDump();

	protected:
		virtual void DoDataExchange(CDataExchange *pDX) override;    // поддержка DDX/DDV
		virtual BOOL PreTranslateMessage(MSG *pMsg) override;

	protected:
		// Созданные функции схемы сообщений
		LRESULT OnDumpAddressChange(WPARAM wParam, LPARAM lParam);
		virtual BOOL OnInitDialog() override;
		virtual void OnOK() override;
		virtual void OnCancel() override;
		afx_msg void OnSize(UINT nType, int cx, int cy);
		afx_msg void OnSetFocus(CWnd *pOldWnd);
		afx_msg void OnGetMinMaxInfo(MINMAXINFO *lpMMI);
		afx_msg void OnLvnItemchangedMdMemory(NMHDR *pNMHDR, LRESULT *pResult);
		afx_msg void OnBnClickedButtonDumpMode();
		DECLARE_MESSAGE_MAP()
};
