草庐IT

c++ - 使用 WM_COPYDATA 将结构从 C++ 发送到 WPF

我有一个nativeC++应用程序,暂时只需要将其命令行字符串和当前鼠标光标坐标发送到WPF应用程序。消息发送和接收都很好,但我无法将C#中的IntPtr实例转换为结构。当我尝试这样做时,应用程序要么毫无异常(exception)地崩溃,要么跳过转换它的代码行并接收循环中的下一条消息。这可能意味着发生了native异常,但我不知道为什么。这是C++程序。目前我忽略命令行字符串并使用假光标坐标来确保一切正常。#include"stdafx.h"#include"StackProxy.h"#include"string"typedefstd::basic_string>wstring;st

c++ - 繁忙的应用程序导致 Windows 7 上出现错误的 "Not responding"状态 - WM_UPDATE

在长期操作过程中,我们的C++Win32应用程序会显示一个带有进程条的模态状态对话框,每隔几秒左右不定期更新一次。从Windows7开始,我们意识到Windows很快就会显示一条消息“似乎挂起...”和/或将“无响应”附加到我们的窗口标题栏。我们发现进程对话框必须处理消息以避免这种情况。更具体地说,Windows7似乎不断发送WM_UPDATE消息来检查我们的程序是否存在。我们以前在此对话框中禁用了所有不需要的消息处理,因为配置文件运行显示它们是一个主要的减速。但是,尽管我们认为已经解决了该问题,但用户再次报告此类问题:Windows显示“似乎挂起...”和/或将“无响应”附加到我们的

c++ - 在我设置“视觉样式”后,常用控件未正确用WM_CTLCOLORSTATIC处理程序绘制

简介和相关信息:我有两个通过资源编辑器创建的对话框。由于使用的是MicrosoftVisualStudioExpress版本,因此必须下载freeresourceeditor来创建它们。在我的程序中,我启用了VisualStyles,如下所示:#include#pragmacomment(lib,"comctl32.lib")#pragmacomment(linker,"/manifestdependency:\"type='win32'\name='Microsoft.Windows.Common-Controls'version='6.0.0.0'\processorArchite

c++ - 使用 BeginPaint/EndPain 而不是 GetDC/ReleaseDC 来响应 WM_PAINT 消息有什么特别之处吗?

可以使用GetDC/ReleaseDC在窗口客户区绘制。但是为了响应WM_PAINT消息,必须使用BeginPaint/EndPaint。这有什么特别的吗? 最佳答案 当窗口的一部分需要更新时,会发出WM_PAINT消息。通过指定BeginPaint/EndPaint(),您告诉gdi您实际上正在做那项工作。如果您不为指定区域调用BeginPaint(),WM_PAINT消息将一直生成,直到有人实际更新它为止。函数给你一个DC,就是因为方便。在内部BeginPaint()/EndPaint()可能调用GetDC()/ReleaseD

C++ Win32 在 WM_DEVICECHANGE 上未收到 DBT_DEVICEARRIVAL 或 DBT_DEVICEREMOVECOMPLETE

我一直致力于检测USB插入/移除。我已经使用CreateWindowEx()实现了代码,通过我的窗口进程回调传递了一个WNCLASSEX。在插入和移除USB时,我成功收到WM_DEVICECHANGE消息,但wParam始终设置为DBT_DEVNODES_CHANGED。我从来没有得到DBT_DEVICEARRIVAL或DBT_DEVICEREMOVECOMPLETE。我一直在使用我得到的东西,但我确实需要能够区分设备到达和移除之间的区别,以便我可以根据收到的设备采取不同的操作。现在,我必须在收到DBT_DEVNODES_CHANGED后设置一个计时器,然后测试系统上是否有任何新的可移

c++ - WM_NEXTDLGCTL 可以与非对话框窗口一起使用吗?

WM_NEXTDLGCTL的文档状态,此消息将与对话框一起使用:Senttoadialogboxproceduretosetthekeyboardfocustoadifferentcontrolinthedialogbox.如果此消息不能与非对话框控件父项一起使用,则以通用方式对控件进行子类化将非常乏味(如thisquestion所示),因为窗口过程必须调用SetFocus或发送WM_NEXTDLGCTL消息,基于不太简单的上下文确定。由于其他特定于对话框的API可用于非对话框窗口(例如IsDialogMessage),因此在此设置中也能够使用WM_NEXTDLGCTL感觉很自然。问题

c++ - 是否可以删除应用程序收到的触摸消息(WM_POINTERDOWN 等)?

我已经使用SetWindowsHookEx成功安装了一个WH_GETMESSAGEHook,我可以看到WM_POINTERDOWN、WM_POINTERUP等。应用程序收到的消息。(它是一个在Windows8.1上运行的32位桌面应用程序。)现在,我不仅想查看那些消息,而且我想删除其中的一些消息。GetMsgProc的文档说:TheGetMsgProchookprocedurecanexamineormodifythemessage.Afterthehookprocedurereturnscontroltothesystem,theGetMessageorPeekMessagefunc

c - 没有收到 WM_DISPLAYCHANGE

我创建了一个简单的窗口来接收消息:CreateWindow(L"MyClass",0,0,0,0,0,0,HWND_MESSAGE,0,0,0);我对WM_DISPLAYCHANGE很感兴趣检测何时插入/移除监视器,但我从未收到消息。我的窗口收到其他消息,但从未收到WM_DISPLAYCHANGE。为什么? 最佳答案 这可能与它有关:Message-onlywindowsAmessage-onlywindowenablesyoutosendandreceivemessages.Itisnotvisible,hasnoz-order,

windows - 如何确定鼠标在两次单击之间允许的移动量以触发 WM_LBUTTONDBLCLK 消息?

如何确定鼠标在两次单击之间允许的移动量以触发WM_LBUTTONDBLCLK消息?MSDNReceivingDouble-ClickMessagesTheOSgeneratesadouble-clickmessagewhentheuserclicksamousebuttontwiceinquicksuccession.Whentheuserclicksabutton,theOSestablishesarectanglecenteredonthehotspotofthecursor.TheOSalsomarksthetimeatwhichtheclickoccurred.Whentheu

windows - PostQuitMessage(WM_QUIT)与 PostQuitMessage(0)

有什么区别caseWM_DESTROY:PostQuitMessage(WM_QUIT);break;和caseWM_DESTROY:PostQuitMessage(0);break;? 最佳答案 当您调用PostQuitMessage时,您传递的是退出代码,而不是消息ID。PostQuitMessage将依次为您生成(并发布)WM_QUIT消息。从技术上讲,不同之处在于使用PostQuitMessage(WM_QUIT),退出代码将为0x0012(或十进制的18)。而PostQuitMessage(0)将提供0的退出代码。当Get