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”通过点击文本,使其可编辑。 我应该怎么做呢? 我想我应该使用鼠标点击事件,但如何使单元格可编辑?

减lessWindows可执行文件的大小

我有一个Windows上的C + + / MFC应用程序 – dynamic链接它只有60kb静态它是> 3Mb。 这是一个通过电子邮件分发给客户,所以需要尽可能小。 它静态链接的MFC和MSCVRT库 – 因为它是一些问题的修复,我不想要更多的关于缺less库的支持调用 – 特别是非常有用的“应用程序configuration是不正确的”一个! 反正有剥离所有额外的MFC东西,这是DLL,但我不使用的Windows EXE的? 或者告诉它dynamic链接MSVCRT(它必须存在),但静态链接MFC DLL可能不是? 编辑 – 感谢,把它降到1.6Mb,将不得不做!

单行编辑控件的限制? GDI相关?

我正在使用对话框中的编辑控件 – 所有的MFC。 资源中指定的唯一样式是ES_AUTOHSCROLL。 对话框出现并正确显示。 编辑控件也可以正常工作和编辑文本 – 直到一个点。 此时,它完全停止显示文本。 编辑控件只是空白。 我的第一个想法是试图通过发送调用SetLimitText()编辑控件,只是发送EM_SETLIMITTEXT调整编辑控件的限制。 我设置了一个比前一个限制值大10倍的大数字,并通过EM_GETLIMITTEXT确认检索的数字等于所设置的数字。 之后,我仍然有这个问题,没有什么改变。 接下来我尝试捕获EN_MAXTEXT和EN_ERRSPACE。 这两个通知都没有发送。 最后,我开始尝试一些不同的input,如果我input了一个空格或一个句点,那么我可以比显示一个W来显示更多的字符。对话框中的字体是我的系统映射到的MS Shell Dlg微软Sans Serif。 这是一个比例字体,不同的字符有不同的宽度,所以我开始的事情,也许是GDI相关。 接下来,我捕获了EN_CHANGE,当它被触发时,我去创build一个显示IC,从编辑控件中select字体到IC中,然后在编辑控件的文本上调用GetTextExtent()。 显示在32760附近的问题是在16位有符号整数限制附近。 所以,我认为我的问题是GDI相关的,编辑控件不能超过这个限制。 我尝试用一​​个RICHEDIT2控件代替,但在空白之前显示的字符较less。 另一个奇怪的是,如果我继续input字符,并在编辑控件上调用GetWindowText(),所有的字符将被返回。 只是编辑控件是空白的。 是的,也许我不应该展示那么多的angular色,但它是这样的。 有没有人有更好的解释,解决scheme或解决方法?

DWORD_PTR,INT_PTR,LONG_PTR,UINT_PTR,ULONG_PTR何时,如何和为什么?

我发现Windows有一些新的Windows数据types DWORD_PTR, INT_PTR, LONG_PTR, UINT_PTR, ULONG_PTR 你能告诉我什么时候,如何和为什么使用它们?

我如何处理CEdit控件中的Return键?

我如何处理CEdit控件中的返回键( VK_RETURN )? CEdit控件是父对象CDialog 。

如何以编程方式查询Windows控制面板?

我需要在C ++ MFC中search整个Windows控制面板的string(就像从开始菜单或控制面板资源pipe理器的Windowssearch),任何人都可以帮助我? 我已经尝试在控制面板的虚拟文件夹内search,但不工作… 编辑:它现在工作! 但只有当compliled到适当plataform(x86或x64)(x86不能在x64上工作) void CSearchView::BuildControlPanelCache() { CComPtr<IShellFolder> pDesktop; SHGetDesktopFolder(&pDesktop); PIDLIST_ABSOLUTE path; SHGetKnownFolderIDList(FOLDERID_ControlPanelFolder,0,NULL,&path); CComPtr<IShellFolder> pFolder; pDesktop->BindToObject(path,NULL,IID_IShellFolder,(void**)&pFolder); ILFree(path); CComPtr<IEnumIDList> pEnum; if (pFolder->EnumObjects(NULL,SHCONTF_NONFOLDERS|SHCONTF_FOLDERS,&pEnum)!=S_OK) pEnum=NULL; if (!pEnum) return; PITEMID_CHILD pidl; while (pEnum->Next(1,&pidl,NULL)==S_OK) { STRRET strDispName; if( pFolder->GetDisplayNameOf(pidl, SHGDN_NORMAL, &strDispName) == S_OK ) { CComPtr<IQueryInfo> pLink; if (SUCCEEDED(pFolder->GetUIObjectOf(NULL,1,(PCITEMID_CHILD*) &pidl,IID_IQueryInfo,NULL,(void**)&pLink))) { TCHAR *pwszTip; pLink->GetInfoTip( 0, &pwszTip ); if […]

从C#中修改任何窗口的不透明度

是否有可能修改从C#打开的所有窗口的不透明度。 我GOOGLE了最小化的窗口,我才知道它可能与pInvoke调用。 它甚至工作。 同样,有可能从C#中更改所有打开的窗口的不透明度? 另外,我不在MFC的东西。 还有没有什么工具可以知道在dll中暴露的apis列表?

CloseWindow和WM_CLOSE的关系是什么?

我目前有点困惑:是WM_CLOSE和::CloseWindow以任何方式“相关”或完全不同的东西? closuresWindows的文档根本没有提到API函数CloseWindow 。 应该把CloseWindow叫做“MinimizeWindow”,还是我错过了什么?