草庐IT

c - C 和 Windows GDI 中的双缓冲*框架*

背景:我的客户有一个非常广泛的专有表单库,它在C中有效地实现(实际上,它是一种专有的面向对象的语言,基本上包装Windows控件并与它们交互SendMessage()、SetStyle()等)我要解决的问题:每当我在上述框架中实现的应用程序中拖动/调整顶层窗口(或拖动拆分器)时,都会出现大量闪烁。顶层窗口被重新绘制,它包含的任何控件都会重新绘制。问题1:有没有办法通过外科手术将双缓冲引入表单库。特别是,我想知道是否可以使用标准WindowsGDI函数实现双缓冲。例如,如果我可以使顶层窗口进行双缓冲,这样顶层窗口的所有子窗口也自动进行双缓冲绘制。一个更好的选择是能够在任意窗口上引入双缓冲

c++ - 如何将系统颜色更改为默认颜色?

在我的C++应用程序中,我错误地更改了系统颜色:constINTval=COLOR_HIGHLIGHTTEXT;constCOLORREFcolor=RGB(255,0,0);::SetSysColors(1,&val,&color);如何向后恢复默认设置? 最佳答案 有关SetSysColors()的文档位于http://msdn.microsoft.com/en-us/library/windows/desktop/ms724940%28v=vs.85%29.aspx说“系统终止时不会保存新颜色。”所以重启可能会让你的颜色恢复。

c++ - 我如何使用来自 IMAPI2 的 IFileSystemImage2 的 put_BootImageOptionsArray(获取 E_NOINTERFACE)?

我正在尝试使用IFileSystemImage2接口(interface)使用Imapi2创建具有多个引导记录的ISO。为此,我应该能够使用put_BootImageOptionsArray为每个启动选项配置传入VT_DISPATCH类型的SAFEARRAY*,即IBootOptions类型的COM指针。作为一个简短的演示,我有以下代码(在这种情况下我只创建了一个IBootOptions):SAFEARRAYBOUNDbounds[1];bounds[0].cElements=1;bounds[1].lLbound=0;IBootOptions*BootOptionsArrayData

c - 当使用 CreateProcess 启动子程序时,不会在父程序的工作目录中搜索 DLL

我有一个很奇怪的问题。我正在Windows下开发一个C程序,它将数据写入临时目录。它使用GetTempFileName生成一个唯一的名称。数据实际上是一个exe,我以CreateProcess开头数据写入临时文件后。对于lpCurrentDirectory参数,我使用NULL以便使用父程序的当前工作目录成为子程序的工作目录。有所有需要的DLL。在大多数计算机(XP、2003、7、8)上,一切都按预期运行。但是在一个特定的Windows7上,子程序启动时出现异常。非常奇怪,但如果我将所有需要的DLL移动到临时目录,一切都会按预期进行。嗯,为什么不在父程序的工作目录中搜索DLL?非常感谢。

C 代码在 Windows 上比在 Linux 上慢

我正在开发一个项目,该项目将针对32位和64位Windows和Linux进行构建。该项目基于为文本文件加载字符串、对其进行处理并将结果写入SQLite3数据库。在Linux上,它达到每秒近400k个序列,由GCC编译,没有任何优化。然而在Windows上它卡在每秒100k个序列,在没有任何优化的情况下在VS2010上编译。我尝试在编译器中使用优化,但没有任何改变。这样对吗?Windows上的C代码运行速度较慢?编辑:我想我需要更清楚地说明一些要点。我在启用和禁用代码优化的情况下进行了测试。性能没有改变,可能是因为我的程序的瓶颈是浪费时间从HD读取数据。该程序利用了并行计算的优势。有一个

c++ - 使用不同线程时 Win32 API 死锁

我在尝试从其他线程使用WIN32API时遇到死锁。我的应用程序需要额外的线程来提高帧速率。它实际上有帮助,但是,我在几乎所有系统功能中都遇到了死锁:::显示窗口::移动窗口::更新窗口例如,我知道ShowWindow()可以替换为ShowWindowAsync(),它确实解决了问题,但是,在MoveWindow()和UpdateWindow()中没有这样的替代方法。有人遇到过这些问题吗,解决方案是什么?谢谢! 最佳答案 术语“死锁”描述了一个非常具体的事情,两个线程等待访问被另一个锁定的资源。没有迹象表明这就是您的情况(或是否存在?

c++ - 如何将状态栏定位在 OPENGL 之上?

我目前遇到的问题是OpenGL与我的状态栏重叠,而窗口的菜单没有改变。任何想法如何解决这个问题?使状态栏像菜单一样位于顶部。我在主窗口(自定义WNDCLASS)和启用了WS_CHILD的状态栏(STATUSCLASSNAME)中使用CreateWindowEx。也许我遗漏了一些标志。附言。我不使用GLUT,也不使用任何其他第三方库,只使用Windows和OpenGL 最佳答案 您只需将WS_CLIPCHILDREN和WS_CLIPSIBLINGS样式添加到您的OpenGL窗口。 关于c+

c++ - 带有 desktop.ini 和即时刷新的自定义文件夹图标

我的任务是创建一个簿记程序,用于跟踪文件和文件夹何时被读取的一些统计数据。与GoogleDrive和TortoiseSVN类似,文件夹和文件图标应反射(reflect)某些变化。例如,带有未在某台计算机上查看过的文件的USB带有“x”,而查看过的文件则带有“o”。我可以使用this跟踪文件使用情况WindowsAPI和图标(以及其他一些不错的选项)可以通过desktop.ini文件进行更改[1,2,3,4].在手动修改desktop.ini文件的同时,我已经成功地更改了图标、描述和其他有趣的东西。问题是新的更改不会更新,直到Windows再次解析desktop.ini文件。这往往会在几

c++ - 进程范围上的 SetThreadLocale

我知道如果我想使用LCID为我的线程更改语言环境,我可以调用SetThreadLocale,但如何使用LCID在进程范围内设置它? 最佳答案 WinApi无法做到这一点。语言环境是按用户设置的,您不能设置进程的语言环境,您只能按线程设置。 关于c++-进程范围上的SetThreadLocale,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/16953261/

c++ - 特定资源语言的 LoadAccelerators

我想打电话LoadAccelerators但对于资源中的特定语言。有办法吗? 最佳答案 我做了一些逆向工程,下面是如何从内存中为特定的LCID加载它:#pragmapack(push,1)//exactfit-nopaddingstructACCEL_MEM{BYTEfVirt;BYTEbyteReserved;WORDwKey;WORDwCmd;WORDwReserved;};#pragmapack(pop)HACCELLoadAcceleratorsIndirectWithLCID(UINTnResourceID,LCIDlci