这个程序写了差不多两天吧,第一次用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);
说一下文件类型匹配:基本结构由两个字符串组成,第一个字符串作描述用,第二个字符串作匹配用,字符串间用 | 分隔,在有多个文件类型时使用分号分隔。


这个显示的就是第一个字符串的内容。
二. Edit Control控件
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。
本文记录了一次使用MFC编写PE解析器的过程,包括文件对话框的文件类型匹配、Edit Control控件的使用技巧、父子类对话框信息传递方式、添加变量的注意事项、避免类型强转错误以及类命名规范。通过两天的学习和实践,作者总结了MFC界面编程的一些关键点。
2453

被折叠的 条评论
为什么被折叠?



