一些操作VC

来源:互联网 发布:国家兴衰周期表知乎 编辑:程序博客网 时间:2024/06/07 11:57

1、指定区域重绘::

  假如那个区域为(50,50,100,100),则可以这么写:
  CRect rect(50,50,100,100);
  InvalidateRect(rect);

2、文件操作(杂)

获取文件当前路径信息::
 AfxEnableControlContainer();
     char exeFullPath[MAX_PATH];
 GetModuleFileName(NULL, exeFullPath, MAX_PATH);
 CString strPath( exeFullPath);
 strPath = strPath.Left(strPath.ReverseFind('//'));
 strPath += _T("//bluecomb.bsk");
 int ret = SkinLoad(strPath.GetBuffer(0));
 strPath.Empty();

 

 

 CWnd   *st   =   GetDlgItem(IDC_PICTURE_LOAD);  
 CDC   *pDC   =   st->GetDC();  
 CPaintDC dc(st);      // device context for painting
 dc.SetBkMode( TRANSPARENT );
 
 CFile mFile;
 LONG  nLength;
 
 //1 打开文件并获得文件的真实大小
 jpgfilename = "E://temp.jpg";
 if ( mFile.Open( _T( jpgfilename),CFile::modeRead )
  &&( ( nLength = mFile.GetLength() ) > 0 ) )
 {
  //2 从堆中分配指定数量字节的一整块,这时系统无法提供零零碎碎的局部或全局的堆
  HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, nLength );
  LPVOID pvData = NULL;
  if ( hGlobal != NULL )
  {
   //3 锁定全局内存对象并返回它的首地址
   if ( ( pvData = GlobalLock(hGlobal) ) != NULL )
   {
    //4 把文件内容读进全局内存对象的地址空间中
    mFile.Read( pvData, nLength );
    mFile.Close();
    
    //5 GlobalUnlock函数把以GMEM_MOVEABLE方式分配的内存对象的锁定计数器减1
    GlobalUnlock( hGlobal );
    
    //6 从全局内存中创建stream对象,第二个参数指定当stream释放时是否自动释放全局内存
    IStream *pStm;
    CreateStreamOnHGlobal( hGlobal, TRUE, &pStm) ;
    
    //7 创建一个新的picture对象并用stream对象中的内容初始化
    IPicture *pPic;
    if( SUCCEEDED( OleLoadPicture( pStm, nLength, TRUE, IID_IPicture, (LPVOID*)&pPic ) ) )
    {
     //8 释放不要的stream对象并清空stream指针
     pStm->Release();
     pStm=NULL;
     
     OLE_XSIZE_HIMETRIC mWidth;
     OLE_YSIZE_HIMETRIC mHeight;
     
     //9 得到picture对象中图片的宽和高
     pPic->get_Width( &mWidth );
     pPic->get_Height( &mHeight );
     
     double fX,fY;
     
     //10 GetDeviceCaps(HORZRES)得到屏幕的宽度(单位:像素)GetDeviceCaps(HORZSIZE)得到屏幕的宽度(单位:毫米)
     fX = (double) dc.GetDeviceCaps(HORZRES) * (double)mWidth / ( (double)dc.GetDeviceCaps( HORZSIZE ) * 100.0 );
     fY = (double) dc.GetDeviceCaps(VERTRES) * (double)mHeight / ( (double)dc.GetDeviceCaps( VERTSIZE ) *100.0 );
     
     //11 把图像显示在dc中
     //根据背景大小缩放图片
     CRect rcClient;
     GetDlgItem(IDC_PICTURE_LOAD)->GetClientRect( &rcClient );
     
     if( FAILED( pPic->Render( dc.GetSafeHdc(), 0, 0, (DWORD)rcClient.Width() , (DWORD)rcClient.Height(), 0, mHeight, mWidth, -mHeight, NULL ) ) )
      AfxMessageBox( _T("渲染图片失败") );
     
     //12 释放不要的picture对象,并把指针清空
     pPic->Release();
     pPic=NULL;
     
     //13 释放不要的全局内存对象,这个千万别忘了(32位程序不需要这行,系统会自动释放;16位程序一定要)
     FreeResource(hGlobal);     
    }
    else
     AfxMessageBox( _T("从stream中装载图片失败") );    
   }
  }
 }

void CTS200SDK_DemoDlg::OnSavefile()
{
 CTime time = CTime::GetCurrentTime();
 CString sPath ;
 GetModuleFileName(NULL, sPath.GetBuffer(256), 256);
 sPath.ReleaseBuffer(256);
 int nPos = sPath.ReverseFind('//');
 sPath = sPath.Left(nPos + 1);
 
 CString sfilename ;
 sfilename.Format("%sP%02d%02d%02d%02d%02d", sPath, time.GetMonth(), time.GetDay(),
  time.GetHour(), time.GetMinute(), time.GetSecond()); 

 //保存图片
 CameraCaptureFile(sfilename, m_FileType, 80, m_CaptureResolution);
}

3、回调函数就是一种函数,不过这种函数不是你亲自去调用它, 而是当程序自己满足一定条件时它自己去调用它;

回调函数也是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数

回调函数必须有固定的格式,不是随便写的。这个格式由调用它的函数决定。
比如settimer里的第3个参数,必须声明成
void CALLBACK XXXXX(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime); XXXX是函数名,可以随便写。把XXXXX作为第3个参数传进去,这个函数就会间隔一段时间被调用一次。
再比如列表框排序比较的回调函数,必须声明成这样
static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);它会在排序比较2个参数大小时调用。

简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。
为什么要使用回调函数?
 

  因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。

private:
 //回调函数
 static int CALLBACK MyCallBackFunction(PFCAM_COMMU_INFO pCommuParam);


//回调函数

int CALLBACK CFCAMViewer_MessageView::MyCallBackFunction(PFCAM_COMMU_INFO pCommuParam)
{}


BOOL CFCAMViewer_MessageView::InitDeviceFunction()
{ HRESULT hResult;
 //打开设备
 m_hDevice = FCAM_GetDevice(1, CAMERA_1394);
 if (m_hDevice == NULL)
 {
  MessageBox("请确认是否插好设备!");
  return FALSE;
 }

 //设置回调接收方式
 hResult = FCAM_SetStreamCallBackRoutine(m_hDevice, MyCallBackFunction, (PVOID)this);
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 狗吃了脏东西拉稀呕吐怎么办 五个月宝宝怕吃药导致奶不喝怎么办 蒸锅锅盖吸住了怎么办锅比锅盖要大 豇豆没熟孕妇吃了中毒怎么办 孩子积食拉不出粑粑憋的直哭怎么办 2岁宝宝总是半夜拉粑粑怎么办 金毛拉很臭的稀粑粑怎么办 点餐系统登录后没有菜单怎么办? 环亚在线微交易亏了钱怎么办 钢管舞报了教练班觉得学不会怎么办 微信上聊天被外国人给骗了该怎么办 微信冒充朋友骗走我钱怎么办 凉皮调料水鸡精味精放多了怎么办 吃了地屈孕酮后月经不干不净怎么办 藕片用热水炒后变色了怎么办? 外汇延期收款忘了报告了怎么办 怀孕不小心吃了马生菜怎么办 高压锅的皮圈很容易坏是怎么办 华为应用市场账号密码忘记了怎么办 业主对我们提出批评意见时怎么办 向环保局投诉被公司发现了怎么办 在政务大厅上班被群众投诉怎么办 政府下发的文件通知不履行该怎么办 给私人老板开车不给工资怎么办 给个体老板开车不给工资怎么办 户口转走在人才市场的档案怎么办 外来媳妇转上海户口没有档案怎么办 公务员考试笔试差9分面试怎么办 想从事人事方面的工作没经验怎么办 教师资格考试后户籍转走认定怎么办 总经理离职了作为高管的我怎么办 企业换总经理想换供应商应该怎么办 换了晶振时间还快怎么办 职场两个人都想要你的情况下怎么办 造价起步工资太低又结婚了怎么办 3d保存时写入文件出错怎么办 无经验想在工地承包点小活怎么办 一级建造师挂靠后中标后怎么办 用360对系统修补漏洞很慢怎么办 如果美国和俄罗斯开战中国会怎么办 戴牙冠前临时补牙材料掉了怎么办