草庐IT

windows - 远程桌面中的物理屏幕分辨率大小更改

在远程桌面session中使用MFC应用程序时,屏幕分辨率不正确。我有一个mfc应用程序TestMFC。在我的机器上,如果我使用HDCscreen=::GetDC(0);intdpiX=GetDeviceCaps(screen,HORZSIZE);intdpiY=GetDeviceCaps(screen,VERTSIZE);给出564和318,而当我的应用程序在远程桌面session中执行时,它给出320和240。虽然像素大小保持不变,为1600和900。我在远程桌面屏幕设置中使用全屏设置。 最佳答案 HORZSIZE尝试以毫米为单

windows - 使用GDI+绘制PixelFormat32bppPARGB图像使用常规公式而不是预乘公式

这里是一些显示问题的最小代码:staticconstintMAX_WIDTH=320;staticconstintMAX_HEIGHT=320;Gdiplus::BitmapforegroundImg(MAX_WIDTH,MAX_HEIGHT,PixelFormat32bppPARGB);{Gdiplus::Graphicsg(&foregroundImg);g.Clear(Gdiplus::Color(10,255,255,255));}Gdiplus::BitmapsoftwareBitmap(MAX_WIDTH,MAX_HEIGHT,PixelFormat32bppPARGB);

windows - CMake 在 64 位平台上找到 32 位 GDI+

我想构建一个在32位和64位Windows上都需要GDI+的程序。我正在使用CMake3.3.2、Windows1064位、VisualStudio2015。作为最小情况,我有这个CMakeLists.txt:cmake_minimum_required(VERSION3.3)find_library(GDIPgdiplus)我在build子目录中运行它作为cmake..或cmake-Ax64..如果我比较两次运行的CMakeCache.txt,我发现它肯定选择了32位或64位选项(例如对于CMAKE_LINKER)但它找到了32位gdiplus.lib在这两种情况下//Pathtoa

c++ - 如何使用 GDI+ 库解码内存中的 jpeg?

GDI+提供了一个Image类,你可以使用这个类来读取一种格式的图像文件,然后将这个文件保存为另一种格式。但是如果我只想解码一个jpeg文件(已经加载到内存中),我该怎么做呢? 最佳答案 您可以使用SHCreateMemStream和Gdiplus::Image::FromStream#include#include#include#include...CComPtrstream;stream.Attach(SHCreateMemStream(buf,bufsize));Gdiplus::Image*image=Gdiplus::I

windows - CreatePatternBrush 和屏幕颜色深度

我正在使用CreatePatternBrush和使用CreateBitmap创建的位图创建画笔。位图是1像素宽和24像素高,我有每个像素的RGB值,所以我创建了一个rgbquads数组并将其传递给CreateBitmap。当屏幕颜色深度为32bpp时效果很好,因为我创建的位图也是32bpp。当屏幕颜色深度不是32bpp时,这会失败,我明白为什么会这样,因为我应该创建一个兼容的位图。看来我应该改用CreateCompatibleBitmap,但如何将我拥有的像素数据放入该位图中?我还阅读了有关CreateDIBPatternBrushPt、CreateDIBitmap、CreateDIB

windows - 颜色问题

我正在编写一个贪吃蛇游戏,我有一个苹果图像要在游戏中使用,所以我创建了一个DC,然后将苹果加载到这个DC,当游戏运行时,它应该将苹果复制到缓冲区然后缓冲区到屏幕,但苹果在屏幕上以黑白结尾,任何人都知道为什么?这是我的一些代码,可能会有所帮助...“苹果加载程序”invokeGetModuleHandle,0invokeLoadBitmap,eax,10pusheaxinvokeCreateCompatibleDC,0popecxmov[mapple],eaxinvokeSelectObject,[mapple],ecx“缓冲区创建过程”invokeCreateCompatibleDC,

windows - 以编程方式将 CFF 字体转换为 OpenType 字体

有没有人提供任何指示,让我可以找到有关如何围绕CFF字体创建opentype包装器的额外信息?目前我有一个CFF文件的解析器,所以我可以从中获取各种信息(cmap、字形名称、宽度、名称等)。鉴于此信息,我无法创建Opentype(类似truetype格式)包装器,因此我可以使用GDI在Windows上使用该字体;GDI不会加载Opentype字体,我唯一知道的是它无法加载字体。有谁知道任何其他信息、验证应用程序、示例代码、获取其他信息为什么字体无法从Windows等加载?注意:我正在寻找如何操作的信息,而不是实用程序和/或转换工具。 最佳答案

c# - 在非 GDI 应用程序中获取插入符位置

所以我正在编写一个辅助功能应用程序,它需要知道文本输入插入符号的位置。我尝试了GUIThreadInfo,但虽然它在记事本等基本应用程序中有效,但在处理自己的UI的更复杂的应用程序(如Chrome、iTunes等)中却失败了。有没有办法从这样的应用程序中获取插入符位置? 最佳答案 是的,行不通。插入符是user32的一个实现细节,与一个窗口相关联。像浏览器这样的应用程序不使用窗口控件,太昂贵了。而且他们不必这样做,有一个单独的API允许此类程序为屏幕阅读器等辅助功能应用程序提供接口(interface)。开始readinghere.

c++ - GDI+ 初始化使应用程序崩溃,为什么?

我有以下C++行从GDI的设备上下文中获取GDI+句柄://HDChDC=devicecontextfromGDIif(hDC){//ObtaingraphicshandleforGDI++Graphics*pgrpx=newGraphics(hDC);//Igetinvalidmemoryexceptionhere//Codecontinues//...//Freeobjectdeletepgrpx;pgrpx=NULL;}它在我的测试中运行良好。但最近我收到了该应用程序的故障转储,在我在上面代码中指出的那一行出现了“它无法访问的线程引用的内存位置”异常——就在图形对象应该被初始化的

windows - 绘制自定义标题(框架)时如何在 alt+tab 切换器中绘制标题?

我需要画一个自定义的标题栏,这里我自己画了窗口标题。HDChdc=GetWindowDC(hwnd);if(hdc&&prepareTitleBarDC(getWidth(),27)){SetWindowText(hwnd,_T(""));DefWindowProc(hwnd,WM_NCPAINT,wParam,lParam);m_titleBar->setSize(getWidth(),27);m_titleBar->setBkColor(SkColorSetARGB(0x00,0x00,0x00,0x00));m_titleBar->paintEvent(m_pTitleBarDC