jjzjj

windows - 我可以创建一个设备上下文,它只是另一个设备上下文的一部分吗?

我已经将一个图形控件子类化,该控件将设备上下文句柄HDC作为输入并用于绘图。我的新控件只是以较大图像为中心的原始控件。我希望能够调用原始控件的Draw()方法以进行代码重用,但我不确定如何继续。思路是这样的:voidCCheckBox::DrawCtrl(HDChdc,HDChdcTmp,LPSIZEpCtlSize,BYTEalpha){//originalmethoddrawsacheckbox}voidCBorderedCheckBox::DrawCtrl(HDChdc,HDChdcTmp,LPSIZEpCtlSize,BYTEalpha){//Drawmyimagehere//

c++ - 使用类似于 Inspect 的 GDI+(或 GDI)在屏幕上绘图

我正在尝试使用GDI+在屏幕上(整个屏幕,在所有其他窗口的顶部)绘图。我已将NULL传递给GetDC以将HDC显示到屏幕上,然后使用它创建一个Graphics对象,并使用DrawRectangle在屏幕上绘制矩形。一切正常......除了......矩形内部不会更新。就像我在命令提示符上绘制它并移动命令提示符一样,矩形的内部仍然是黑色。我希望看到矩形下方的内容。这是绘图的代码..PenBluePen(Color(255,0,255,0),2);Graphicsgraphics(screenDC);graphics.DrawRectangle(&BluePen,myRect);非常简单,

windows - LoadImage 在 8 位图像中失败

当我加载8位BMP文件时,这段代码有问题。HBITMAPhbm=LoadImageW(NULL,L"C:\\Test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);但是HBITMAP为0,GetLastError也返回0。问题出在哪里?我在stackoverflow上看到类似的问题,但这段代码只在8位位图中失败。MSDN对这种行为只字不提。感谢您的回答或任何建议。编辑:作为资源加载的相同位图工作正常。操作系统:WindowsXPSP2编辑2:我昨天测试了用Photoshop打开这张图片-很好,MSPAINT-很好,MicrosoftAgentCharac

c++ - BitBlt 仅捕获部分屏幕

我正在尝试在Windows10下使用GDI捕获屏幕的正方形部分。这就是我尝试的方式://GetscreenDCdesktop=GetDC(NULL);//Createacompatiblebitmapof32x32px.HDChCaptureDC=CreateCompatibleDC(desktop);HBITMAPcaptureBmp=CreateCompatibleBitmap(hCaptureDC,32,32);SelectObject(hCaptureDC,captureBmp);//loop:BitBlt(hCaptureDC,0,0,32,32,desktop,source

windows - 将 hwnd GDI 调用重定向到系统内存位图?

我有一个第3方ActiveX控件,我想在其他表示技术(Direct3D和WPF)中呈现。为此,我需要ActiveX渲染到系统内存位图而不是屏幕。我知道有办法做到这一点,但不知道从哪里开始。我不害怕做任何native方法Hook,但我不确定从哪里开始。我在想BeginPaint(...)可能是热门票...有没有人这样做过或看到过周围的例子/sample?顺便说一句,我不想​​做WM_PRINT类型的解决方案。我宁愿此代码是被动的,而不是主动的并强制hwnd重新绘制。编辑:两个答案对我来说都是正确的,所以我给了每个答案+1。我希望有一个较低级别的解决方案来更加灵活,但目前这已经足够了。

windows - Qt:同一个小部件中的 QPainter + GDI?

我正在尝试使用methoddescribedhere在同一个小部件上使用QPainter和GDI调用。不幸的是,本教程似乎是在早期版本的Qt上编写的,现在它不起作用。我设置了WA_PaintOnScreen标志并重新实现paintEngine()以返回NULL。然后在paintEvent()上我创建了一个QPainter,使用它然后使用一些GDI调用来绘制位图。GDI调用工作正常,但QPainter什么也不做。我在控制台上收到以下错误:QPainter::begin:Paintdevicereturnedengine==0,type:1这是不再支持了吗?我该怎么做?我也曾尝试在GDI绘

c++ - 类似 MSPaint 的应用程序编写。如何正确使用 BitBlt?

我正在使用windows.h(GDI)在C++中编写类似mspaint的简单程序。对于我的程序,我只需要钢笔工具。因此,我需要将主窗口的图片存储在某个地方(例如在内存HDC和HBITMAP中),以便在WM_PAINT消息中绘制它。我什么时候必须首先将窗口的HDC存储到我的内存HDC和HBITMAP?我应该在什么消息中存储窗口?例如,我认为我们不能在WM_CREATE中这样做,因为我们还没有窗口。PatBlt和BitBlt有什么区别?我的应用应该使用什么?如何将窗口的HDC内容复制到我的内存HDC和位图中?我正在尝试做这样的事情:LPRECTlpRect;GetClientRect(hw

c++ - 组合位图 - GDI/GDI+?

我想知道是否可以枚举所有桌面可见窗口以创建它们的位图并将所有位图组合成一个以便获得桌面的完整屏幕截图?最有可能使用GDI/GD+,但也欢迎使用任何外部库。首选语言C\C++。提前致谢。 最佳答案 对于GDI中位图之间的复制,请查看BitBlt. 关于c++-组合位图-GDI/GDI+?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/10388214/

c++ - WS_EX_COMPOSITED - 高 CPU

我在我的应用程序中使用WS_EX_COMPOSITED样式但它运行CPU到100%,有没有办法停止我的应用程序绘图一段时间并仅在我需要时恢复?有些人建议使用Sleep's,但我应该将sleep放在WndProc中的什么位置?提前致谢。 最佳答案 不要使用sleep。这是几乎没有问题的解决方案。WS_EX_COMPOSITED确实会占用CPU,但根据我的经验,主要是在XP上。在Vista及更高版本上,性能受到的影响要小得多。但是,如果您的应用处于空闲状态,则它不会重新绘制。如果您的CPU为100%而应用程序处于空闲状态,那么您的WM_

c++ - 结合 blits 和 gdi 绘图(不工作,闪烁)

我正在尝试将纹理blit与在其上绘制的gdi相结合(由voiddraw(){StretchDIBits(hdc,0,0,CLIENT_X,CLIENT_Y,0,0,BUF_X,BUF_Y,buffer,&bmi,DIB_RGB_COLORS,SRCCOPY);TextOut(hdc,10,10,"HelloWorld",11);}hdc在设置时被GetDC阻止了一次,但它可能没问题;上面这个我每秒在空闲循环中运行100次,并且还运行OnPain消息;这并不能很好地工作,因为TextOut结果只是闪烁,其余的都可以-有人可以告诉我一些建议如何消除这种闪烁并获得稳定的TextOut结果吗?