这个程序写了差不多两天吧,第一次用MFC写界面,还是比较陌生的,所以这里来整理以下。
CFileDialog dlgFile(TRUE, \
NULL, \
NULL, \
OFN_HIDEREADONLY, \
_T("Data Files (*exe;*.sys;*.dll)|*exe; *.sys; *.dll|All Files (*.*)|*.*||"), \
/*_T("Describe Files (*.exe)|*.exe|Worksheet Files (*.dll)|*.dll|Data Files (*.sys;*.dll)|*.sys; *.dll|All Files (*.*)|*.*||"), \*/
NULL);
说一下文件类型匹配:基本结构由两个字符串组成,第一个字符串作描述用,第二个字符串作匹配用,字符串间用 | 分隔,在有多个文件类型时使用分号分隔。
这个显示的就是第一个字符串的内容。
1.、要先设置表头:InsertColumn,之后设置每行的第一个:InsertItem,最后设置每行的内容:SetItemText。
2、设置网格与整行选中:
// 设置属性
this->m_list.SetExtendedStyle(this->m_list.GetExtendedStyle() | \
LVS_EX_FULLROWSELECT | //网格线 \
LVS_EX_GRIDLINES); //整行选中
3、第一列只能左对齐,如果想改变,那么设置表头时第一列为空串,设置完成后使用:DeleteColumn删除第一列。
4、插入内容不需要UpdateData(FALSE);
5、代码:
添加表头:
//添加节表头
CString table[] = { _T(""), _T("名称"), _T("内存偏移"), _T("内存大小"), _T("文件偏移") ,_T("文件大小") ,_T("属性") };
for (int i = 0; i < sizeof(table) / sizeof(table[0]); ++i)
{
//MessageBox(NULL, CString(table[i]), NULL);
this->m_list.InsertColumn(i, table[i], LVCFMT_CENTER, 90);
}
this->m_list.DeleteColumn(0);
设置内容:
for (int i = 0; i < pe.GetNumOfSection(T2A(this->path)); i++) {
this->m_list.InsertItem(i, CString(p->Name));
int count = 1;
str.Format(_T("%10X"), (int)p->VirtualAddress);
this->m_list.SetItemText(i, count++, str);
str.Format(_T("%08X"), (int)p->SizeOfRawData);
this->m_list.SetItemText(i, count++,str);
str.Format(_T("%08X"), (int)p->PointerToRawData);
this->m_list.SetItemText(i, count++, str);
str.Format(_T("%08X"), (int)p->VirtualAddress);
this->m_list.SetItemText(i, count++, str);
str.Format(_T("%08X"), (int)p->Characteristics);
this->m_list.SetItemText(i, count++, str);
p += 1;
}
1、SendMessage();
2、子类定义一个成员变量,父类创建子类对象的时候赋值。
需要先给控件所在对话框添加类,控件才能添加变量;对话框ID更改了,此时可允许对对话框添加类,改一下ID就好了。
强转了一下类型,报错,看内存才发现是将UniCode型的转为ASCII型的,每个英文字符后面都有一个0。
类名C开头,文件没有多出来的C开头;所以声明时不加C,使用时加C。
最后:写的时候报错,写完了就感觉没什么,没什么难的,就是孰能生巧吧,毕竟第一次用MFC。