青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

socketref,再見!高德

https://github.com/adoggie

  C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

常用鏈接

留言簿(54)

我參與的團(tuán)隊(duì)

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

 1 // VideoDrawer.h: interface for the CVideoDrawer class.
 2 //
 3 //////////////////////////////////////////////////////////////////////
 4 
 5 #if !defined(AFX_VIDEODRAWER_H__A06B8DA9_C12E_49B6_B585_2152167D2E29__INCLUDED_)
 6 #define AFX_VIDEODRAWER_H__A06B8DA9_C12E_49B6_B585_2152167D2E29__INCLUDED_
 7 
 8 #if _MSC_VER > 1000
 9 #pragma once
10 #endif // _MSC_VER > 1000
11 
12 
13 #include <windows.h>
14 #include <tchar.h>
15 #include <ddraw.h>
16 
17 class CVideoDrawer  
18 {
19 public:
20     CVideoDrawer();
21     virtual ~CVideoDrawer();
22 
23     HRESULT Init(HWND hWnd,RECT rect);
24     
25     
26     HRESULT DrawFrame(BYTE *lpDataBuffer,DWORD dwSize,DWORD dwWidth,DWORD dwHeight,int bFlip);
27 
28 
29     HRESULT DrawText(TCHAR* strText, size_t align,COLORREF fgcolor);
30     
31     HRESULT Flush();
32 
33 private:
34     enum ALIGNSTYLE{
35         TOP            =  0x01,
36         BOTTOM        =  0x02,
37         LEFT        =  0x04,
38         RIGHT       =  0x08
39     };
40     LPDIRECTDRAW7        m_pDD;
41     LPDIRECTDRAWSURFACE7 m_pddsFrontBuffer;
42     LPDIRECTDRAWSURFACE7 m_pddsBackBuffer;
43     
44     HWND                 m_hWnd;
45     RECT                 m_rcWindow;
46     
47     int                     m_dwWidth;
48     int                     m_dwHeight;
49     void DestroyObjects();
50     void UpdateBounds();
51 
52     HRESULT CheckBackBuffer(DWORD dwWidth,DWORD dwHeight);
53 };
54 
55 #endif // !defined(AFX_VIDEODRAWER_H__A06B8DA9_C12E_49B6_B585_2152167D2E29__INCLUDED_)
56 
  1 // VideoDrawer.cpp: implementation of the CVideoDrawer class.
  2 //
  3 //////////////////////////////////////////////////////////////////////
  4 
  5 #include "stdafx.h"
  6 #include "VideoDrawer.h"
  7 
  8 //////////////////////////////////////////////////////////////////////
  9 // Construction/Destruction
 10 //////////////////////////////////////////////////////////////////////
 11 
 12 CVideoDrawer::CVideoDrawer()
 13 {
 14     m_pDD                = NULL;
 15     m_pddsFrontBuffer    = NULL;
 16     m_pddsBackBuffer     = NULL;
 17 
 18     m_dwWidth = 0;
 19     m_dwHeight = 0;
 20 }
 21 
 22 CVideoDrawer::~CVideoDrawer()
 23 {
 24     DestroyObjects();
 25 }
 26 
 27 HRESULT CVideoDrawer::Init(HWND hWnd,RECT rect)
 28 {
 29     HRESULT hr;
 30 
 31     // Cleanup anything from a previous call
 32   DestroyObjects();
 33 
 34     // DDraw stuff begins here
 35     if( FAILED( hr = DirectDrawCreateEx( NULL, (VOID**)&m_pDD,
 36                                          IID_IDirectDraw7, NULL ) ) )
 37         return E_FAIL;
 38 
 39     // Set cooperative level
 40     hr = m_pDD->SetCooperativeLevel( hWnd, DDSCL_NORMAL );
 41     if( FAILED(hr) )
 42         return E_FAIL;
 43     
 44     DWORD dwWidth,dwHeight;
 45     dwWidth = rect.right-rect.left;
 46     dwHeight = rect.bottom - rect.top;
 47 
 48  /*   RECT  rcWork;
 49     RECT  rc;
 50     DWORD dwStyle;
 51 
 52     // If we are still a WS_POPUP window we should convert to a normal app
 53     // window so we look like a windows app.
 54     dwStyle  = GetWindowStyle( hWnd );
 55     dwStyle &= ~WS_POPUP;
 56     dwStyle |= WS_OVERLAPPED | WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX;
 57     SetWindowLong( hWnd, GWL_STYLE, dwStyle );
 58 
 59     // Aet window size
 60     SetRect( &rc, 0, 0, dwWidth, dwHeight );
 61 
 62     AdjustWindowRectEx( &rc, GetWindowStyle(hWnd), GetMenu(hWnd) != NULL,
 63                         GetWindowExStyle(hWnd) );
 64 
 65     SetWindowPos( hWnd, NULL, 0, 0, rc.right-rc.left, rc.bottom-rc.top,
 66                   SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE );
 67 
 68     SetWindowPos( hWnd, HWND_NOTOPMOST, 0, 0, 0, 0,
 69                   SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE );
 70 
 71     //  Make sure our window does not hang outside of the work area
 72     SystemParametersInfo( SPI_GETWORKAREA, 0, &rcWork, 0 );
 73     GetWindowRect( hWnd, &rc );
 74     if( rc.left < rcWork.left ) rc.left = rcWork.left;
 75     if( rc.top  < rcWork.top )  rc.top  = rcWork.top;
 76     SetWindowPos( hWnd, NULL, rc.left, rc.top, 0, 0,
 77                   SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE );
 78 */
 79     GetWindowRect( hWnd, &m_rcWindow );
 80 
 81     LPDIRECTDRAWCLIPPER pcClipper;
 82     
 83     // Create the primary surface
 84     DDSURFACEDESC2 ddsd;
 85     ZeroMemory( &ddsd, sizeof( ddsd ) );
 86     ddsd.dwSize         = sizeof( ddsd );
 87     ddsd.dwFlags        = DDSD_CAPS;
 88     ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
 89 
 90     if( FAILED( m_pDD->CreateSurface( &ddsd, &m_pddsFrontBuffer, NULL ) ) )
 91         return E_FAIL;
 92 
 93      if( FAILED( hr = m_pDD->CreateClipper( 0&pcClipper, NULL ) ) )
 94         return E_FAIL;
 95 
 96     if( FAILED( hr = pcClipper->SetHWnd( 0, hWnd ) ) ){
 97         pcClipper->Release();
 98         return E_FAIL;
 99     }
100 
101     if( FAILED( hr = m_pddsFrontBuffer->SetClipper( pcClipper ) ) ) {
102         pcClipper->Release();
103         return E_FAIL;
104     }
105 
106     // Done with clipper
107     pcClipper->Release();
108 
109     m_hWnd      = hWnd;
110     return S_OK;
111 }
112     
113     
114 HRESULT CVideoDrawer::DrawFrame(BYTE *lpDataBuffer,DWORD dwSize,DWORD dwWidth,DWORD dwHeight,int bFlip)
115 {
116     HDC            hDC;
117     DDSURFACEDESC2 ddsd;
118     HRESULT        hr;
119 
120     UpdateBounds();
121     
122     if(FAILED(hr = CheckBackBuffer(dwWidth,dwHeight)))
123         return hr;
124     if(NULL == m_pddsBackBuffer )
125         return E_INVALIDARG;
126 
127     // Make sure this surface is restored.
128     if( FAILED( hr = m_pddsBackBuffer->Restore() ) )
129        return hr;
130 
131     // Get the surface.description
132     ddsd.dwSize  = sizeof(ddsd);
133     m_pddsBackBuffer->GetSurfaceDesc( &ddsd );
134 
135     if( ddsd.ddpfPixelFormat.dwFlags == DDPF_FOURCC )
136         return E_NOTIMPL;
137 
138     // Stretch the bitmap to cover this surface
139     if( FAILED( hr = m_pddsBackBuffer->GetDC( &hDC ) ) )
140         return hr;
141     BITMAPINFOHEADER bminh;
142 
143     bminh.biSize = sizeof(BITMAPINFOHEADER);
144     bminh.biWidth = dwWidth;
145     bminh.biHeight = dwHeight;
146     bminh.biPlanes = 1;
147 
148     bminh.biBitCount = 24;
149     bminh.biCompression = BI_RGB;
150     bminh.biSizeImage = 0;
151     bminh.biXPelsPerMeter = 0;
152     bminh.biYPelsPerMeter = 0;
153     bminh.biClrUsed = 0;
154     bminh.biClrImportant = 0;
155     
156 
157     int iRet =GDI_ERROR; 
158     if(bFlip==0)    
159     {
160         iRet = StretchDIBits(hDC,
161                          // destination rectangle
162                         0,0,
163                         dwWidth,dwHeight,
164                         //0,dwHeight,
165                         0,0,
166                         dwWidth,
167                         //-dwHeight,
168                         dwHeight,
169                         lpDataBuffer,
170                         (LPBITMAPINFO)&bminh,
171                         DIB_RGB_COLORS,
172                         SRCCOPY);
173     }
174     else
175     {    iRet = StretchDIBits(hDC,
176             // destination rectangle
177             0,0,
178             dwWidth,dwHeight,            
179             0,dwHeight+1,
180             dwWidth,            
181             -dwHeight,
182             lpDataBuffer,
183             (LPBITMAPINFO)&bminh,
184             DIB_RGB_COLORS,
185                 SRCCOPY);
186     }
187 
188     if (iRet == GDI_ERROR)
189         return E_FAIL;
190 
191 
192     if( FAILED( hr = m_pddsBackBuffer->ReleaseDC( hDC ) ) )
193         return hr;
194 
195     return S_OK;    
196 }
197 
198 
199 HRESULT CVideoDrawer::DrawText(TCHAR* strText, size_t align,COLORREF fgcolor)
200 {
201     HDC     hDC = NULL;
202     HRESULT hr;
203     int x=0,y=0;
204 
205     if( m_pddsBackBuffer == NULL || strText == NULL )
206         return E_INVALIDARG;
207 
208     // Make sure this surface is restored.
209     if( FAILED( hr = m_pddsBackBuffer->Restore() ) )
210         return hr;
211 
212     if( FAILED( hr = m_pddsBackBuffer->GetDC( &hDC ) ) )
213         return hr;
214     TEXTMETRIC tm;
215     GetTextMetrics(hDC,&tm);
216 
217     int len = _tcslen(strText);
218 
219     if(align & LEFT){
220         x = 0;
221     }
222     else if(align & RIGHT){
223         x = m_dwWidth-(tm.tmAveCharWidth)*(len+2);
224     }
225     if(align & TOP){
226         y = 0;
227     }
228     else if(align & BOTTOM){
229         y = m_dwHeight- tm.tmHeight;
230     }
231 
232 
233     // Set the background and foreground color
234     SetBkMode(hDC,TRANSPARENT);
235     SetTextColor( hDC, fgcolor );
236 
237     // Use GDI to draw the text on the surface
238     TextOut( hDC, x , y, strText, len );
239 
240     if( FAILED( hr = m_pddsBackBuffer->ReleaseDC( hDC ) ) )
241         return hr;
242 
243     return S_OK;    
244 }
245 
246 HRESULT CVideoDrawer::Flush()
247 {
248     HRESULT hr;
249 
250     if( NULL == m_pddsFrontBuffer && NULL == m_pddsBackBuffer )
251         return E_POINTER;
252     
253     while1 ) {
254         hr = m_pddsFrontBuffer->Blt( &m_rcWindow, m_pddsBackBuffer,
255                                          NULL, DDBLT_WAIT, NULL );
256 
257         if( hr == DDERR_SURFACELOST ){
258             m_pddsFrontBuffer->Restore();
259             m_pddsBackBuffer->Restore();
260         }
261 
262         if( hr != DDERR_WASSTILLDRAWING )
263             return hr;
264     }
265 }
266 
267 void CVideoDrawer::DestroyObjects()
268 {
269     SAFE_RELEASE( m_pddsBackBuffer );
270     SAFE_RELEASE( m_pddsFrontBuffer );
271 
272     if( m_pDD )
273         m_pDD->SetCooperativeLevel( m_hWnd, DDSCL_NORMAL );
274 
275     SAFE_RELEASE( m_pDD );
276 }
277 
278 void CVideoDrawer::UpdateBounds()
279 {
280     GetClientRect( m_hWnd, &m_rcWindow );
281     ClientToScreen( m_hWnd, (POINT*)&m_rcWindow );
282     ClientToScreen( m_hWnd, (POINT*)&m_rcWindow+1 );
283 }
284 
285 
286 HRESULT CVideoDrawer::CheckBackBuffer(DWORD dwWidth,DWORD dwHeight)
287 {
288     HRESULT hr;
289     if(m_dwWidth != dwWidth || m_dwHeight != dwHeight || NULL == m_pddsBackBuffer){
290         if(m_pddsBackBuffer){
291             SAFE_RELEASE( m_pddsBackBuffer );            
292         }
293         DDSURFACEDESC2 ddsd;
294         ZeroMemory( &ddsd, sizeof( ddsd ) );
295         ddsd.dwSize         = sizeof( ddsd );
296     
297         // Create the backbuffer surface
298         ddsd.dwFlags        = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;    
299         ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE;
300         ddsd.dwWidth        = dwWidth;
301         ddsd.dwHeight       = dwHeight;
302 
303         if( FAILED( hr = m_pDD->CreateSurface( &ddsd, &m_pddsBackBuffer, NULL ) ) )
304             return E_FAIL;
305 
306         m_dwWidth = dwWidth;
307         m_dwHeight = dwHeight;
308     }
309     return S_OK;
310 }
posted on 2006-03-02 00:42 放屁阿狗 閱讀(1476) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 視頻監(jiān)控
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            另类天堂av| 亚洲欧美日韩高清| 美国三级日本三级久久99| 国产亚洲精品aa| 美女在线一区二区| 欧美高清自拍一区| 亚洲一区二区成人| 亚洲一区二区三区成人在线视频精品| 国产精品第一区| 欧美在线观看网站| 久久久天天操| 日韩天堂在线观看| 亚洲天堂成人在线视频| 国产美女高潮久久白浆| 免费观看日韩| 欧美性猛交视频| 久久久久国产精品厨房| 久久综合色综合88| 亚洲女ⅴideoshd黑人| 欧美在线一二三区| 夜夜嗨av色综合久久久综合网| 亚洲天堂久久| 亚洲高清免费| 亚洲欧美日韩一区二区| 在线观看亚洲精品| 亚洲香蕉网站| 亚洲乱码国产乱码精品精天堂 | 日韩亚洲在线| 亚洲欧美日韩国产综合在线| 亚洲国产99| 亚洲无限乱码一二三四麻| 影音先锋亚洲精品| 午夜亚洲视频| 中国成人黄色视屏| 欧美成人有码| 蜜桃久久精品乱码一区二区| 在线午夜精品| 久久综合给合久久狠狠色 | 欧美一区视频在线| 亚洲精品免费在线观看| 午夜日韩视频| 国产精品99久久久久久久久| 巨乳诱惑日韩免费av| 校园春色国产精品| 欧美三区视频| 亚洲国产福利在线| 国产精品久久一卡二卡| 亚洲日本国产| 亚洲精华国产欧美| 久久另类ts人妖一区二区| 久久久国产91| 国产精品永久免费视频| 亚洲国内在线| 久久久爽爽爽美女图片| 欧美一区二区日韩一区二区| 欧美激情影院| 亚洲国产小视频在线观看| 国内精品视频一区| 欧美一区成人| 久久av红桃一区二区小说| 国产精品日本欧美一区二区三区| 亚洲精品中文字幕在线| 日韩一级精品视频在线观看| 美玉足脚交一区二区三区图片| 久热re这里精品视频在线6| 国产一区二区黄| 欧美一区二区三区的| 性欧美大战久久久久久久久| 国产精品美女久久福利网站| 亚洲美女视频网| 欧美护士18xxxxhd| 欧美怡红院视频| 午夜精品福利一区二区蜜股av| 日韩视频在线观看免费| 亚洲精品欧洲| 欧美电影打屁股sp| 亚洲精品日韩激情在线电影| 亚洲三级视频| 欧美日韩少妇| 亚洲欧美日韩国产| 玖玖国产精品视频| 亚洲精品极品| 国产精品白丝jk黑袜喷水| 亚洲免费影视| 欧美.日韩.国产.一区.二区| 亚洲美女免费视频| 国产精品日韩一区| 久久久久国产一区二区三区四区| 欧美大片免费看| 一区二区三区免费网站| 国产精品男gay被猛男狂揉视频| 亚洲欧美在线x视频| 亚洲欧洲在线观看| 激情五月综合色婷婷一区二区| 亚洲国产精品悠悠久久琪琪| 亚洲女人天堂成人av在线| 欧美国产第一页| 欧美专区福利在线| 国产欧美精品日韩区二区麻豆天美| 亚洲成色777777在线观看影院| 亚洲欧美国产精品va在线观看 | 欧美一区二区黄色| 国产精品国产自产拍高清av王其| 亚洲精选一区| 亚洲观看高清完整版在线观看| 亚洲一区二区三区激情| 国产精品久久久久久久久久妞妞| 国产九区一区在线| 久久久久在线| 久久久久久久一区| 一本色道久久综合| 免费短视频成人日韩| 亚洲性线免费观看视频成熟| 激情91久久| 国产精品wwwwww| 美女主播一区| 久久爱www| 在线亚洲伦理| 亚洲清纯自拍| 欧美二区在线观看| 久久久.com| 午夜精品国产| 日韩亚洲欧美精品| 在线日韩欧美| 黑丝一区二区三区| 国产欧美韩日| 国产精品网站在线播放| 欧美三级黄美女| 麻豆乱码国产一区二区三区| 亚洲欧美综合国产精品一区| 在线视频精品一| 亚洲精品在线观看免费| 亚洲国产高清在线观看视频| 久久亚洲图片| 久久久久久久一区| 久久精品色图| 久久av一区二区| 欧美在线观看视频在线| 欧美一区二区免费观在线| 亚洲综合色丁香婷婷六月图片| 亚洲乱码国产乱码精品精98午夜| 亚洲国产精品专区久久| 亚洲国产精品123| 亚洲国产精品ⅴa在线观看 | 亚洲网在线观看| 中文一区二区| 亚洲一区二区在线免费观看| 亚洲视频高清| 午夜精品视频网站| 欧美在线一二三区| 久久精品成人| 美女脱光内衣内裤视频久久网站| 美女主播精品视频一二三四| 欧美a级一区二区| 欧美日韩国产va另类| 欧美日韩岛国| 国产精品色在线| 国产亚洲精久久久久久| 狠狠色狠狠色综合| 亚洲成人在线网| 99国产麻豆精品| 亚洲欧美另类综合偷拍| 欧美中文字幕视频在线观看| 久久久久高清| 亚洲国产成人porn| 亚洲网站在线看| 久久激情视频免费观看| 美女网站久久| 国产精品久久久久影院色老大| 国产精品香蕉在线观看| 伊人成年综合电影网| 99热在线精品观看| 欧美一区免费视频| 欧美凹凸一区二区三区视频| 91久久久久久| 午夜视频一区二区| 欧美搞黄网站| 国产亚洲欧美日韩在线一区| 亚洲国产天堂久久综合网| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 99精品欧美| 久久久久国产精品www| 欧美激情精品久久久久久大尺度| 国产精品日韩欧美一区二区三区| 在线观看国产成人av片| 亚洲一区国产| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲永久精品国产| 美国十次了思思久久精品导航| 欧美日韩激情小视频| 国产专区欧美精品| 亚洲女性喷水在线观看一区| 欧美a级一区| 午夜欧美大尺度福利影院在线看| 欧美成人国产va精品日本一级| 国产免费亚洲高清| 亚洲视频在线观看免费| 欧美成人一品| 久久久久国产一区二区三区四区| 国产精品久久久久久久久免费 |