一些操作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);
}
- 一些操作VC
- vc对话框控件一些操作
- vc对话框控件一些操作
- VC一些操作,编译的基础问题
- 一些VC对计算机基本功能操作
- vc中注册表的一些简单操作
- VC下:文件操作的一些API
- 一些VC对计算机基本功能操作
- vc++/C++操作mysql数据库一些注意事项
- VC中操作注册表的一些函数(基础).
- VC中与菜单相关的一些操作
- VC操作操作Word
- VC中画图的几种方法和一些磁盘操作
- VC 中一些常见的文件操作,包括获取当前路径、复制文件等
- C对文件的一些操作(孙鑫vc++的阅读笔记)
- 一些零碎VC知识
- vc的一些常见问题
- 一些vc插件简介
- 数据库操作类
- const与readonly
- malloc函数的问题
- Imagine Cup 给我们带来了什么
- 动态规划解决矩阵左上角到右下角距离最大
- 一些操作VC
- VC 数据库相关
- spring day1
- spring day2
- IO流的基本练习--打印100以内的素数
- 用C语言实现常用排序算法
- DNS
- 传智播客.Net 0基础学编程网上课堂12号开讲了,想学习编程的朋友可以看一下
- 待机、休眠、睡眠(转)