自学内容网 自学内容网

gh0st远程控制——客户端界面编写(二)

● 补充小知识:枚举类型的使用

每个控件(比如列表)都对应一个自己的唯一的变量

使用枚举类型可以将变量名与编号进行绑定,以后程序需要扩展的时候,只需要在定义枚举变量的位置重新修改编号就可以了,这样全局的所有变量的编号就都跟着修改了

由于列表这个数据结构在本项目中十分重要,所有需要放在一个每一个文件都能访问到的文件当中,比如"pcb.h"

示例1:默认是0 1 2 3 4 5这样和数组一样递增的

enum Day {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
};

int main() {
    // 使用枚举类型
    Day today = Wednesday;

    // 输出枚举常量的值
    std::cout << "Today is: " << today << std::endl;

    return 0;
}

示例2:也可以是乱序使用的

enum Color {
    Red = 1,
    Green = 2,
    Blue = 6
};

6、为列表控件添加条目

写代码的时候找不到对话框,如何转到资源视图?

为列表控件添加初始化函数,如果代码都写在OnInitDlg()函数里面,显得太过于臃肿了,于是我们考虑在CPCRemoteDlg类里面添加一个成员函数initList()用来初始化列表

  

在initList()函数中实现为列表添加条目

// 初始化对话框中的列表
int CPCRemoteDlg::initList()
{
// TODO: 在此处添加实现代码.

//为Online_List添加条目
for (int i = 0; i < ONLINELIST_LEN; i++) {
m_CList_Online.InsertColumn(i, g_Column_Data_Onlie[i].title, LVCFMT_CENTER, g_Column_Data_Onlie[i].nWidth);
}

//为MessageList添加条目
for (int i = 0; i < MESSAGELIST_LEN; i++) {
m_CList_Message.InsertColumn(i, g_Column_Data_Message[i].title, LVCFMT_CENTER, g_Column_Data_Message[i].nWidth);
}

return 0;
}

数据结构的定义:

2个枚举类型的列表定义在"pcb.h"文件当中:

enum
{
ONLINELIST_IP = 0,          //IP的列顺序
ONLINELIST_ADDR,            //地址
ONLINELIST_COMPUTER_NAME,   //计算机名/备注
ONLINELIST_OS,              //操作系统
ONLINELIST_CPU,             //CPU
ONLINELIST_VIDEO,           //摄像头
ONLINELIST_PING,            //PING
ONLINELIST_LEN//OnlineList的总长度
};

enum
{
MESSAGELIST_TYPE,//信息类型
MESSAGELIST_TIME,//时间
MESSAGELIST_INFO,//信息
MESSAGELIST_LEN//MessageList的总长度
};

列表项定义在PCRemoteDlg.cpp文件当中:

typedef struct
{
char*   title;    //列表的名称
intnWidth;   //列表的宽度
}COLUMNSTRUCT;

COLUMNSTRUCT g_Column_Data_Onlie[] =
{
{"IP",148},
{"区域",150},
{"计算机名/备注",160},
{"操作系统",128},
{"CPU",80},
{"摄像头",81},
{"PING",81}
};

COLUMNSTRUCT g_Column_Data_Message[] =
{
{"信息类型",148},
{"时间",100},
{"信息内容",    660}
};

此时运行项目还是显示不出来条目,我们需要将2个列表的属性》视图:ICon 改为 Report:

然后运行起来就OK了:

注意:不要忘记在CPCRemoteDlg的initDlg函数里面调用😂😂😂

结果报C005错误

经排查是因为m_CList_Online错误地写成了m_CList_Message导致数组越界引发报错

修改为:

//为Online_List添加条目
for (int i = 0; i < ONLINELIST_LEN; i++) {
m_CList_Online.InsertColumn(i, g_Column_Data_Message[i].title, LVCFMT_CENTER, g_Column_Data_Message[i].nWidth);
}

最终运行结果截图:


原文地址:https://blog.csdn.net/Tandy12356_/article/details/135707191

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!