Articles of mfc

MFC:在ON_COMMAND函数混淆?

好吧,这是这个function 。 。 ON_COMMAND(ID_COLOR_RED,OnColor) ON_COMMAND(ID_COLOR_GREEN,OnColor) ON_COMMAND(ID_COLOR_BLUE,OnColor) 。 。 。 无效CMainWindow :: OnColor() { UINT nID =(UINT)LOWORD(GetCurrentMessage() – > wParam); m_nCurrentColor = nID _ ID_COLOR_RED; } 因此,在这里,CurrentMessage的wParam的LOWORD应该包含消息的ID,没关系,但是m_nCurrentColor = nID _ ID_COLOR_RED是什么意思; 手段? 对于红色,绿色或蓝色,m_nCurrentColor可以分别为0,1或2 … 所以首先我们在第一个语句中将消息ID转换为UINT,但是我们在第二个函数中使用m_nCurrentColor = nID _ID_COLOR_RED来做什么? 谁能解释一下吗?

文件操作函数返回,但在Windowsclosures时不实际提交

我正在一个MFC应用程序,可以(除其他外)用于closuresWindows。 当这样做时,Windows当然会将WM_QUERYENDSESSION和WM_ENDSESSION发送给所有的应用程序,包括我的。 但是,问题在于我的应用程序(作为一些析构函数的一部分)删除了在执行过程中使用过的某些文件(使用CFile :: Remove)。 我有理由相信,当Windowsclosures应用程序时,会调用析构函数(但难以确定)。 但是,当Windows重新启动时,我偶尔会注意到应该删除的文件仍然存在。 即使程序的执行是相同的(我有一个用于testing的脚本),这种情况并不会一致发生。 这导致我认为发生以下两件事之一:或者a)析构函数没有被一致地调用,或者b)Remove函数返回,但是在Windowsclosures之前文件并没有真正被删除。 目前唯一的解决方法是,如果我的程序停止后,系统等待大约10秒钟的关机,那么这些文件将被正确删除。 这使我相信,b)可能是这样的。 我希望有人能够帮助我解决这个问题。 关心Mort

如何编辑MFC列表框中的单元格?

我有一个CListCtrl控件有2列和任意数量的行。 我希望用户能够点击(或者双击)“单元格”,并能够编辑其中的文本。 我的意思是,我希望能够点击和编辑任何地方,说“testing”通过点击文本,使其可编辑。 我应该怎么做呢? 我想我应该使用鼠标点击事件,但如何使单元格可编辑?

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); 我该怎么办?