VC常用代码(VS2008下测试过的)

本文介绍了MFC编程中的一些实用技巧,包括确保程序仅运行一个实例、打开和保存文件、执行控制台命令或程序、处理文件拖放、以及查找指定目录下的文件等。这些技巧对于MFC应用程序的开发非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1.只允许运行程序的一个实例

MFC写在InitInstance函数中

    HANDLE hMutex = CreateMutex(NULL, TRUE, _T("test"));
//创建一个有名的互斥对象 if (ERROR_ALREADY_EXISTS == GetLastError())//如果互斥对象创建失败 { CWnd *wnd; //找到当前允许程序的窗口,第二个程序为窗口名 if( wnd = CWnd::FindWindow(0, _T("ControlDemo"))) {       //恢复窗口 wnd->ShowWindow(SW_RESTORE);       //最前端显示 wnd->SetForegroundWindow(); } return FALSE; }


2.打开保存文件

1     LPCTSTR pFileType =_T("音乐/电影文件(mp3,wav,avi,asf)|*.mp3;*.wav;*.avi;*.asf|mp3 文件(*.mp3)|*.mp3|音频文件 (*.wav)|*.wav|视频文件 (*.avi)|*.avi|Window Media 文件(*.asf)|*.asf|所有文件 (*.*)|*.*||");
2     CFileDialog dlg(FALSE, _T("打开MP3文件"), _T("默认打开的文件名"), OFN_FILEMUSTEXIST|OFN_NOCHANGEDIR, pFileType); 
3     if(dlg.DoModal()==IDOK) 
4     { 
5         CString m_filename=dlg.GetPathName(); 
6         
7     } 

3.打开目录

 1     TCHAR szPath[MAX_PATH];     //存放选择的目录路径 
 2     CString str;
 3 
 4     ZeroMemory(szPath, sizeof(szPath));   
 5 
 6     BROWSEINFO bi;   
 7     bi.hwndOwner = m_hWnd;   
 8     bi.pidlRoot = NULL;   
 9     bi.pszDisplayName = szPath;   
10     bi.lpszTitle = L"请选择需要打开的目录:";   
11     bi.ulFlags = 0;   
12     bi.lpfn = NULL;   
13     bi.lParam = 0;   
14     bi.iImage = 0;   
15     //弹出选择目录对话框
16     LPITEMIDLIST lp = SHBrowseForFolder(&bi);   
17 
18     if(lp && SHGetPathFromIDList(lp, szPath))   
19     {
20         str.Format(_T("选择的目录为 %s"),  szPath);
21         AfxMessageBox(str); 
22     }
23     else   
24         AfxMessageBox(_T("无效的目录,请重新选择"));  


4.执行控制台命令和打开程序
有3种方式可以实现。

 1 WinExec("cmd", SW_SHOW);
//
执行的程序名称{文件名和参数; 如没指定路径会按以下顺序查找: 程序目录/当前目录/System32/Windows/PATH环境变量},显示方式  2 system("cmd"); 3 ShellExecute(NULL, _T("open"),_T("cmd"),NULL,NULL, SW_SHOWNORMAL); 4  /* 5 ShellExecute(   HWND hwnd, //父窗口句柄 (如:NULL,Handle等) 6   LPCSTR lpOperation, //操作类型 (如:"open")*要加英文双引号 7   LPCSTR lpFile, //要进行操作的文件或路径 8   LPCSTR lpParameters, //当lpOperation为“explore”时指定要传递的参数,通常设为NULL 9   LPCSTR lpDirectory, //指定默认目录,通常设为NULL 10   INT nShowCmd //文件打开的方式,以通常方式还是最大化或最小化显示,一般为SW_SHOWNORMAL 11   ) 12 参数说明: 13   ●hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口句柄,即Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。 14   ●Operation:用于指定要进行的操作。其中“open”操作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件夹;“print”操作表示打印由FileName参数指定的文件;“explore”操作表示浏览由FileName参数指定的文件夹。当参数设为nil时,表示执行默认操作“open”。 15   ●FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。 16   ●Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。 17   ●Directory:用于指定默认目录。 18   ●ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。 19   若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。

传入的参数既可以是cmd命令,也可以是exe程序

例:

关机:system("shutdown -s -t 0");

打开磁盘: system("explorer.exe D:\\")

 PROCESS_INFORMATION pi;
 STARTUPINFO si;
 memset(&si,0,sizeof(si));
 si.cb=sizeof(si);
 si.wShowWindow=SW_SHOW;
 si.dwFlags=STARTF_USESHOWWINDOW;
 bool fRet=CreateProcess(L"C:\\Test.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);

5.文件拖动

//1 添加 WM_DropFILES 静态消息 
//2 在OnInitDialog()函数中加入 
DragAcceptFiles(TRUE);//允许拖放 
//3 WM_DropFILES 的处理函数为 

 1     unsigned int nFiles=DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,0);//取得拖放的文件总数 
 2     for (unsigned int i = 0; i < nFiles; i++)//循环取得文件名 
 3     { 
 4         unsigned int nLen = DragQueryFile(hDropInfo, i, NULL, 0)+1;//取得文件名长度 
 5         char *psBuffer = new char[nLen]; 
 6         unsigned int sLen = DragQueryFileA(hDropInfo, i, psBuffer, nLen);//取得文件名到psBuffer中,sLen为实际拷贝的字符数 
 7         CString str(psBuffer);
 8         ListBox.AddString(str);//将路径加入ListBox中
 9         delete [] psBuffer; 
10     } 
11     DragFinish(hDropInfo);//结束 

 

6.文件查找

 1 void CControlDemoDlg::FindAllFile(const CString &strPath, const CString &strType)
 2 {
 3     CFileFind file;
 4     BOOL bScanFirst = FALSE;//目录是否是第一次扫描
 5     CString strRealPath;//将路径和文件类型进行拼接
6 strRealPath.Format(_T("%s\\*.*"),strPath); 7 bool bFind = file.FindFile(strRealPath); 8 while(bFind) 9 { 10 bFind = file.FindNextFile(); 11 CString strTemp = file.GetFilePath(); 12 if (!file.IsDots() && !file.IsDirectory())//如果不是目录 13 { 14 if (!bScanFirst) 15 { 16 FindTypeFile(strPath, strType);//查找当前文件所在文件夹下指定类型的文件
17
bScanFirst = TRUE; 18 } 19 } 20 else if (!file.IsDots() && file.IsDirectory())//如果是目录,排除.和..两种类型的目录 21 { 22 FindAllFile(strTemp, strType);())//递归目录 23 } 24 } 25 } 26 27 void CControlDemoDlg::FindTypeFile(const CString &strPath, const CString &strType) 28 { 29 CFileFind file; 30 CString strRealPath; 31 strRealPath.Format(_T("%s\\%s"),strPath,strType); 32 bool bFind = file.FindFile(strRealPath); 33 while(bFind) 34 { 35 bFind = file.FindNextFile(); 36 CString strTemp = file.GetFilePath(); 37 if (!file.IsDots() && !file.IsDirectory())//如果是指定格式的文件则加入列表框 38 { 39 ListBox.AddString(strTemp);//添加到ListBox
40 } 41 } 42 }

 

 

2012-06-11 09:11 0 1.txt 2012-06-11 08:36 377,398 300个加密解密代码.rar 2012-06-11 08:40 7,526,054 51CTO下载-c++游戏源代码(扫雷,俄罗斯方块等).rar 2012-06-11 08:36 34,702 AES加密解密程序源代码.rar 2012-06-11 08:36 279,706 ARM JTAG调试原理完整源代码包.rar 2012-06-11 08:46 1,691,629 Asm汇编编译器(VC++6.0源代码).rar 2012-06-11 08:57 88,576 C++ 开发中内存分配及堆和栈的区别.doc 2012-06-11 08:52 190,100 C++中二维数组与指针关系的剖析.pdf 2012-06-11 08:48 171,862 C++函数后加const的意义.pdf 2012-06-11 08:57 9,174 C++注册表操作大全.txt 2012-06-11 08:37 113,664 CCheckListBox和CListBox.doc 2012-06-11 08:45 4,764,563 C库函数源代码.rar 2012-06-11 08:51 225,293 C指针详解(经典,非常详细).pdf 2012-06-11 08:49 45,056 DES算法用C++实现的源代码.doc 2012-06-11 08:27 6,261,754 KTV.zip 2012-06-11 08:58 606,972 listView 美化.rar 2012-06-11 08:56 5,784,486 MFC实现QQ在线状态检测.rar 2012-06-11 08:49 3,537,063 VC 数据库编程三部教学.rar 2012-06-11 08:52 349 VC++ CImage使用简单实例.txt 2012-06-11 08:43 994,304 VC++_串口上位机编程实例.doc 2012-06-11 08:39 125,202 vc++图像图形处理-腐蚀与膨胀源码.rar 2012-06-11 08:57 48,680 VC++菜单编码.rar 2012-06-11 09:06 221,889,221 vc代码合集.rar 2012-06-11 08:50 2,645,640 VC编程100例.rar 2012-06-11 08:45 1,244,190 Visual C++ 2008 入门经典源代码.rar 2012-06-11 08:43 34,403,414 visual c++ 图像处理代码.zip 2012-06-11 08:54 40,000,000 Visual C++ 游戏编程基础.part01.rar 2012-06-11 08:52 40,000,000 Visual C++ 游戏编程基础.part02.rar 2012-06-11 08:51 0 Visual C++ 游戏编程基础.part03.rar 2012-06-11 08:50 275,438 visual c++ 高级编程技术--开发实例剖析源码.rar 2012-06-11 08:44 52,307,137 Windows驱动开发技术详解(pdf书.源代码).rar 2012-06-11 08:41 583,491 [C++]VC++动态链接库(dll)编程深入浅出.pdf 2012-06-11 08:47 88,186 《网络数据包捕获与应用的VC 6.0编程》.docx 2012-06-11 08:53 4,080 万年历查询系统源代码.c 2012-06-11 08:58 6,059,068 人脸识别.rar 2012-06-11 08:39 907 均值滤波源码.rar 2012-06-11 08:45 54,272 学会用 VC++ 动态链接库编写 DLL 木马.doc 2012-06-11 08:40 12,740 开关机操作C++.zip 2012-06-11 08:58 16,574,256 指纹识别程序源码.rar 2012-06-11 08:50 7,652 数据结构单链表的新建,查找,删除,插入,输出,排序,逆置.txt 2012-06-11 08:40 28,483 显示系统进程C++.rar 2012-06-11 08:46 3,628,865 神经网络PPT教程汇总 BP神经网络详解与实例 BP算法 神经网络 机器学习 马尔科夫链.rar 2012-06-11 08:36 889,798 精通Windows Sockets网络开发源码.rar 2012-06-11 08:40 16,068 获取网卡地址C++.zip 2012-06-11 08:43 2,247,310 贝叶斯网络学习方法和算法研究.pdf 2012-06-11 08:40 47,762 轻轻松松抓图标C++.zip 2012-06-11 08:40 0 鼠标测试C++.zip
编辑推荐 在实例功能说明部分,以图文的方式给出实例的功能说明及运行效果;   设计思想及相关技术部分给出该实例的设计思想及关键知识点;   程序实现及代码部分则详细说明了实例实现步骤及代码的详细解释;   实例总结部分对实例的关键技术及读者应注意的地方进行了归纳,便于读者在学习过程中举一反三。 本书特色: 1 精选23个专题应用实例,涵盖数据库开发、网络与通信开发、多媒体应用开发、数字图像处理、游戏编程5大热门领域。 2 典型模块程序与综合系统设计有机结合,详细介绍VC++2008各种领域的应用开发方法与技巧,适合各级读者快速学习和提高。 3 提供系统设计思路与实现方案,侧重程序设计思路和过程的介绍,对实例程序代码做详细注释,利于读者理解和巩固知识点。 4 本书盘书结合,光盘中附有实例的程序源代码,读者稍加修改,便可应用于自己的工作中或者完成自己的课题,物超所值。 内容推荐 全书从实用的角度出发,通过实例精讲的形式,详细介绍了VC++ 2008各种热门专题应用程序开发的方法与技巧。全书分6篇共25章,第1篇为VC++ 2008基础知识,简要介绍了C++编程基础、MFC编程基础及VC++ .NET平台与Windows编程;第2篇至第6篇为VC++ 2008专题应用程序开发实例,通过23个专题实例,详细深入地介绍了VC++ 2008各种领域的应用开发技术和技巧,具体包括数据库应用开发实例、网络与串口通信开发实例、多媒体应用开发实例和数字图像处理实例及游戏编程开发实例。   本书语言简洁,层次清晰,结构合理。重点突出了应用性和实用性两个基本原则。不但详细介绍了VC++ 2008各种领域的应用开发技术,而且提供了设计思路、关键技术与实现方案,侧重于程序设计思路和过程的介绍,并对实例的程序代码做了详细注释,有利于读者理解和巩固知识点。本书光盘中附有丰富的实例程序源代码,读者稍加修改,便可应用在自己的工作中或者用于完成自己的课题,物超所值。   本书适合普通高校计算机、自动化与电子技术等相关专业的大学生,以及从事相关程序开发工作的人员使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值