草庐IT

c++ - WinAPI 双缓冲

默认的winAPI应用程序没有双缓冲。相反,它在确保只绘制需要绘制的内容方面做得非常非常好,并赋予它无缝的外观。但是,当您调整窗口大小时,整个内容都需要重新绘制,这会导致控件、选项卡背景以及有时选项卡的白色之间出现闪烁。所以我的问题是,在我的应用程序中支持双缓冲的最简单方法是什么? 最佳答案 创建一个窗口大小的位图,渲染到该位图中,完成后将其blit回窗口。您可以在现有代码中进行非常直接的就地替换。不要使用呈现到窗口中的设备上下文,而是使用呈现到位图中的设备上下文,并且只使用原始DC将位图blit回来。一定要保留位图——不要在每次绘

c++ - 尝试使用 Win32 线程进行异步 I/O

我正在为Windows编写串口软件。为了提高性能,我试图将例程转换为使用异步I/O。我已经编写了代码并且运行得相当好,但我是这方面的半初学者,我想进一步提高程序的性能。在程序的压力测试期间(即以高波特率尽可能快地将数据传入/传出端口),CPU负载变得相当高。如果有人在Windows中使用过异步I/O和多线程,请看一下我的程序,我将不胜感激。我主要担心两个问题:异步​​I/O是否正确实现?我在网上找到了一些相当可靠的来源,建议您可以将用户数据传递给回调函数,方法是在最后用您自己的数据实现您自己的OVERLAPPED结构。这似乎工作得很好,但对我来说确实有点“hackish”。此外,当我从

c++ - 如何使用 win32 CreateProcess 函数等到 child 完成写入文件

你好我不是win32程序员,这对我来说是全新的。我喜欢从我的父win32应用程序打开进程(好的,这是我知道该怎么做)然后子进程写入文本文件并自行关闭。我如何在父应用程序中检测到子应用程序已完成对文本文件的写入。然后从父应用程序读取文本文件。这一切都在win32c++中谢谢 最佳答案 PROCESS_INFORMATION结构(这是CreateProcess的最后一个参数)包含成员hProcess。这是新进程的句柄,您可以使用WaitForSingleObject等待它。 关于c++-如何

c++ - 为什么当我的应用程序最小化时 CPU 使用率会增加?

我正在编写一个计算器。当窗口最大化时,CPU占用率在12%左右,而当窗口最小化时,CPU占用率上升到50%左右。为什么会发生这种情况,我该如何防止这种情况发生?这是我认为导致问题的一段代码。LRESULTCALLBACKWndProc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam){switch(uMsg){caseWM_ACTIVATE:if(!HIWORD(wParam))active=true;elseactive=false;return0;caseWM_SYSCOMMAND:switch(wParam){caseSC_SCREENSA

c++ - EnumDisplayDevices 函数对我不起作用

我正在尝试以编程方式获取有关我的显示器的信息。循环的内容现在并不重要,它们只包含在满足循环条件时将打印的调试语句。现在,外循环代码执行了3次,而内循环代码从未被访问过,这意味着(内)循环的while条件永远不会为真,这意味着调用失败。我的问题是WindowsAPI说,关于这个函数:Toobtaininformationonadisplaymonitor,firstcallEnumDisplayDeviceswithlpDevice>settoNULL.ThencallEnumDisplayDeviceswithlpDevicesettoDISPLAY_DEVICE.DeviceName

c++ - 从 C++ 注册预关机通知的正确方法

我使用C++编写了一个本地服务应用程序,但我找不到注册预关机通知的正确方法(适用于WindowsXP之后的操作系统)。我相信自Vista以来已经添加了SERVICE_CONTROL_PRESHUTDOWN通知,但是当您调用SetServiceStatus时我们是否需要指定:dwServiceStatus.dwControlsAccepted=SERVICE_ACCEPT_PRESHUTDOWN;或dwServiceStatus.dwControlsAccepted=SERVICE_ACCEPT_SHUTDOWN|SERVICE_ACCEPT_PRESHUTDOWN;

c++ - 为什么非 Unicode 应用程序系统语言环境会使带有符号字符集的 Unicode 字体显示不正确?

我正在尝试显示Wingdings字体中的Unicode字符(它是仅支持符号字符集的UnicodeTrueType字体)。使用相应的区域操作系统设置,它在我的Win7/64系统上正确显示:格式:俄语地点:俄罗斯系统区域设置(也称为非Unicode应用程序的语言):英语但是,如果我将系统区域设置切换为俄语,则代码>127的Unicode字符显示不正确(替换为方框)。我的应用程序是在VisualStudio中使用Unicode字符集创建的,它仅调用UnicodeWindowsAPI函数。我还注意到,一些Windows应用程序也会错误地使用符号字体(Symbol、Wingdings、Webdi

c++ - Windows API 如何接受字符串

我不得不承认,这一直让我感到困惑,某些WindowsAPI如何接受字符串。以SetWindowText()为例.现在,任何接受指向任何对象的指针的函数通常意味着它不存储该对象,而仅使用传递的指针。因此,调用者有责任确保传递给它的对象在任何需要的时候都存在。现在,您希望下面打印出的最终消息是什么?TCHAR*label=newTCHAR[50]();_tcscpy(label,_T("allocatedstring"));m_wndStaticLabel.SetWindowText(label);_tcscpy(label,_T("stringhaschanged"));理论上我希望它打

c++ - 连续调用 RegGetValue 会为同一字符串返回两种不同的大小

在某些代码中,我使用了Win32RegGetValue()从注册表中读取字符串的API。我两次调用上述API:第一次调用的目的是获得合适的大小,以便为字符串分配目标缓冲区。第二次调用从注册表中读取字符串到该缓冲区中。奇怪的是,我发现RegGetValue()在两次调用之间返回了不同大小的值。特别是,第二次调用返回的大小值比第一次调用小两个字节(相当于一个wchar_t)。值得注意的是,与实际字符串长度兼容的大小值是第二次调用返回的值(这个对应实际字符串长度,包括终止NUL).但我不明白为什么第一次调用返回的大小比那个大两个字节(一个wchar_t)。附上程序输出截图和Win32C++可

c++ - 如何将 wstring 转换为 u16string?

我想在C++中将wstring转换为u16string。我可以将wstring转换为字符串,或者反向。但我不知道如何转换为u16string。u16stringCTextConverter::convertWstring2U16(wstringstr){intiSize;u16stringszDest[256]={};memset(szDest,0,256);iSize=WideCharToMultiByte(CP_UTF8,NULL,str.c_str(),-1,NULL,0,0,0);WideCharToMultiByte(CP_UTF8,NULL,str.c_str(),-1,s