本文介绍了我该如何“画画”使用WINAPI32在多个屏幕上?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经编写了以下功能来生成一个假的蓝屏死机(BSOD) - 它可以在一台显示器上运行良好。我不确定处理多台显示器的最佳方法是什么。
I have written the below function to generate a fake blue screen of death (BSOD) - which works well on a single monitor. I am not sure what is the best way to go about dealing with multiple monitors.
void BSOD(){
HDC hdcScr, hdcMem, hdcOrig ;
int cx, cy, lines ;
HBITMAP hBitmap, hOriginal ;
HWND hwnd ;
RECT rect;
HFONT hFont = CreateFont(
27, 16, 0, 0,FW_NORMAL, FALSE, FALSE, FALSE,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,"Courier New"
);
if (LockWindowUpdate (hwnd = GetDesktopWindow ())){
hdcScr = GetDCEx (hwnd, NULL, DCX_CACHE | DCX_LOCKWINDOWUPDATE) ;
hdcMem = CreateCompatibleDC (hdcScr) ;
hdcOrig = CreateCompatibleDC (hdcScr) ;
cx = GetSystemMetrics (SM_CXSCREEN) ;
cy = GetSystemMetrics (SM_CYSCREEN);
hBitmap = CreateCompatibleBitmap (hdcScr, cx, cy) ;
hOriginal = CreateCompatibleBitmap (hdcScr, cx, cy) ;
rect.top = 0;
rect.left = 0;
rect.right = cx;
rect.bottom = cy;
SelectObject (hdcMem, hBitmap) ;
FillRect(hdcMem, &rect, CreateSolidBrush(RGB(0,0,0x77)));
SelectObject(hdcMem, hFont);
SetTextColor(hdcMem,RGB(0xFF,0xFF,0xFF));
SetBkColor(hdcMem,RGB(0,0,0x77));
lines = 18;
while(lines--) write_out(hdcMem,lines);
BitBlt (hdcScr, 0, 0, cx, cy, hdcMem, 0, 0, SRCCOPY) ;
Sleep(5000);
BitBlt (hdcScr, 0, 0, cx, cy, hdcOrig, 0, 0, SRCCOPY) ;
DeleteDC (hdcMem) ;
ReleaseDC (hwnd, hdcScr) ;
DeleteObject (hBitmap) ;
LockWindowUpdate (NULL) ;
}
return ;
}
推荐答案
这篇关于我该如何“画画”使用WINAPI32在多个屏幕上?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!