📄 captomem.cpp
字号:
void CMainFrame::OnViewCaptomem()
{
// TODO: Add your command handler code here
GetClientRect(&DisplayRect);
BITMAPINFO BMIInfo;
BMIInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
BMIInfo.bmiHeader.biWidth = DisplayRect.Width();
BMIInfo.bmiHeader.biHeight = DisplayRect.Height();
BMIInfo.bmiHeader.biPlanes = 1;
BMIInfo.bmiHeader.biBitCount = 24;
BMIInfo.bmiHeader.biCompression = BI_RGB;
BMIInfo.bmiHeader.biSizeImage = 0;
BMIInfo.bmiHeader.biXPelsPerMeter = 0;
BMIInfo.bmiHeader.biYPelsPerMeter = 0;
BMIInfo.bmiHeader.biClrUsed = 0;
BMIInfo.bmiHeader.biClrImportant = 0;
HGLOBAL hDIB;
DWORD dwSize = (long)DisplayRect.Width() *
(long)DisplayRect.Height()*3L;
hDIB = GlobalAlloc(GHND, dwSize);
if( hDIB ){
char* lpvBits = (char *)GlobalLock(hDIB);
CDC* pScrnDC = GetDC();
HANDLE vxdHandle = LoadDevice();
DWORD dwPage;
DWORD PhysMemAddr;
DWORD MemHandle;
DWORD LineAddr;
StaticMemAlloc(&dwPage, &PhysMemAddr, &MemHandle, &LineAddr);
char *lpSourceBuf = (char *)LineAddr;
int nSum = 23;
CG200CaptureToMem(hcg200, PhysMemAddr, dwPage*4*1024, 2 ,FRAME, nSum);
for(int k = 0; ; ++k){
CG200ReadFromMem( hcg200, lpSourceBuf, dwPage*4*1024, k, lpvBits);
pScrnDC->SetStretchBltMode(COLORONCOLOR);
SetDIBitsToDevice( (HDC)*pScrnDC,
DisplayRect.left, DisplayRect.top,
DisplayRect.Width(), DisplayRect.Height(),
DisplayRect.left, DisplayRect.top,
0, DisplayRect.Height(), lpvBits,
&BMIInfo, DIB_RGB_COLORS);
if(k > 21)
k = -1;
MSG lpMsg;
PeekMessage(&lpMsg,NULL,0,0,PM_REMOVE);
if( (GetKeyState(VK_ESCAPE) &0x80) == 0x80 ||
(GetKeyState(VK_LBUTTON)&0x80) == 0x80 ||
(GetKeyState(VK_RBUTTON)&0x80) == 0x80 )
break;
}
// bRet = PhysMemFree(vxdHandle, MemAlloc.Handle);
ReleaseDC(pScrnDC);
GlobalUnlock(hDIB);
GlobalFree(hDIB);
CloseDevice(vxdHandle);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -