Articles of mfc

Windows 7:无论其他窗口有什么焦点,如何把窗口带到前面?

我正在实施一个任务栏replace,docker式应用程序切换器风格的程序。 它使用OpenGL做了一些独特的东西,还有键盘快捷键,所以它的设置方式,窗口并不总是有焦点。 我想实现它,这样我就可以把一个任意窗口放到前台,就像任务栏或ALT-TAB程序一样。 但是,我的代码只是简单地导致应用程序图标在任务栏中闪烁。 Windows API文档说,这是应该发生,但我正在寻找一种方法来解决这个问题。 我已经调整了我的代码从下面的例子,它说附加到前台线程应允许您设置前景窗口。 这里是网站: http://www.voidnish.com/Articles/ShowArticle.aspx?code=dlgboxtricks http://invers2008.blogspot.com/2008/10/mfc-how-to-steal-focus-on-2kxp.html 我的代码看起来像这样。 请注意,它是使用Win32的包装的Python(self.hwnd是我想要把前面的窗口的句柄): fgwin = win32gui.GetForegroundWindow() fg = win32process.GetWindowThreadProcessId(fgwin)[0] current = win32api.GetCurrentThreadId() if current != fg: win32process.AttachThreadInput(fg, current, True) win32gui.SetForegroundWindow(self.hwnd) win32process.AttachThreadInput(fg, win32api.GetCurrentThreadId(), False) 但是,除非我的窗口是前景窗口(通常不是这样),否则这只会导致程序的图标闪烁。 我在做线程连接错误? 有没有其他的方法来解决这个问题? 我认为必须有,因为有很多应用程序切换器,似乎能够做到这一点很好。 我正在用python写这个,但是如果有另一种语言的解决scheme,我将使用包装器或者做任何必要的操作来启动和运行。 提前致谢! 编辑:我会打开一个方法,使其工作只在我的特定的计算机,即一种方式来启用,在我的机器上,任何应用程序的重点。 解决:你必须做的是禁用前台锁。 结果如此简单: win32gui.SystemParametersInfo(win32con.SPI_SETFOREGROUNDLOCKTIMEOUT, 0, win32con.SPIF_SENDWININICHANGE | win32con.SPIF_UPDATEINIFILE)

CArray不调用内存重新分配的拷贝构造函数,现在呢?

假设我有一个需要复制构造函数的类来创build正确的副本: struct CWeird { CWeird() { number = 47; target = &number; } CWeird(const CWeird &other) : number(other.number), target(&number) { } const CWeird& operator=(const CWeird &w) { number = w.number; return *this; } void output() { printf("%d %d\n", *target, number); } int *target, number; }; 现在麻烦的是,当重新分配内存时,CArray不会在其元素上调用复制构造函数(例如,从旧内存到新的内存只有memcpy),例如这个代码 CArray<CWeird> a; a.SetSize(1); a[0].output(); a.SetSize(2); a[0].output(); 结果是 47 47 […]

处理C ++代码中的HTMLbutton单击事件

我有一个Windows本机C ++ / Win32 / MFC对话框应用程序。 我正在使用对话框中的IE ActiveX控件来呈现一些HTML内容。 正在呈现的HTML包含一个button。 该button有一个onClick JavaScript处理程序,如下所示。 <input type="button" id="uniqueButtonID" name="uniqueButtonName" value="blue" onClick="OnButtonClick('blue');"> 目前button的点击是由所显示的JavaScript处理程序在页面中处理的。 这一切工作。 我想,而是处理button单击对话框C ++代码。 我有一些处理对话中的其他事件的经验。 例如,下面的工作,并允许处理文档完整的事件和导航。 BEGIN_EVENTSINK_MAP(DMyDlg, CDialog) ON_EVENT(DMyDlg, IDC_EXPLORER2, 259, DMyDlg::DocumentCompleteExplorer2, VTS_DISPATCH VTS_PVARIANT) ON_EVENT(DMyDlg, IDC_EXPLORER2, 250, DMyDlg::BeforeNavigate2, VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL) END_EVENTSINK_MAP() 这些是预先定义的众所周知的事件。 不知道如何将其转换为处理我在onClick =“”部分的button中定义的内容。 有人知道怎么做吗? 这里的动机是我有一些代码用于另一个定义一些业务逻辑的C ++应用程序。 我想在这里使用相同的业务逻辑。 目前我必须每次都把它翻译成Javascript。 如果我可以在C ++代码中处理这个事件,我可以复制/粘贴(或者通过一个DLL来重新使用),并避免Javascript翻译阶段。

如何在Windows中使用C ++获取系统文件夹path(C:\ Windows C:\ Program Files)?

我在c ++ MFC编程, 我想得到“C:\ windows”“c:\ program files”文件夹的path。 有时用户可能会在其他文件夹(如c:\ windows0)中设置窗口。 有没有任何API来获得窗口和程序文件path的绝对path? 非常感谢!

捕获MFC应用程序在纯C ++ dll中生成的Windows消息

首先:这是可能的吗? 我有一个第三方DLL连接一些硬件。 它是用MFC编写的。 我收到(从DLL供应商)示例Visual Studio 2010解决scheme,它只有一个项目:一个MFC应用程序(.exe)调用第三方DLL有问题。 它工作正常。 当我尝试从我的DLL(这是简单的C ++,没有MFC,没有.NET)使用第三方DLL,我可以调用它的function很好,但有一个catch:示例MFC应用程序似乎“重写”按顺序MessageProc捕获第三方dll生成的某些消息。 虽然DLL有一个名为“RegisterFuncCallback”的函数,我使用它,我的callback永远不会被调用。 所以这里的问题是:如何在不创buildMFC应用程序的情况下捕获这些消息? (这甚至有可能吗?)

你如何发送一个命名pipe道string从umnanaged托pipe代码空间?

我似乎有一个命名pipe道101的问题。 我有一个非常简单的设置来连接从C ++非托pipe应用程序发送到C#托pipe应用程序的单工命名pipe道。 pipe道连接,但我不能通过pipe道发送“消息”,除非我closures似乎冲洗缓冲区并传递消息的句柄。 这就像消息被阻止。 我已经尝试颠倒客户机/服务器的angular色,并调用它们与不同的国旗组合,没有任何运气。 我可以很容易地从C#托pipe到C ++非托pipe的另一个方向发送消息。 有没有人有任何见解。 任何人都可以成功地发送消息从C托pipe非C托pipe? 我可以find大量的内部amanged或非pipe理的pipe道的例子,但不能相互pipe理/从unamanged – 只是声称能够做到这一点。 在清单中,为了清楚起见,我省略了许多包装材料。 我认为相关的关键是pipe道连接/创build/读取和写入方法。 不要担心在这里阻塞/线程太多。 C#服务器端 // This runs in its own thread and so it is OK to block private void ConnectToClient() { // This server will listen to the sending client if (m_InPipeStream == null) { m_InPipeStream = new NamedPipeServerStream("TestPipe", PipeDirection.In, 1); […]

C ++callback函数

我正在使用afxwin SetTimer函数设置一个计时器。 这个函数接收三个参数,其中一个是callback函数。 我在一个类中设置了一个callback函数(我们称之为NS),并试图将其作为parameter passing。 然而,编译器抱怨说: void (__stdcall NS::*) (HWND, UINT, UINT_PTR, DWORD); 不一样: void (__stdcall *) (HWND, UINT, UINT_PTR, DWORD); 我该怎么办?

“二进制不是build立在debugging信息”在mfc应用程序的警告含义?

当我在Windows 7中运行我的Windows应用程序(MFC)时出现以下警告 。 'XXX.exe': Loaded 'C:\2010\Debug\bin\plugins\control\libhotkeys_plugin.dll', Binary was not built with debug information. 请帮助我。谢谢

有没有办法在编辑公共控制中添加我自己的button?

说,如果我在我的基于MFC的对话框窗口中有一个默认的编辑公共控制 : 我正在寻找一种方法来添加一个小的“X”(或删除)button里面(这是我的Photoshop渲染我需要): 有没有办法通过修改默认的编辑控件?

在运行时设置CMenu项目提示

如何在运行时设置CMenu项目提示? 我知道它可以在VS的资源编辑器中完成,但我没有这样的资源,并创build菜单,它的项目dynamic。