tip&trick in visual c++

来源:互联网 发布:淘宝助理阶梯价 编辑:程序博客网 时间:2024/05/14 02:29

0: 弹出鼠标右健 //这个是凑个数,因此作0解 :)
void Pop()
{
CMenu menu;
CMenu* popMenu;
menu.LoadMenu(IDR_MENU1);
popMenu=menu.GetSubMenu(0);
CPoint pt; GetCursorPos(&pt);
popMenu->TrackPopupMenu(TPM_LEFTBUTTON,pt.x,pt.y,this);
menu.Detach();
}
1: 得到格式化系统时间日期;
CString GetTime()
{
  1:
   SYSTEMTIME CurTime;
   GetLocalTime(&CurTime);
   CString str;
   str.Format("%4d%2d%2d %2d:%2d:%2d",CurTime.wYear,CurTime.wMonth,CurTime.wDay......);
    return str;
  2://这个比较简洁
   CString str=CTime::GetCurrentTime().FormatGmt("%m%d%y %H:%M%S");
   return str;
}

1.5 :得到逝去时间:)//没想到吧,还有1.5
   除了最常用的 GetTickCount()以外,我们还有很多
  #include "time.h"
  #include "sys/timeb.h"
  _timeb starttime,endtime;
 void StartTimer()
 {
   _ftime(&starttime);
 }
 void StopTimer()
 {
   _ftime(&endTime);
 }
double GetElapsedTime()
{
   double msecs=endtime.millitm-startTime.millitm;
   double secs=difftime(endtime.time,starttime.time);
   return secs+msecs/1000;
}
//其实除了这个还有别的更好的方法

2: ACCESS当前表完整插入不同数据库的另一表中
   如果为同一数据库,比较好办,如果是不同的数据库呢,使用  
   SQL语句则相当的简单:
   SQL="select * into b from a in "+'"'+"c://a.mdb"+'"';
   意为:
      把才c:/a.mdb 中的a表 插入到当前数据库表b中(系统会自动创建b表的结构)
  
3: 得到当前EXE文件的目录 
void GetExePath(CString& strPath)
{
 TCHAR buffer[MAX_PATH];
 TCHAR driver[MAX_PATH];
 TCHAR dir[MAX_PATH];

 GetModuleFileName(NULL,buffer,MAX_PATH);
 _splitpath(buffer,driver,dir,NULL);
 strcat(driver,dir);
        strPath.Format("%s",driver);
 }

4: 从字符串中返回要找的第一个字符位置 ,从开头以及从结尾找;
#include "string.h"  
int GetFirst(char* pFindStr,char ch)
{
   char *pdest;
   int result;
   pdest = strchr( pFindStr, ch );
   result = (int)(pdest - pFindStr + 1);
   if ( pdest != NULL )
      return result;
   else
     return -1;
}
int GetFirstBackWard(char* pFindStr,char ch)
{
   /* Search backward. */
   char* pdest;
   pdest = strrchr( string, ch );
   int result = (int)(pdest - pFindStr + 1);
   if ( pdest != NULL )
      return result;
   else
     return -1;
}
}

5:分解字符串
void ExtractStrings(char* str)
{
 char str[]="I,u,o,9,j";
 int i=0;
 CArray<CString> strs;
 strs.SetSize(10,5);
 while (bFind)
 {
   bFind=AfxExtractSubString(strs[i],str,i,',');
   i++;
 }
6: 得到剪贴板文字
CString GetClipBoardText();
{
 if(OpenClipboard())
 {
    CString str;
    str.Format("%s",(char*)GetClipboardData(CF_TEXT));
  }
 CloseClipboard();
}

7:删除文件夹//这个也作凑数解 :)
ENUM 的
void DeleteFileDoc(char* path,bool showProgress)
{
 SHFILEOPSTRUCT FileOp;
 //add begins...
 TCHAR buf[_MAX_PATH+2];
 memset(buf,0,sizeof(buf));
 _tcscpy(buf,path);
 //add ends...
 memset(&FileOp,0,sizeof(SHFILEOPSTRUCT));
 FileOp.hwnd=m_hWnd;
 FileOp.wFunc=FO_DELETE;
 FileOp.pFrom=buf; //改一下pFrom指针到buf.
 FileOp.pTo=NULL;
       FileOp.fFlags=FOF_ALLOWUNDO|FOF_SIMPLEPROGRESS;//|FOF_SILENT;
       if(!showProgress)
          FileOp.fFlags!=FOF_SLIENT; //不显示进度对话框
 FileOp.fAnyOperationsAborted=FALSE;
 FileOp.hNameMappings =NULL;
 FileOp.lpszProgressTitle ="正在执行删除操作";
 int rval=SHFileOperation(&FileOp);
 if(rval==0)
 {
  if(FileOp.fAnyOperationsAborted==TRUE)
  {
   AfxMessageBox("删除项目操作被取消!",MB_OK);
  }
  else
  {
   AfxMessageBox("删除目录操作成功!",MB_OK);
  }
 }
 else
 {
  AfxMessageBox("删除项目操作失败!",MB_OK|MB_ICONEXCLAMATION);
 }
}
8: 捕获 Ctrl+鼠标左键 组合
 WM_LBUTTONDOWN消息
//鼠标消息
 SHORT iState=GetKeyState(VK_CONTROL);
 int i=iState>>7;
        if (i==-1)
           AfxMessageBox("Ctrl+LButton");