Articles of gdi +

屏幕捕捉特定窗口

是否有可能屏幕捕获特定的窗口(也可能是另一个进程)? 目前我正在捕获特定监视器的整个桌面,但是我真正想要的是捕获特定窗口的内容(不pipe其位置)。

如何使用GDI绘制透明文本?

我的目标是dynamic地将一些任意文本放到HICON映像中(在运行时)。我使用下面的代码: //Error checks are omitted for brevity //First create font LOGFONT lf = {0}; lf.lfHeight = -58; lf.lfWeight = FW_NORMAL; lf.lfOutPrecision = OUT_TT_PRECIS; //Use TrueType fonts for anti-alliasing lf.lfQuality = CLEARTYPE_QUALITY; lstrcpy(lf.lfFaceName, L"Segoe UI"); HFONT hFont = ::CreateFontIndirect(&lf); //HICON hIcon = original icon to use as a source //I'm using a large 256×256 pixel icon […]

Qt:QPainter + GDI在相同的部件?

我试图使用这里描述的方法在同一个小部件上使用QPainter和GDI调用。 不幸的是,这个教程似乎已经写在Qt的早期版本上,现在它不能工作。 我设置WA_PaintOnScreen标志并重新实现paintEngine()返回NULL。 然后在paintEvent()创build一个QPainter,使用它,然后使用一些GDI调用来绘制位图。 GDI调用工作正常,但QPainter什么都不做。 我在控制台上得到以下错误: QPainter::begin: Paint device returned engine == 0, type: 1 这是不是支持了? 我该怎么做? 我也尝试在GDI绘画小部件的顶部创build一个额外的小部件,但是由于顶部小部件显示为黑色并阻止了GDI小部件,所以效果不佳。

Win32:一个窗口在整个生命周期中是否具有相同的HDC?

我可以在涂料周期之外使用DC吗? 我窗口的DC是否保证永久有效? 我想弄清楚我的控件的设备上下文(DC)有效多久。 我知道我可以打电话: GetDC(hWnd); 获取我的控件窗口的设备上下文,但这是允许的吗? 当Windows向我发送WM_PAINT消息时,我应该调用BeginPaint / EndPaint来正确地确认我已经绘制了它,并在内部清除无效区域: BeginPaint(hWnd, {out}paintStruct); try //Do my painting finally EndPaint(hWnd, paintStruct); end; 但是调用BeginPaint也会在PAINTSTRUCT结构中返回一个DC。 这是我应该画的DC。 在说BeginPaint()返回的DC与我从GetDC()得到的DC相同的文档中,我找不到任何东西。 尤其是现在,在桌面组合的日子里,在BeginPaint之外获得的DC上绘制它是否有效? 似乎有2种方法可以在绘画周期中获得DC绘画: dc = GetDC (hWnd); 调用BeginPaint(&PAINTSTRUCT); 还有第三种方法,但它似乎是与我开发的Borland Delphi的一个bug。 在WM_PAINT处理期间,Delphi认为wParam是一个DC,然后继续绘制它。 而MSDN说WM_PAINT消息的wParam是未使用的。 为什么 我真正的目标是试图保持一个持久的GDI +graphics对象与一个HDC,所以我可以使用一些更好的执行function的GDI +依赖于持久性DC。 在WM_PAINT消息处理期间,我想绘制一个GDI +图像到canvas。 以下的版本非常慢: WM_PAINT: { PAINTSTRUCT ps; BeginPaint(m_hwnd, ps); Graphics g = new Graphics(ps.hdc); g.DrawImage(m_someBitmap, 0, 0); g.Destroy(); […]

在窗口上绘制位图时不希望的消除锯齿

我正在渲染一个图像到一个System.Drawing.Bitmap,然后将其绘制到一个窗口中,但是我可以看到边缘正被反锯齿。 如何防止这一点? 一些更多的细节。 位图是这样创build的: new Bitmap (this.Width, this.Height, Imaging.PixelFormat.Format32bppArgb) 然后我将像素设置为Color.Black或Color.White。 我已经尝试使用Bitmap.SetPixel并使用Bitmap.LockBits将字节直接写入位图数据。 一旦位图准备就绪,我在Form.OnPaint覆盖中绘制它: pea.Graphics.DrawImage ( !this.bitmap , this.ClientRectangle , new Rectangle (0, 0, this.Width, this.Height) , GraphicsUnit.Pixel ) 每个像素应该是黑色或白色,但我可以看到在边缘的像素是灰色的。

用graphics自定义字体样式

我有以下字体列表: 我没有通过使用它们的问题 new Font("XXXX Sans", 21, FontStyle.Bold, GraphicsUnit.Pixel) 但是,当我需要使用非标准的字体样式时,我该怎么做? 所有提供的是枚举,并不适合。

加载一定分辨率的光标

我有两个游标资源。 第一个[IDC_CURSOR1]包含三种不同的图像types: 32×32,24 bpp 48×48,24 bpp 64×64,24 bpp 第二个[IDC_CURSOR2]只包含一个: 48×48,24 bpp 如果我调用LoadCursor(hInst,IDC_CURSOR1)它总是加载32×32版本,我无法find加载48×48或64×64版本的方式。 在第二种情况下,它会加载48×48图标(因为没有其他版本),但是会将其缩小到32×32。 如何加载32×32以外的光标? 顺便说一句:我试图改变DPI,因为根据msdn它应该自动加载更高的分辨率光标在更高的dpi,但它没有。 谢谢!

任何好的教程/资源来学习Win32的GDI?

到目前为止,我一直在search谷歌,并没有得到一个很好的教程是全面的。 有没有人知道任何教授Win32 GDI的网站或书籍?

在GDI +(或GDI)屏幕上绘制类似于检查

我正在使用GDI +在屏幕上(整个屏幕,在其他窗口之上)绘图。 我已经通过NULL到GetDC获取一个HDC到屏幕上,然后用它来创build一个Graphics对象,并使用DrawRectangle在屏幕上绘制矩形。 一切正常..除…矩形的内部不会更新。 就像我通过命令提示符绘制它并移动命令提示符一样,矩形内部仍为黑色。 我期望看到矩形下面有什么。 这是做绘图的代码 Pen BluePen(Color(255, 0, 255, 0), 2); Graphics graphics(screenDC); graphics.DrawRectangle(&BluePen, myRect); 很简单,那么有什么我必须做的,以获得矩形的内部更新时,屏幕呢? 或者让它真正透明。 =================编辑================= 那么我已经放弃了这一点,并认为这是不可能的,直到…我意识到Windows SDK附带的Inspect工具可以完美地实现这一点。 我想重新创build类似于高亮矩形的东西,如果我select了一个窗口(如Firefox),然后将Inspect带入焦点,我可以自由移动它,所有内容都可以完美更新。 甚至没有任何闪烁。 所以…有没有人知道如何Inspectpipe理这样做? 也在GDI的答案,而不是GDI +罚款…

什么是在Windows中采取截图的最快方式?

在Windows中捕获屏幕截图的最快方法是什么? 一个司机? 使用DirectX?