项目——PE解析器(MFC)

这个程序写了差不多两天吧,第一次用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);

说一下文件类型匹配:基本结构由两个字符串组成,第一个字符串作描述用,第二个字符串作匹配用,字符串间用 | 分隔,在有多个文件类型时使用分号分隔。

项目——PE解析器(MFC)_第1张图片

项目——PE解析器(MFC)_第2张图片

这个显示的就是第一个字符串的内容。

 

二. 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)