vc常用代码2
扫描二维码
随时随地手机看文章
……21,程序只允许一个实例运行
//在这个位置调用FirstInstance函数
BOOL CWindowsApp::InitInstance()
{
if (!FirstInstance())
return FALSE; //已经有实例存在了,退出
AfxEnableControlContainer();
}
//FirstInstance函数
BOOL FirstInstance()
{
CWnd *pWndPrev;
//根据主窗口类名和主窗口名判断是否已经有实例存在了
if (pWndPrev = CWnd::FindWindow("#32770","Windows秘书"))//第二个参数为程序名
{
//如果存在就将其激活,并显示出来
pWndPrev->ShowWindow(SW_RESTORE);
pWndPrev->SetForegroundWindow();
return FALSE;
}else{
return TRUE;
}
}
………22,取得系统时间及计算时间差
DWORD system_runtime;
system_runtime=GetTickCount()/60000;//取得系统运行时间
SYSTEMTIME sysTime; // Win32 time information
GetLocalTime(&sysTime);
COleDateTime now(sysTime);
//COleDateTime now;
//now=now.GetCurrentTime();
//GetCurrentTime()取得时间与time( time_t *timer );和struct tm *localtime( const time_t *timer );所得时间相同只能到2037年
//而GetLocalTime(&sysTime);可到9999年
m_zbyear=now.GetYear();//年
m_zbmonth=now.GetMonth();//月
m_zbday=now.GetDay();//日
now.GetDayOfWeek();//weekday
COleDateTimeSpan sub;
sub.SetDateTimeSpan(m_howdaysafteris,0,0,0);//设定时间差为天数
now+=sub;
then.SetDateTime(,,,,,,,);//其它方式添加时保存的当时时间
if(!now.SetDate(m_jsyear,m_jsmonth,m_jsday)//检查时间是否正确 &&!then.SetDate(m_jsyear2,m_jsmonth2,m_jsday2))
{
sub=then-now;
CString cs;
cs.Format("%d年%d月%d日 相距 %d年%d月%d日/n/n %.0f天",m_jsyear,m_jsmonth,m_jsday,
m_jsyear2,m_jsmonth2,m_jsday2,sub.GetTotalDays());
MessageBox(cs);
}
else
MessageBox("您输入的时间有误,请重新输入!","Windows秘书",MB_OK|MB_ICONSTOP);
………23,文件操作
//打开文件对话框
CFileDialog dlg(TRUE, "mp3", NULL, OFN_FILEMUSTEXIST|OFN_NOCHANGEDIR,
"音乐/电影文件(*.mp3,*.wav,*.avi,*.asf)|*.mp3;*.wav;*.avi;*.asf|"/
"mp3 文件(*.mp3)|*.mp3|" /
"音频文件 (*.wav)|*.wav|" /
"视频文件 (*.avi)|*.avi|" /
"Window Media 文件(*.asf)|*.asf|" /
"所有文件 (*.*)|*.*||");
if(dlg.DoModal()==IDOK)
{
CString m_filename=dlg.GetPathName();
}
//读取文件
CFile file;
If (file.Open(m_filename,CFile::modeRead))
{
file.Read(zbpassword,sizeof(zbpassword));
}
file.Close();
//写入文件
if (file.Open(m_zbfilename,CFile::modeCreate|CFile::modeWrite))
{
zbfile.Write(zbpassword,sizeof(zbpassword));
}
file.Close();
………24,进制转换
CString BinaryToDecimal(CString strBinary)//转换二进制为十进制
{
int nLenth = strBinary.GetLength();
char* Binary = new char[nLenth];
Binary = strBinary.GetBuffer(0);
int nDecimal = 0;
for(int i=0;i<nLenth;i++)
{
char h = Binary[nLenth-1-i];
char str[1];
str[0] = h;
int j = atoi(str);
for(int k=0;k<i;k++) j=j*2;
nDecimal += j;
}
CString strDecimal;
strDecimal.Format("%d",nDecimal);
return strDecimal;
}
CString BinaryToHex(CString strBinary)//转换二进制为十六进制
{
int nLength = strBinary.GetLength();
CString str = strBinary;
//位数不是四的倍数时补齐
switch(nLength%4)
{
case 0:
break;
case 1:
strBinary.Format("%d%d%d%s",0,0,0,str);
break;
case 2:
strBinary.Format("%d%d%s",0,0,str);
break;
case 3:
strBinary.Format("%d%s",0,str);
break;
default:
return "";
break;
}
CString strHex,str1;
str1 = "";
nLength = strBinary.GetLength();
for(int i=1;i<=(nLength/4);i++)
{
//每四位二进制数转换为一十六进制数
str = strBinary.Left(4);
CString strDecimal = BinaryToDecimal(str);
int nDecimal = atoi(strDecimal.GetBuffer(0));
if (nDecimal<10)
str1.Format("%d",nDecimal);
else
{
char c = 'A' + (nDecimal-10);
str1.Format("%c",c);
}
strHex += str1;
strBinary = strBinary.Right(strBinary.GetLength()-str.GetLength());
}
return strHex;
}
unsigned char BtoH(char ch)//将16进制的一个字符转换为十进制的数
{
//0-9
if (ch >= '0' && ch <= '9')
return (ch - '0');
//9-15
if (ch >= 'A' && ch <= 'F')
return (ch - 'A' + 0xA);
//9-15
if (ch >= 'a' && ch <= 'f')
return (ch - 'a' + 0xA);
return(255);
}
CString DecimalToBinary(CString strDecimal)//转换十进制为二进制
{
int nDecimal = atoi(strDecimal.GetBuffer(0));
int nYushu; //余数
int nShang; //商
CString strBinary = "";
char buff[2];
CString str = "";
BOOL bContinue = TRUE;
while(bContinue)
{
nYushu = nDecimal%2;
nShang = nDecimal/2;
sprintf(buff,"%d",nYushu);
str = strBinary;
strBinary.Format("%s%s",buff,str);
nDecimal = nShang;
if(nShang==0)
bContinue = FALSE;
}
return strBinary;
}
CString BinaryToDecimal(CString strBinary)//转换二进制为十进制
{
int nLenth = strBinary.GetLength();
char* Binary = new char[nLenth];
Binary = strBinary.GetBuffer(0);
int nDecimal = 0;
for(int i=0;i<nLenth;i++)
{
char h = Binary[nLenth-1-i];
char str[1];
str[0] = h;
int j = atoi(str);
for(int k=0;k<i;k++) j=j*2;
nDecimal += j;
}
CString strDecimal;
strDecimal.Format("%d",nDecimal);
return strDecimal;
}
………25,数学函数
sin();
cos();
tan();
sqrt();
pow(x,y);
log();
log10();
………26,递归法遍历磁盘目录
void CQt::BrowseDir(CString strDir)
{
CFileFind ff;
CString str,cs,inifile;
inifile=regfilepath;
inifile+="//Windows秘书.ini";
CString szDir = strDir;
int index;
char jjj,ppp,ggg;
if(szDir.Right(1) != "//")
szDir += "//";
szDir += "*.*";
BOOL res = ff.FindFile(szDir);
while(res)
{
res = ff.FindNextFile();
if(ff.IsDirectory() && !ff.IsDots())
{
//如果是一个子目录,用递归继续往深一层找
BrowseDir(ff.GetFilePath());
}
else if(!ff.IsDirectory() && !ff.IsDots())
{
//显示当前访问的文件
str=ff.GetFilePath();
/* index=str.GetLength();
//MessageBox(str);
jjj=str.GetAt(index-3);
ppp=str.GetAt(index-2);
ggg=str.GetAt(index-1);
if(((jjj=='J'||jjj=='j')&&(ppp=='P'||ppp=='p')&&(ggg=='G'||ggg=='g'))||((jjj=='B'||jjj=='b')&&(ppp=='M'||ppp=='m')&&(ggg=='P'||ggg=='p')))
{
intNumber++;
cs.Format("%d",intNumber);
WritePrivateProfileString("图片目录文件",cs,str,inifile);*/
//Sleep(3);
}
}
}
ff.Close();//关闭
//cs.Format("%d",intNumber);
//WritePrivateProfileString("图片目录文件","total",cs,inifile);
//WritePrivateProfileString("图片目录文件","turntowhich","1",inifile);
}
//公用目录对话框****************************************************
//添加如下程序段
LPITEMIDLIST pidlBeginAt, pidlDestination ;
char szPath[ MAX_PATH] ;
// 取得开始菜单或桌面的PIDL
SHGetSpecialFolderLocation(AfxGetApp()->m_pMainWnd->m_hWnd,CSIDL_DESKTOP,&pidlBeginAt) ;
// 取得新建文件夹的父文件夹
if( !BrowseForFolder(pidlBeginAt ,
&pidlDestination,
"请选择图片目录的位置:"))
{
return ;
}
// 把PIDL转换为路径名
SHGetPathFromIDList( pidlDestination, szPath);
//添加如下函数
BOOL BrowseForFolder(
LPITEMIDLIST pidlRoot,//浏览开始处的PIDL
LPITEMIDLIST *ppidlDestination,
//浏览结束时所选择的PIDL
LPCSTR lpszTitle)//浏览对话框中的提示文字
{
BROWSEINFO BrInfo ;
ZeroMemory( &BrInfo, sizeof(BrInfo)) ;
BrInfo.hwndOwner = HWND_DESKTOP ;
BrInfo.pidlRoot = pidlRoot ;
BrInfo.lpszTitle = lpszTitle ;
//浏览文件夹
*ppidlDestination= SHBrowseForFolder(&BrInfo);
//用户选择了取消按钮
if(NULL == *ppidlDestination)
return FALSE ;/**/
return TRUE ;
}
//读写INI/ini文件*************************************************
//写入值 字段名 变量名 值 带目录文件名
WritePrivateProfileString("目录","path",cs, regpath);
//写入结构体 字段名 变量名 值 大小 带目录文件名
WritePrivateProfileStruct("字体","font",&LF,sizeof(LOGFONT),regpath);//结构体
//读入字符 字段名 变量名 默认值 字符缓冲区 长度 带目录文件名
GetPrivateProfileString("目录","path","", buffer.GetBuffer(260),260,regpath);
//读入整数值 字段名 变量名 默认值 带目录文件名
GetPrivateProfileInt("colors","red",255, regpath);
//读入结构体 字段名 变量名 值 大小 带目录文件名
GetPrivateProfileStruct("字体","font",&LF,sizeof(LOGFONT),regpath);
//位图操作,画图*****************************************************
CClientDC client(this);
BITMAP bmpInfo;
CDC memdc;
CBitmap picture;
memdc.CreateCompatibleDC(pdc);
memdc.SelectObject(&picture);
CRect re;
GetClientRect(&re);
client.BitBlt(0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,&memdc,0,0,SRCCOPY);
client.SetBkMode(TRANSPARENT);
client.SetTextColor(RGB(red,green,blue));
CFont font;
CFont *oldfont;
font.CreateFontIndirect(&LF);
oldfont=client.SelectObject(&font);
client.DrawText("",//注意这个字符串里如果只有一连串的字母或数字,没有空格或中文或标点符号,且总长度超过距形宽度,则不能自动换行!!
&re,DT_CENTER |DT_WORDBREAK);
client.SelectObject(oldfont);
//打开EXE/exe文件**********************************************
ShellExecute(GetSafeHwnd(),
"open",
"http://home.jlu.edu.cn/~ygsoft",//改这个文件名就可以了
NULL,
NULL,SW_SHOWNORMAL);
//or
LPITEMIDLIST pidlBeginAt;
// 取得桌面的PIDL
SHGetSpecialFolderLocation(AfxGetApp()->m_pMainWnd->m_hWnd,
CSIDL_DRIVES//这个标志为我的电脑
,&pidlBeginAt) ;
SHELLEXECUTEINFO exe;
ZeroMemory(&exe,sizeof(SHELLEXECUTEINFO));
exe.cbSize=sizeof(SHELLEXECUTEINFO);
exe.fMask=SEE_MASK_IDLIST;
exe.lpVerb="open";
exe.nShow=SW_SHOWNORMAL;
exe.lpIDList=pidlBeginAt;
ShellExecuteEx(&exe);
//取得函数不能正常返回的原因字符***************************
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_InsertS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
MessageBox((LPCTSTR)lpMsgBuf);
// Free the buffer.
LocalFree( lpMsgBuf );