[6]显示获取的数据

1.首先在初始化的时候创建一个线程来循环调用寻找人物信息的函数

BOOL InitDialog(HWND hwnd)
{

    //注册快捷键 F1
    RegisterHotKey(hwnd, 1, 0, VK_F1); //注意这里填写的热键标识符1,判断的时候也是判断标识符
    
    //存储读到的数据
    g_pPlayerBuffer = (PTCHAR)VirtualAlloc(NULL, 0X1000, MEM_COMMIT, PAGE_READWRITE);  //设置的全局变量缓冲区

    InitListView(hwnd); //初始化ListView

return FALSE;

}

2.在点击透视按钮的时候调用线程。

    case IDC_BUTTON_VIEW:

            //创建一个ThreadProcGetDate的线程,循环显示人物信息,参数暂时没有就设置个局部变量
            if (!GetThreadId(g_hReadThread))
            {
                g_hReadThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProcGetDate, (PDWORD)&dwParam, 0, NULL);

            }//运行前看看是否线程有效,如果没有则创建,如有有则跳过,防止用户一直按
        
            break;

3.填写创建读取线程的函数

/************************************************************************/
/*             读取线程函数                                               */
/************************************************************************/
VOID WINAPI ThreadProcGetDate(DWORD dwParam)
{
    ZeroMemory(g_pPlayerBuffer, sizeof stPlayerInfo * 33); //清零一块内存

    while (true)//通过循环调用来不停刷新人物信息    
    {
        FindPlayer(g_ProcessInfo.m_hProcess, g_ProcessInfo.m_dwBaseAddress, g_pPlayerBuffer);//调用人物查找函数
    }

}

4.将读取出的信息显示到控件上,首先初始化控件环境

/************************************************************************/
/*             ListView初始化                                            */
/************************************************************************/
VOID InitListView(HWND hWnd)
{
    //获得对话框句柄
    HWND hListViewCT = GetDlgItem(hWnd, IDC_LIST1);//获取主窗口上的某个空间
    HWND hListViewT = GetDlgItem(hWnd, IDC_LIST2);
    //列表名称
    PTCHAR ListName[] = { TEXT("序号"),TEXT("状态"),TEXT("血量"),TEXT("x"),TEXT("y"),TEXT("z") };

    //列表信息

    LVCOLUMN  listInf = { NULL };
    listInf.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
    listInf.fmt = LVCFMT_LEFT;  //列上标题向左对齐
    listInf.cx = 60;  //每一列的宽度
    //添加列
    for (int i =0;i<6;i++)
    {    
        listInf.pszText = ListName[i];
        ListView_InsertColumn(hListViewCT, i, &listInf); //宏,往指定的控件,添加列的标头
        ListView_InsertColumn(hListViewT, i, &listInf);
    }
    //设置双缓冲
    DWORD dwSty = ListView_GetExtendedListViewStyle(hListViewCT);//获取控件当前风格
    ListView_SetExtendedListViewStyle(hListViewCT, dwStym | LVS_EX_DOUBLEBUFFER);//设置新的风格
    
    dwSty = ListView_GetExtendedListViewStyle(hListViewT);
    ListView_SetExtendedListViewStyle(hListViewT, dwStym | LVS_EX_DOUBLEBUFFER);//设置新的
    //设置图像
}

5.显示到控件上

/***********************************************
**        ListView显示数据
***********************************************/
VOID ListViewPlayerInfo(HWND hWnd, PCHAR pPlayerBufferMemory)
{
    //全局任务信息
    stPlayerInfo* pstPlayerBuffer = (stPlayerInfo*)pPlayerBufferMemory;

    //获得对话框句柄
    HWND hListViewCT = GetDlgItem(hWnd, IDC_LIST_VIEW_CT);
    HWND hListViewT = GetDlgItem(hWnd, IDC_LIST_VIEW_T);

    //定义项目
    LVITEM ListObj = { NULL };
    ListObj.mask = LVIF_TEXT;
    //刷新 清空
    ListView_DeleteAllItems(hListViewCT);
    ListView_DeleteAllItems(hListViewT);
    //文本缓存
    TCHAR Buffer[20] = { 0 };
    for (DWORD i = 0; i < 32; i++)
    {
        if (pstPlayerBuffer[i].x == 0 &&
            pstPlayerBuffer[i].y == 0 &&
            pstPlayerBuffer[i].z == 0)
        {
            continue;
        }
        if (pstPlayerBuffer[i].dwCT == 3)                //3=CT阵营 2=T阵营
        {
            swprintf_s(Buffer, 20, TEXT("%d"), i);
            ListObj.iSubItem = 0;
            ListObj.pszText = Buffer;
            ListView_InsertItem(hListViewCT, &ListObj);    //设置序号

            if (pstPlayerBuffer[i].dwHp == 1 || pstPlayerBuffer[i].dwState == 23)
                swprintf_s(Buffer, 20, TEXT("×"));
            else
                swprintf_s(Buffer, 20, TEXT(""));
            ListObj.iSubItem = 1;
            ListObj.pszText = Buffer;
            ListView_SetItem(hListViewCT, &ListObj);    //设置死活状态

            swprintf_s(Buffer, 20, TEXT("%d"), pstPlayerBuffer[i].dwHp);
            ListObj.iSubItem = 2;
            ListObj.pszText = Buffer;
            ListView_SetItem(hListViewCT, &ListObj);    //设置血量

            swprintf_s(Buffer, 20, TEXT("%.2f"), pstPlayerBuffer[i].x);
            ListObj.iSubItem = 3;
            ListObj.pszText = Buffer;
            ListView_SetItem(hListViewCT, &ListObj);    //设置x

            swprintf_s(Buffer, 20, TEXT("%.2f"), pstPlayerBuffer[i].y);
            ListObj.iSubItem = 4;
            ListObj.pszText = Buffer;
            ListView_SetItem(hListViewCT, &ListObj);    //设置y

            swprintf_s(Buffer, 20, TEXT("%.2f"), pstPlayerBuffer[i].z);
            ListObj.iSubItem = 5;
            ListObj.pszText = Buffer;
            ListView_SetItem(hListViewCT, &ListObj);    //设置z
        }
        else
        {
            swprintf_s(Buffer, 20, TEXT("%d"), i);
            ListObj.iSubItem = 0;
            ListObj.pszText = Buffer;
            ListView_InsertItem(hListViewT, &ListObj);    //设置序号

            if (pstPlayerBuffer[i].dwHp == 1 || pstPlayerBuffer[i].dwState == 23)
                swprintf_s(Buffer, 20, TEXT("×"));
            else
                swprintf_s(Buffer, 20, TEXT(""));
            ListObj.iSubItem = 1;
            ListObj.pszText = Buffer;
            ListView_SetItem(hListViewT, &ListObj);    //设置死活状态

            swprintf_s(Buffer, 20, TEXT("%d"), pstPlayerBuffer[i].dwHp);
            ListObj.iSubItem = 2;
            ListObj.pszText = Buffer;
            ListView_SetItem(hListViewT, &ListObj);    //设置血量

            swprintf_s(Buffer, 20, TEXT("%.2f"), pstPlayerBuffer[i].x);
            ListObj.iSubItem = 3;
            ListObj.pszText = Buffer;
            ListView_SetItem(hListViewT, &ListObj);    //设置x

            swprintf_s(Buffer, 20, TEXT("%.2f"), pstPlayerBuffer[i].y);
            ListObj.iSubItem = 4;
            ListObj.pszText = Buffer;
            ListView_SetItem(hListViewT, &ListObj);    //设置y

            swprintf_s(Buffer, 20, TEXT("%.2f"), pstPlayerBuffer[i].z);
            ListObj.iSubItem = 5;
            ListObj.pszText = Buffer;
            ListView_SetItem(hListViewT, &ListObj);    //设置z
        }
    }
}
原创学习随笔心得,请勿转载!
原文地址:https://www.cnblogs.com/hanhandaren/p/11109600.html