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

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

struct DISPLAY_MODE_PARAM
{
	DUMP_DISPLAY_MODE mode;
	UINT strID;
};

constexpr auto DISPLAY_MODES_NUM = 2;

// диалоговое окно CMemDumpDlg
class CMemDumpDlg : public CDialogEx
{
		GFResizeDialogHelper m_Resizer;
		CDumpListCtrl        m_ListMemory;
		CEnterEdit           m_EditAddr;
		CFont                m_hFont;
		HACCEL               m_hAccelTable;
		CString              m_strDumpAddr;
		int                  m_nCurrentDDM; // индекс текущего режима
		static DISPLAY_MODE_PARAM m_dmArray[DISPLAY_MODES_NUM]; // в этом массиве

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

		CSize               GetMinSize();

		enum { IDD = IDD_MEMDUMP_DLG };

		uint16_t            GetDebugMemDumpWord(uint16_t dumpAddress);
		uint8_t             GetDebugMemDumpByte(uint16_t dumpAddress);

		inline void         DisplayMemDump()
		{
			m_ListMemory.RefreshItems();
		}

	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()
};
