● 补充小知识:枚举类型的使用
每个控件(比如列表)都对应一个自己的唯一的变量
使用枚举类型可以将变量名与编号进行绑定,以后程序需要扩展的时候,只需要在定义枚举变量的位置重新修改编号就可以了,这样全局的所有变量的编号就都跟着修改了
由于列表这个数据结构在本项目中十分重要,所有需要放在一个每一个文件都能访问到的文件当中,比如"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; //列表的名称
int nWidth; //列表的宽度
}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);
}
最终运行结果截图: