VC编程中常使用的子函数
来源:互联网 发布:obs视频录制软件 编辑:程序博客网 时间:2024/05/01 17:12
1. 改变光标形状
例如,改变光标为等待状态
加载别的形状的光标:HCURSOR hCursor = SetCursor(LoadCursor(NULL,IDC_WAIT));
注意,要保存SetCursor函数的返回值,用于恢复光标,使用SetCursor(hCursor)恢复原来的光标
2.1.判断某个文件是否存在
Determines whether a path to a file system object such as a file or directory is valid.
BOOL PathFileExists( LPCTSTR pszPath );
Parameters
- pszPath
- [in] Pointer to a null-terminated string of maximum length MAX_PATH that contains the full path of the object to verify.
Return Values
Returns TRUE if the file exists, or FALSE otherwise. Call GetLastError for extended error information.
Example
#include <windows.h>#include <iostream.h>#include "Shlwapi.h"void main( void ){// Valid file path name (file is there).char buffer_1[ ] = "C://TEST//file.txt"; char *lpStr1;lpStr1 = buffer_1;// Invalid file path name (file is not there).char buffer_2[ ] = "C://TEST//file.doc"; char *lpStr2;lpStr2 = buffer_2;// Return value from "PathFileExists".int retval;// Search for the presence of a file with a true result.retval = PathFileExists(lpStr1);if(retval == 1){cout << "Search for the file path of : " << lpStr1 << endl;cout << "The file requested /"" << lpStr1 << "/" is a valid file" << endl;cout << "The return from function is : " << retval << endl;}else{cout << "/nThe file requested " << lpStr1 << " is not a valid file" << endl;cout << "The return from function is : " << retval << endl;}// Search for the presence of a file with a false result.retval = PathFileExists(lpStr2);if(retval == 1){cout << "/nThe file requested " << lpStr2 << "is a valid file" << endl;cout << "Search for the file path of : " << lpStr2 << endl;cout << "The return from function is : " << retval << endl;}else{cout << "/nThe file requested /"" << lpStr2 << "/" is not a valid file" << endl;cout << "The return from function is : " << retval << endl;}}OUTPUT==============Search for the file path of : C:/TEST/file.txtThe file requested "C:/TEST/file.txt" is a valid fileThe return from function is : 1The file requested "C:/TEST/file.doc" is not a valid fileThe return from function is : 0
3. Rich Edit控件的使用
1) 在Dialog中放一个rich edit控件,然后用classwizard做一个变量对应这个控件,例如为m_RichEdit;
2) 在initdialog函数中,初始化这个控件
m_RichEdit.GetDefaultCharFormat(m_cf);m_cf.cbSize=sizeof(CHARFORMAT);m_cf.dwMask=CFM_COLOR|CFM_CHARSET|CFM_FACE;m_cf.crTextColor=COLOR_NORMAL;m_cf.bCharSet=GB2312_CHARSET;memcpy(m_cf.szFaceName,"宋体",4);m_RichEdit.SetDefaultCharFormat(m_cf);m_RichEdit.SetBackgroundColor(0,RGB(200,200,200));m_Font.CreatePointFont(120,"宋体");m_RichEdit.SetFont(&m_Font);
3) 制作几个功能函数:
void XXXX::ClearMsg(){m_RichEdit.SetWindowText("");}void XXXX::ShowMsg(CString str,COLORREF dw,BOOL bBold){CHARFORMAT cf;m_RichEdit.GetDefaultCharFormat(cf);cf.dwMask=CFM_COLOR|CFM_PROTECTED;cf.dwEffects=CFE_PROTECTED;if(bBold) {cf.dwMask|=CFM_BOLD;cf.dwEffects|=CFE_BOLD;}cf.crTextColor=dw;//------------m_RichEdit.HideSelection(1,0);m_RichEdit.SetSel(0,-1);m_RichEdit.SetSel(-1,-1);m_RichEdit.SetSelectionCharFormat(cf);m_RichEdit.ReplaceSel(str);}
void XXXX::OnRicheditCopy() {m_RichEdit.Copy();}void XXXX::OnRicheditSaveas() {LPCTSTR lpszFilter="文本文件(*.txt)|*.txt|所有文件|*.*|";CFileDialog fd(0,"txt",NULL,0,lpszFilter);fd.m_ofn.lpstrTitle="保存文件...";if(fd.DoModal()==IDOK){CString str;m_RichEdit.GetWindowText(str);CFile file;if(!file.Open(fd.GetPathName(),CFile::modeCreate|CFile::modeWrite)) return;file.WriteHuge(str,str.GetLength());file.Close();}}
void XXXX::OnRicheditSelectall() {m_RichEdit.SetSel(0,-1);}
3. 创建浏览目录窗口
#include <Shlobj.h>
UpdateData(TRUE);char szDir[MAX_PATH];BROWSEINFO bi;ITEMIDLIST *pidl;bi.hwndOwner = this->m_hWnd;bi.pidlRoot = NULL;bi.pszDisplayName = szDir;bi.lpszTitle = "请选择目录";bi.ulFlags = BIF_STATUSTEXT | BIF_RETURNONLYFSDIRS;bi.lpfn = NULL;bi.lParam = 0;bi.iImage = 0;pidl = SHBrowseForFolder(&bi);if(pidl == NULL) return;if(!SHGetPathFromIDList(pidl, szDir)) {return;}else { strPath = szDir;}
4. 判断文件夹是否存在以及创建文件夹
Header: Declared in Shlwapi.h. Import Library: Shlwapi.lib.
CString strDirPath = m_strSavePath;strDirPath += "\\";strDirPath += m_strDeviceName;if(!PathIsDirectory(strDirPath)){if(!CreateDirectory(strDirPath,NULL)){MessageBox("创建目录失败!");}}
5. CFileDialog 构造函数参数说明
CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );参数意义如下:bOpenFileDialog 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。lpszDefExt 指定默认的文件扩展名。lpszFileName 指定默认的文件名。dwFlags 指明一些特定风格。lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如: "Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";
文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
6. 创建多级子目录函数
BOOL CGlobal::CreateMultipleDirectory(const CString& strPath){CString strDir(strPath);//存放要创建的目录字符串 //确保以'\'结尾以创建最后一个目录 if (strDir.GetAt(strDir.GetLength()-1)!=_T('\\')){ strDir += (_T('\\')); }CStringArray strArray;CString strTemp;//一个临时变量,存放目录字符串strTemp.Empty(); BOOL bSuccess = TRUE;//成功标志 //遍历要创建的字符串 for (int i=0;i<strDir.GetLength();++i){ if (strDir.GetAt(i) != _T('\\')) {//如果当前字符不是'\\' strTemp += (strDir.GetAt(i)); } else {//如果当前字符是'\\'strArray.Add(strTemp); //将当前层的字符串添加到数组中 strTemp += _T('\\'); } } //遍历存放目录的数组,创建每层目录 for (i = 0 ; i < strArray.GetSize() ; i++){CString strDirPath = strArray.GetAt(i); if(!PathIsDirectory(strDirPath)){ // 判断目录是否存在bSuccess = CreateDirectory(strDirPath, NULL) ? TRUE:FALSE; // 不存在,创建目录if(!bSuccess){break;}} } return bSuccess;}
7.十六进制字符串转换为十进制数
int H2D(CString str){char** g=NULL;return (int)strtol(str,g,16);}
8. 如何判断某个对象是哪个类的实例
IsKindOf(RUNTIME_CLASS(CXXXX)) , ASSERT_KINDOF(类名, 类指针);
9.16进制的字符串转化为16进制数
使用sscanf;例如:
CString strText,
DWORD dwTT;
sscanf(strText,"%x",&dwTT);
10. 从文档指针中得到视图指针
POSITION pos = pDoc->GetFirstViewPosition();CView* pView = pDoc->GetNextView(pos);
并且可以从视图指针得到Frame指针
CFrameWnd *pFrame = pView->GetParentFrame();
11. 动态添加动态库指令:
#pragma comment(lib, "XXX.lib")
12.用CString作为Key使用CMap
CMap在用CString做key类型时,ARG_KEY要选LPCTSTR
CMap<CString, LPCTSTR, int, int> typeMap; typeMap.SetAt(_T("ONE"),1); typeMap.SetAt(_T("TWO"),2); int nValue = 0; BOOL ret = typeMap.Lookup(_T("ONE"), nValue); ret = typeMap.Lookup(_T("THREE"), nValue); ret = typeMap.Lookup(_T("TWO"), nValue);
关键是ARG_KEY要选LPCTSTR
13.Windows精确定时
LARGE_INTEGER litmp; LONGLONG QPart1,QPart2; double dfMinus, dfFreq, dfTim; QueryPerformanceFrequency(&litmp); dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率 QueryPerformanceCounter(&litmp); QPart1 = litmp.QuadPart;// 获得初始值 Sleep(100); QueryPerformanceCounter(&litmp); QPart2 = litmp.QuadPart;//获得中止值 dfMinus = (double)(QPart2-QPart1); dfTim = dfMinus / dfFreq;// 获得对应的时间值,单位为秒14. 关于float转DWORD和DWORD转floatDWORD dw = 0; float f1 = 0.25; cout<<"f1 = "<<f1<<endl; dw = *((DWORD*)&f1); cout<<"dw = *((DWORD*)&f1): "<<dw<<endl; f1 = 0.0; cout<<"f1 = 0.0: "<<f1<<endl; f1 = *((float*)&dw); cout<<"f1 = *((float*)&dw): "<<f1<<endl; 运行结果如下f1 = 0.25dw = *((DWORD*)&f1): 1048576000f1 = 0.0: 0f1 = *((float*)&dw): 0.25其实这就是利用了编译器转型的手段,这里float和DWORD都是4个字节长度,通过以上手段转型,不会丢失二进制的数据,所以也就不会丢失原始数据。*((DWORD*)&f1),首先获取一个float指针,然后将其强制转换为DWORD类型的指针,最后解引用,获取的是一个DWORD类型的值,*((float*)&dw)则是同理15 .字符串转化为10进制数/10进制数转化为字符串字符串转化为10进制数: strtol( const char *nptr, char **endptr, int base );10进制数转化为字符串:char *_itoa( int value, char *string, int radix );
16.判断两个矩形是否相交:
BOOL Intersects(const CRect& rect1,const CRect& rect2){rect1.NormalizeRect();rect2.NormalizeRect();return !(rect1 & rect2).IsRectEmpty();}
17.批处理直接删除注册表命了:
reg delete HKEY_CURRENT_USER\Software\XXX\XXXX /f
直接用/fc参数就可以了,不需要其他的参数
- VC编程中常使用的子函数
- 使用子函数开辟内存的问题
- 编程常用子函数
- 编码中常使用的工具
- iOS中常使用的开源类库
- C/C++编程中常遇到的问题
- 我编程中常犯的错误
- 编程中常用到的字符集小结
- 编程中常用到的输入模块
- 编程中常用到的一些代码[转]
- 网络编程中常需考虑的情况
- C++编程中常遇到的问题
- 关于使用子函数里分配的内存的一个体会
- 函数调用子函数,注意子函数的位置
- 栈的子函数
- VC中常常碰到的链接错误总结
- vc中常用到的几个内存分配函数
- Struts框架中常量文件的使用
- 教务系统——班级管理——全部代码
- 三年不重装:令电脑百毒不侵的13个妙招
- asterisk学习笔记8--voicemail
- 谈关于mysql中文模糊查找问题
- JAVA排序汇总
- VC编程中常使用的子函数
- openSUSE 11.2 KDE4.3下Totem无法开启音频设备的解决方法
- HGE系列之三 渐入佳境
- [Linux]GNU自动化工具(automake工具链)
- iconv用法
- 《正在爆发的互联网革命》入围Sina2009最佳商业图书
- Python字符串的encode与decode
- aaaaaa
- Winsock异步模式之一select 选择模式