// listtestDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "listtest.h"
#include "listtestDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// ClisttestDlg 对话框




ClisttestDlg::ClisttestDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(ClisttestDlg::IDD, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    m_postion = 0;
}

void ClisttestDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_LIST1, m_list);
}

BEGIN_MESSAGE_MAP(ClisttestDlg, CDialogEx)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &ClisttestDlg::OnLvnItemchangedList1)
    ON_BN_CLICKED(IDOK, &ClisttestDlg::OnBnClickedOk)
    ON_BN_CLICKED(IDCANCEL, &ClisttestDlg::OnBnClickedCancel)
END_MESSAGE_MAP()


// ClisttestDlg 消息处理程序

BOOL ClisttestDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    //  执行此操作
    SetIcon(m_hIcon, TRUE);            // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标

    // TODO: 在此添加额外的初始化代码
    // 为列表视图控件添加全行选中和栅格风格    
    m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);  
    m_postion=0;
    //初始化列
    m_list.InsertColumn(0,L"OFFSET",LVCFMT_CENTER,80);
    m_list.InsertColumn(1,L"0",LVCFMT_CENTER,30);
    m_list.InsertColumn(2,L"1",LVCFMT_CENTER,30);
    m_list.InsertColumn(3,L"2",LVCFMT_CENTER,30);
    m_list.InsertColumn(4,L"3",LVCFMT_CENTER,30);
    m_list.InsertColumn(5,L"4",LVCFMT_CENTER,30);
    m_list.InsertColumn(6,L"5",LVCFMT_CENTER,30);
    m_list.InsertColumn(7,L"6",LVCFMT_CENTER,30);
    m_list.InsertColumn(8,L"7",LVCFMT_CENTER,30);
    m_list.InsertColumn(9,L"8",LVCFMT_CENTER,30);
    m_list.InsertColumn(10,L"9",LVCFMT_CENTER,30);
    m_list.InsertColumn(11,L"10",LVCFMT_CENTER,30);
    m_list.InsertColumn(12,L"11",LVCFMT_CENTER,30);
    m_list.InsertColumn(13,L"12",LVCFMT_CENTER,30);
    m_list.InsertColumn(14,L"13",LVCFMT_CENTER,30);
    m_list.InsertColumn(15,L"14",LVCFMT_CENTER,30);
    m_list.InsertColumn(16,L"15",LVCFMT_CENTER,30);
    //m_list.InsertItem(m_postion,L"tmp_str");
    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void ClisttestDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // 用于绘制的设备上下文

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        // 使图标在工作区矩形中居中
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // 绘制图标
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialogEx::OnPaint();
    }
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR ClisttestDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}



void ClisttestDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    *pResult = 0;
}


void ClisttestDlg::OnBnClickedOk()
{
    // TODO: 在此添加控件通知处理程序代码
    //CDialogEx::OnOK();
    // TODO: 在此添加控件通知处理程序代码
    CFileDialog dlg(true);
    if (dlg.DoModal() == IDOK)
    {
        //this->MessageBox(L"选择的文件地址:" + dlg.GetPathName() + " | 选择的文件名:" + dlg.GetFileName() ,
        //    L"提示:",MB_OK);
    }
    else
        this->MessageBox(L"你选择了取消按钮");
    /*
    CFileDialog 相关属性值
    GetFileExt 获得所选文件的后缀名
    GetFileName 获得所选文件的名称
    GetFileTitle 获得文件全名  (不含扩展名)
    GetFolderPath 获得文件路径
    GetNextPathName 获得下一个文件路径全名(多选文件时使用)
    GetPathName 获得路径全名
    GetStartPosition 获得所选文件的第一个文件的定位信息(多选时使用)
    */
    FILE* fp;
    char tmp[2];
    int postion=0;
    int offsize=0;
    CString s;
    CString t;
    CString FileName;
    FileName=dlg.GetPathName();
    fp=_tfopen(FileName,_T("rb"));
    if(fp!=NULL)
    {
        while(!feof(fp))
        {
            t.Format(_T("%08d"),offsize);
            m_list.InsertItem(postion,t);
            //this->MessageBox(L"文件打开错误",s,MB_OK);
            //return;
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,1,s);//为当前行添加第2列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,2,s);//为当前行添加第3列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,3,s);//为当前行添加第4列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,4,s);//为当前行添加第5列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,5,s);//为当前行添加第6列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,6,s);//为当前行添加第7列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,7,s);//为当前行添加第8列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,8,s);//为当前行添加第9列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,9,s);//为当前行添加第10列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                m_list.SetItemText(postion,10,s);//为当前行添加第11列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,11,s);//为当前行添加第12列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,12,s);//为当前行添加第13列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,13,s);//为当前行添加第14列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,14,s);//为当前行添加第15列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,15,s);//为当前行添加第16列
            }
            if(!feof(fp))
            {
                tmp[0]=getc(fp); 
                tmp[1]='\0';
                s.Format(_T("%02X"),tmp[0]);
                //s=tmp;
                m_list.SetItemText(postion,16,s);//为当前行添加第17列
            }

            postion++;
            offsize+=16;

        }
    }
    else this->MessageBox(L"文件打开错误",L"请继续检查",MB_OK);

}


void ClisttestDlg::OnBnClickedCancel()
{
    // TODO: 在此添加控件通知处理程序代码
    CDialogEx::OnCancel();
}