草庐IT

c++ - DeferWindowPos 奇怪的行为

所有ActiveX控件都会出现这种情况。如果我使用DeferWindowPos重新定位ActiveX控件HDWPhdwp=BeginDeferWindowPos(1);DeferWindowPos(hdwp,m_pActiveX->GetSafeHwnd(),NULL,left,top,width,height,SWP_NOZORDER);EndDeferWindowPos(hdwp);它去那里但一旦您点击控件内的任何地方,它就会移动/调整到它的旧矩形。如果我改用MoveWindowm_pActiveX->MoveWindow(left,top,width,height);这不会发生。

c++ - 如何区分左右键(CTRL 和 ALT)?

我开始使用Win32的原始输入功能来检测键盘上的所有按键。到目前为止,一切都很好!我可以区分顶行的数字和右侧键盘中的数字。我什至可以检测到左右shift键。但是,control和alt键不会返回唯一的扫描代码。control键返回29,alt键返回56。检查这些键的键状态的流行方法是GetAsyncKeyState。我已经使用VK_LCONTROL和VK_RCONTROL测试了该功能,它可以工作,但这只能帮助我捕获按键事件。我真的很想也能够捕获关键事件。很明显,API以某种方式知道按下了哪个键;我如何获得这些信息?我目前正在从RAWKEYBOARD结构的MakeCode字段中提取扫描码

c++ - 在 C++ WIN32 中识别后台进程并将其置于前台

谁能告诉我如何识别特定的后台进程(即,已经在运行的应用程序)并将其带到前台?例如,如果一个记事本应用程序在后台运行,当我运行我的WIN32应用程序时,它应该识别记事本应用程序并且记事本应该弹出或进入前台。我尝试了SwitchToThisWindow()函数,但它的工作方式类似于Alt+tab。它不会识别后台进程。请给我建议这方面的演练指南..谢谢你.. 最佳答案 不清楚您所说的“后台进程”是什么意思,但这里有一些想法:使用EnumWindows为您提供桌面上的所有顶级HWND。这将包括一堆你不想要的东西,你必须过滤掉。建议您使用Sp

c++ - 为什么 MS 在其 win32api 中没有返回字体文件名的函数,给定字体句柄?

在使用WindowsAPI多年的经验中,这是我第一次遇到我需要做某事的情况,而我不能使用Windows当前的编程接口(interface)。根据我的研究,字体“ArialBlack”使用文件arialblk.ttf并且字体“ArialBlackItalic”没有文件,字体“ArialBlack”也没有粗体”,至少在我装有Windows7的计算机中是这样。我在下面插入了一个程序来显示几行使用字体“ArialBlack”的文本,单独使用,然后使用斜体和粗体显示。令我惊讶的是,斜体文本呈现正常,而粗体文本呈现为好像只是“ArialBlack”。然后我意识到同样的事情发生在MSWord上。我还

c++ - 在运行的 Windows 控制台应用程序中处理拖放文件

首先,澄清一下,我不是询问如何将文件拖放到exe的图标上。我想知道如何处理拖放到已运行win32控制台应用程序的操作。我也不询问如何通过Windows消息泵处理基于WinMain的应用程序内部的拖放。我想在一个程序内部执行此操作,该程序的入口点intmain()还没有WndProc(还)或任何东西。也就是说,我想知道我的目标是否可以实现(并希望它可以实现)。我有一个在控制台窗口中运行的服务器应用程序。由于庞大的代码库和许多奇怪的耦合,它是一个用于所有密集目的的“仅输出”控制台。不过,在其中,我仍然可以处理按键之类的事情,因为我有一个更新循环在滴答作响。我希望能够将充满命令(使用自定义语

c++ - Win32 中是否有检测用户何时更改区域设置的消息或通知?

编辑:为了响应社区的评论,问题被减少和优化。问题的删除部分将作为单独的问题发布。问题:在Win32API中是否有任何WM_SOMETHING或NM_SOMETHING消息可以通知我有关用户更改locale?你看,我可以使用该消息/通知将我程序的locale更改为当前locale.像这样的伪代码:caseWM_SOMETHING://inmymainwindowprocedure_wsetlocale(LC_ALL,L"");此外,如果有这样的消息,并且我按照上面的伪代码处理它,它会调整仅主窗口的locale还是还为子对话框和控件设置locale?。我为解决这个问题所做的努力:通过互联网

c++ - 用于测量延迟的计时器

在通过TCP的任何协议(protocol)中测量网络延迟(接收确认时间-发送消息时间)时,您会推荐使用什么计时器?为什么?它有什么分辨率?其他优点/缺点是什么?可选:它是如何工作的?可选:您不会使用什么计时器,为什么?我主要寻找Windows/C++解决方案,但如果您想对其他系统发表评论,请随时发表评论。(目前我们使用GetTickCount(),但它不是一个非常准确的计时器。) 最佳答案 这是我的答案的拷贝:C++Timerfunctiontoprovidetimeinnanoseconds对于Linux(和BSD),您要使用cl

c++ - 窗口未最大化时丢失 WM_NCLBUTTONUP 消息的奇怪问题

我有一个处理WM_NCLBUTTONUP消息的窗口,以便处理对标题栏中自定义按钮的点击。这在窗口最大化时效果很好,但当它没有最大化时,WM_NCLBUTTONUP消息永远不会到达!我确实收到了WM_NCLBUTTONDOWN消息。奇怪的是,如果我单击菜单栏右侧,WM_NCLBUTTONUP确实会到达,但在标题栏/窗口框架的任何位置,消息永远不会到达。调试一段时间后发现如果在CMainFrame::OnNcLButtonDown()上设置断点,点击标题栏,但按住鼠标不放,让调试器在函数中断点,按F5继续调试,然后释放鼠标按钮-神奇地发送WM_NCLBUTTONUP!!我的问题有两个方面:

c++ - Win32 消息处理程序错误传播

我正在编写一个使用单个对话框的(C++)应用程序。设置消息泵和处理程序后,我开始思考如何将C++异常传播到我的原始代码(例如,调用CreateDialogParam的代码)。这是我的意思的一个基本示例:BOOLCALLBACKDialogProc(HWND,UINTmsg,WPARAM,LPARAM){if(msg==WM_INITDIALOG)//Orsomeothermessage{/*Loadsomecriticalresource(s)here.Forinstnace:constHANDLEsomeResource=LoadImage(...);if(someResource=

c++ - 屏幕截图忽略了一些窗口

我在MFC中工作,我正在trycatch桌面的bmp。我正在使用GetDC(NULL)来执行此操作,但它似乎忽略了特殊的蒙皮窗口。它似乎忽略了用UpdateLayeredWindow绘制的窗口。这种行为似乎只发生在Vistax64和XP上。我也用桌面HWND尝试了GetWindowDC,但结果是一样的。注意事项:1)打印屏幕工作。2)在Vista上,如果我启用Aero,则屏幕捕获正常,会出现“特殊”窗口。所以在Vista上,只有当Aero被禁用时才会发生。一个想法?谢谢。 最佳答案 在调用BitBlt()时,添加CAPTUREBLT