做免杀的同学可能都会吧,增大文件体积防止云上传是个不错的方法
功能界面:
选择文件,是对话框支持文件拖放(详情见:http://blog.csdn.net/eldn__/article/details/8394060)
为对话框添加成员变量:CString m_filepath 用于保存用户选择的文件路径
Slider Control 控件 关联变量: 控件变量 m_slider (用于操纵控件) UINT m_size (用于方便获取控件的当前值)
编辑框控件:ID IDC_EDIT_FILESIZE 关联变量:UINT m_num(方便设置控件值)
控件属性相关设置:
对话框:Accept Files: True
Slider 控件:
Enable Selection Rang :True
Point :Top/Left
Tick Marks:True
Auto Ticks:True
另外如果不希望对话框可以被调节大小,可以设置对话框的Border : Dialg Frame
功能函数实现:
一,两种选择文件的方式(弹出选择对话框, 拖放)
(详情见:http://blog.csdn.net/eldn__/article/details/8394060)
二,根据Slider位置,增加文件的大小
首先在OnInitDialog()中初始化Slider的相关属性:
// TODO: 在此添加额外的初始化代码
m_slider.SetRange(0,100);//设置滑块的取值范围
m_slider.SetTicFreq(10);//设置滑块每格的大小
m_slider.SetPos(0);//设置滑块的初始位置
SetDlgItemText(IDC_EDIT_FILESIZE,"0");//设置编辑框的默认值
选择文件按钮功能函数:
void CAddFileSizeDlg::OnBnClickedBtnSelectfile()
{
// TODO: 在此添加控件通知处理程序代码
CFileDialog fileDlg(true);
fileDlg.m_ofn.lpstrTitle = "选择你要增大的文件";
fileDlg.m_ofn.lpstrFilter = "Executeable File(*.exe)\0*.exe\0\0";
if(IDOK==fileDlg.DoModal())
{
m_filepath = fileDlg.GetPathName();
SetDlgItemText(IDC_EDIT_FILEPATH,m_filepath);
}
}
增大文件函数实现:
为Slider控件添加响应事件NM_RELEASEDCAPTURE
在事件函数中获取控件值:
void CAddFileSizeDlg::OnNMReleasedcaptureSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
m_size = m_sliderNum;
UpdateData(false);
*pResult = 0;
}
单击增加按钮实现增大文件大小:
void CAddFileSizeDlg::OnBnClickedBtnDo()
{
// TODO: 在此添加控件通知处理程序代码
typedef HANDLE
(WINAPI
*CreateFileAT)(
__in LPCSTR lpFileName,
__in DWORD dwDesiredAccess,
__in DWORD dwShareMode,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
__in DWORD dwCreationDisposition,
__in DWORD dwFlagsAndAttributes,
__in_opt HANDLE hTemplateFile
);
CreateFileAT pCreateFileA=(CreateFileAT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"CreateFileA");
typedef DWORD
(WINAPI
*SetFilePointerT)(
__in HANDLE hFile,
__in LONG lDistanceToMove,
__in_opt PLONG lpDistanceToMoveHigh,
__in DWORD dwMoveMethod
);
SetFilePointerT pSetFilePointer=(SetFilePointerT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"SetFilePointer");
HANDLE hFile1;
DWORD dwBytes1;
hFile1 = pCreateFileA(m_filepath, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
pSetFilePointer(hFile1, 0, NULL,FILE_END);
int ii = 0;
int DesSize = m_slider.GetPos();
char *szStrAdd;
szStrAdd=new char[1024*1024];
memset(szStrAdd,'.',1024*1024);
while(ii < DesSize)
{
typedef int
(WINAPI
*lstrlenAT)(
__in LPCSTR lpString
);
lstrlenAT plstrlenA=(lstrlenAT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"lstrlenA");
WriteFile(hFile1, szStrAdd, plstrlenA(szStrAdd), &dwBytes1, NULL);
ii++;
}
MessageBox("增加文件体积成功");
CloseHandle(hFile1);
}
另外i补充个我总喜欢犯糊涂的地方:
updateData(true) //用窗口中的数据去初始化控件关联的变量
UpdateData(false); //更新数据到窗口
源代码:
http://download.csdn.net/detail/eldn__/4920248