MY NOTE 2010/10 N1

 

 

///////////////////////////进程间的通信方式有5种///////////////////

内存映射

WM_COPYDATA

邮槽

命名管道

全局原子

 

 

 

/////////////////////////怎样激活一个窗口//////////////////////////////////

[note] 这里通过进程hwnd打开创建进程的窗口

::SetForegroundWindow(hwnd);

::SetActiveWindow(hwnd);

 

 

//////////////////////怎样关闭进程//////////////////////////////////////////

//有主窗体,发送主窗口关闭消息,终止线程 

 ::PostMessage( hwnd, WM_CLOSE, 0, 0 ); 

 //如果没有主窗体,则用TerminateProcess终止进程

TerminateProcess( hwnd,1 )

 

 

//////////////////////CListCtrl选择操作/////////////////////////////////////

 

   CListCtrl * pListCtrl = (CListCtrl*)GetDlgItem(IDC_LISTPROCESS);

   POSITION pos = pListCtrl->GetFirstSelectedItemPosition();

   if (pos)

   {

     int nItemIndex = pListCtrl->GetNextSelectedItem(pos);

     //激活进程

     ActivateProcess(&g_tlist[nItemIndex]);

   }

 

 

//////////////////对文件的操作/////////////////

打开文件,若文件不存在,则创建一个新的

CFile cfile;

if(!cfile.Open( FILEPATH, CFile::modeRead | CFile::modeWrite ) )

{

 cfile.Open( FILEPATH , CFile::modeCreate);

}

 

//关闭文件

cfile.Close();

 

 

///////////////////创建列表CList///////////////////

CList<typename,const tepename&> 列表名;

AddTail(ARG_TYPE&    ); //添加到列表尾部

AddHead(ARG_TYPE& ); //添加到列表头部

SetAt( POSITION     , newContext); //设置某节点值

InsertAfter(POSITION, newContext);

 

 

 

///////////////怎样销毁一个数组///////////////////

char *pBuff = new char[255];

delete pBuff; //delete 后面要求是指针

pBuff = NULL;

 

 

 

///////////////怎样退出指定线程()//////////////////

     //等待4秒,如果读线程没有退出,则强制退出

    if (WaitForSingleObject(m_hReadThread,4000) == WAIT_TIMEOUT)

 {

 TerminateThread(m_hReadThread,0);

 }

 

 

 

 

////////////////////////

      我不是什么好战分子,至少我的青春还有一个尾巴!我有自己的老婆孩子,父母亲人。我希望能够和她们一起在和平阳光下过着平静而幸福的生活!但是我并不讳言战争,我也不害怕战争!虽然,我身体也不是非常强壮,但是我仍然愿意!!在战争爆发的那一刻,我会毫不犹豫地拿起枪杆,奔赴前线。无论是马革裹尸还也好,还是青山埋遗骨也罢,我都无怨无悔,我要让自己的儿子、孙子明白:钱,有时候买不来尊严,要想不受人欺负,就要用自己的鲜血去洗涤对手的双眼,用生命去震撼对手的灵魂

///////////////////////

 

 

 

width: 5.2

heigth: 6

 

 

///////////////////////////////what is "WDM" and "VFW"////////////////////////////////

Windows Driver Model, WDM

Video for Windows      ,  VFW

 

 

 

///////////////PreviewCamera(视频预览steps)///////////////////////////

step1:   先释放DSHOW接口

 

step2:  创建ICaptureGrapBuilder2接口,

【code】

      CComPtr<ICaptureGrapBuilder2>   m_pCaptureGraphBuilder;

      CHK(m_pCaptureGraphBuilder.CoCreateInstance(CLSID_CaptureGraphBuilder));

 

step3: 创建IGrapBuilder接口

       CComPtr<IGraphBuilder> m_pGraphBuilder;

       CHK(m_pGraphBuilder.CoCreateInstance(CLSID_FilterGraph));

 

step4: 关联Capture Grap Builder 和 Filter Graph Manager

        CHK( m_pCaptureGraphBuilder->SetFiltergraph(m_pGraphBuilder));

 

~~~

 

step5:  得到IMediaSeeking接口和IMediaEvent接口

        CComPtr<IMediaSeeking> m_pMediaSeeking;

        CHK(m_pGraphBuilder.QueryInterface(&m_pMediaSeeking));

 

         CComPtr<IMediaEvent> m_pMediaEvent;

         CHK(m_pGraphBuilder.QueryInterface(&m_pMediaEvent));

 

step6:  (new) 创建视频捕捉Filter  ;创建视频捕捉属性页接口

          CComPtr<IBaseFilter> m_pVideoCaptureFilter;  //定义基本过滤器

          CHK(m_pVideoCaptureFilter.CoCreateInstance(CLSID_VideoCapture));

 

 CComPtr<IPersistPropertyBag>    m_pPropertyBag ;

 CHK(m_pVideoCaptureFilter->QueryInterface(&m_pPropertyBag));

 

 

step7:  选择视频捕获设备,默认选择第一个视频捕获设备

    [Sub Function]

   //[out] wzDeviceName

 GetFirstCameraDriver(wzDeviceName);

 

                CComVariant   varCamName;  //定义摄像头设备名称

 varCamName = wzDeviceName;

 

 //实例化继承与IPropertyBag类的对象,调用Write成员函数写入属性值

 ...

 调用load函数加载自定义PropertyBag

 CHK(m_pPropertyBag->Load(&PropBag,NULL));

 

step8:   将视频捕捉FILTER添加到FILTER图中。

 CHK(m_pGraphBuilder->AddFilter(m_pVideoCaptureFilter,L"Video capture source"));

 

step9:   创建IDMOWrapper接口,(貌似用来编码Encode)

 CComPtr<IDMEWrapper> pWrapperFilter

 CComPtr<IBasicFilter> pVideoEncode;

 CHK(pVideoEncode.CoCreateInstance(CLSID_DMOWrapperFilter));

 CHK( pVideoEncode.QueryInterface(&pWrapperFilter) );

 

step10:   加载WMV9 DMO

 CHK(pWrapperFilter->Init(CLSID_CWMV9EncMediaObject,DMOCATEGORY_VIDEO_ENCODE));

 

step11:   将编码器加到Filter图中

 CHK(m_pGraphBuilder->AddFilter(pVideoEncode,L"WMV9 DMO Encode"));

 

step12:    创建ASF多路(复用)器,并加入到过滤器图中

 CHK( m_pCaptureGraphBuilder->SetOutputFileName(&MEDIASUBTYPE_Asf,strFileName,&pASFMultiplexer,&pFileSinkFilter) );

 

step13:     渲染预览视频PIN

 CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_PREVIEW,

 &MEDIATYPE_Video, m_pVideoCaptureFilter,

 NULL, NULL ));

 

step14:  设置视频预览窗口

 //视频窗口接口

 CComPtr<IVideoWindow> m_pVideoWindow ;

 CHK(m_pGraphBuilder.QueryInterface(&m_pVideoWindow));

 

 ////设置视频播放的WINDOWS窗口

 m_pVideoWindow->put_Owner((OAHWND)hVideoWnd);

 m_pVideoWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);

 

 //设置视频尺寸

 GetClientRect(hVideoWnd,&rectVideo);

 m_pVideoWindow->SetWindowPosition(0,0,rectVideo.Width(),rectVideo.Height());

 m_pVideoWindow->put_Visible(OATRUE);

 

 

step15:   ,渲染捕捉PIN,用于录像

 CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, m_pVideoCaptureFilter, pVideoEncoder, pASFMultiplexer ));

 

Step16:   创建Still Pin,用于抓图

 CHK(m_pImageSinkFilter.CoCreateInstance(CLSID_IMGSinkFilter));

 CHK(m_pGraphBuilder->AddFilter(m_pImageSinkFilter, L"Still image filter" ));

 CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_STILL, &MEDIATYPE_Video, m_pVideoCaptureFilter, NULL, m_pImageSinkFilter ));

 

Step17:   设置捕捉流暂停

 CHK(m_pCaptureGraphBuilder->ControlStream( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, m_pVideoCaptureFilter, 0, 0 ,0,0 ));

 

Step18:   预览视频

 CHK(m_pMediaControl->Run());

 Sleep(1000);

posted @ 2010-10-15 18:30  hungryMan  阅读(278)  评论(0编辑  收藏  举报