关于WPF、Win32、MFC的棘手问题
让我们假设您是一个具有C ++和C#基本知识的IT学生.让我们假设您想设计的应用程序: 需要提供一些性能,例如Archivers,加密算法,编解码器 使用某些系统调用 有一个gui 您想学习一个API,该API能够像前面描述的那样编写应用程序, 是主流 是未来的证明 有权您找到一个体面的工作 很容易 - 我的意思是像VCL一样容易,不像Winapi那样容易 因此,做出这些假设,您会选择什么API? MFC,WPF,其他?我真的很喜欢VCL和QT,但它们不是主流,我认为很少有人会希望您在QT或Visual C ++构建器中编写应用程序... 感谢您的答案. 解决方案 注意:几年前写了以下答案,考虑到桌面应用程序的开发.今天(在2018年),您可能只是构建一个Web应用程序,以最终获得合理的跨平台和独立于设备的内容. (例如,使用服务器端上的ASP.NET核心,再加上UI框架/库,例如React,vue.js或客户端上的Angular).
0 2024-03-01
编程技术问答社区
如何读取SD卡的ID号?
如何编程读取SD卡的CID寄存器,其中包含序列号和其他信息?我可以通过Android Java或本机代码做吗? 预先感谢 埃里克 解决方案 这是用于获得SID和CID 的示例代码 if (isExteranlStorageAvailable()) { try { File input = new File("/sys/class/mmc_host/mmc1"); String cid_directory = null; int i = 0; File[] sid = input.listFiles(); for (i = 0; i
2 2024-01-28
编程技术问答社区
试图为MFC'的CMap编写一个for_each算法
是的,我知道我应该做一个迭代器,但是我需要快速完成并为与VC ++相关的任何内容编写适当的迭代器,这是令人沮丧的. (这也适用于许多其他标准的事情,并且正在使我的工作负担烦恼.:() 所以我写了一个for_each()算法来处理这种麻烦: template void for_each(CMap& container, std::function body) { POSITION pos = container.GetStartPosition(); while (pos != NULL) { AK key; AV value; // Get key and value container .GetNextAssoc(pos, key,
2 2024-01-23
编程技术问答社区
寻找C++中搜索和替换的圣杯
最近,我正在寻找一种替换字符串中的令牌的方法,这实际上是找到和替换的(但至少还有一种解决问题的方法),并且看起来像是相当平庸的任务.我提出了一些可能的实现,但是从性能的角度来看,它们都没有令人满意.最好的成就是在迭代中〜50U.该案例是理想的,该绳子的大小从未增长,最初我省略了要求案件不敏感的要求 这是 coliru 我的机器的结果: boost.spirit符号结果:3421?= 3421 100000个周期的时间为6060ms. Boyer-Moore结果:3421?= 3421 100000个周期占用了5959ms. Boyer Moore Hospool结果:3421?= 3421 100000个周期占了5008ms. Knuth Morris Pratt结果:3421?= 3421 100000个周期花了12451毫秒. 天真的STL搜索和替换结果:3421?= 3421 100000个周期占5532ms. Boost替换_ALL结果:3421?=
2 2024-01-23
编程技术问答社区
为网络浏览器实现ActiveX控制
我的要求是开发一个可以将字节流发送到串行端口的ActiveX控件. ActiveX控件应仅公开一个函数 SendData(char* data, int nLen, int nPort) 应该通过按在Internet Explorer中呈现的Java中开发的按钮(32和64位)来调用此功能.我是否应该使用MFC/ATL或浏览器辅助对象使用无窗Activex控件.将来我可能还需要支持Firefox. 任何帮助将不胜感激. 解决方案 尽管BHO可以正常工作,但ActiveX将更适合您的要求. BHO与ActiveX非常相似 - 它们是在浏览器窗口中运行的本机或托管代码.不同之处在于,BHO适用于所有页面(创建浏览器选项卡时它是实例化的),而ActiveX当页面中的某些JavaScript代码创建它(或使用 tag. ActiveX的时间是页面. ATL是一个更好的选择.使用VS向导,并创建基于ATL的COM内服务器.然后添加一个com对象.由于您想从HTML调用
4 2024-01-10
编程技术问答社区
升级到VS2010后,IsWindow(activeX.GetSafeHwnd())总是假的。
我有一个使用古代(大约1999年)第三方Activex控制的MFC应用程序. 自将项目从VS2008升级到VS2010以来,我有问题... 在"父对话框"的" onsize处理程序"中,即使getsafehwnd()返回的句柄始终返回false,即使getSafehwnd()返回非记录值.控件的其余的父对话框显示得很好,但似乎没有响应任何输入. 我已经看过这篇文章但是在这种情况下,getSafehwnd()在这种情况下没有返回null(第一次被称为后,这是在对控件进行实例化之前). 该控件确实会导致跟踪消息"控制无窗",然后将其加载后输出.但是,当在VS2008中编译时,它也可以做到这一点,因此这可能是红鲱鱼.搜索此消息指出我创建了一个从Colecontrolsite派生的类,并拒绝控制的无窗口,但是似乎没有一个可用的例子,而且我说,这确实是这样的原因.问题. 我还在 "嵌入在嵌入中的ActiveX控制 通过使用Visual C ++ 2010开发的项目中
4 2024-01-10
编程技术问答社区
返回ATL ActiveX控件的对象阵列
我有一个现有的ActiveX控件,我需要添加一种返回对象数组的方法. 该对象是我需要创建的一种类型,我该如何返回一系列对象? 解决方案 您返回一个安全阵列或 - 我的喜好 - 具有安全阵列的变体值,例如一系列变体.各种Activex托管环境(包括脚本语言)都认可了这一点. 如何在atl com中创建变体数组并传递回VB 使用com传递数组 at at atl aTl aTl aTL aTL aTL a antl对象具有变量阵列[out]参数不起作用[out]参数vbscript 获得访问/从自定义ActiveX功能的阵列 li> 将变体从com到c ++ client
2 2024-01-10
编程技术问答社区
是否可以在win32应用程序中使用ActiveX控件?
我正在用 win32应用程序用 mfc共享dll ,我试图在其中使用 activex控件,这是可能的吗?还是我只是在浪费时间? 解决方案 创建新的MFC项目时,请确保激活ActiveX支持(示例使用VS2008): 通常,您想在对话框窗口中使用ActiveX控件.右键单击Designer视图中的对话框,然后选择"插入ActiveX Control",然后选择所需的ActiveX: 如果您想在对话框外部自由嵌入Activex控件,则有一个用于MFC的ATL包装器.但这有点棘手,看起来会这样: #include "stdafx.h" #include "atlbase.h" #include "oleidl.h" #include "comdef.h" ... ... AtlAxWinInit(); pPluginWnd = new CAxWindow(); CRect r = GetParent()->GetClientRect();
4 2024-01-10
编程技术问答社区
用c#写一个com控件并在MFC中使用它
如果有可能在C#中编写COM控件或ActiveX并在MFC中使用它? 解决方案 是.首先,您需要创建com对象.以下是一个非常简单的例子. [Guid("123565C4-C5FA-4512-A560-1D47F9FDFA20")] public interface IDoSomething { [DispId(1)] string Name { get; } [DispId(2)] int DoSomething(); } [ComVisible(true)] [Guid("12AC8095-BD27-4de8-A30B-991940666927")] [ClassInterface(ClassInterfaceType.None)] public sealed class DoSomething: IDoSomething { public DoSomething() { } public strin
0 2024-01-10
编程技术问答社区
在MFC中为一个ActiveX控件添加滚动条
我正在尝试使用Microsoft Foundation类库来创建ActiveX控件. 我创建了控件.这是图形控件.我也将一些按钮放在控件上. 我正在尝试使用CScrollBar类向我的控件添加滚动条. 我使用CScrollBar::Create方法创建控件.在应用程序中使用ActiveX控件时,我可以看到控件. 我在控制类中添加了OnHScroll方法.这源于COleControl类. 当我滚动时,我使用CScrollBar::GetScrollPos获得我总是返回零的滚动位置. 这是用于在ActiveX Controt中创建滚动条的代码. 在mainclass.h文件中进行控制的代码: private: CScrollBar m_HScrollBar; protected: afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); DECLARE_
4 2024-01-10
编程技术问答社区
在MFC无窗口Activex中无法获得Cwnd类的句柄?
我较早提出了两个问题,每篇文章都有一些解决方案,但问题仍然存在. 我的第一个问题是:为什么无窗ActiveX不返回句柄.该建议是"更改创建设置,使其无窗户激活,我已经尝试过,但是m_hWnd属性仍然像GetSafeHwnd()方法一样返回零. 第二个问题是同一问题,这个问题集中在Colecontrol阶级和祖先CWND上.解决方案是这样的"在控制初始化代码中的某个地方创建不可见的窗口.处理发送到此窗口的消息,并直接调用控制方法" .所以我做到了,但是创建的类仍然返回零句柄. 这是我的新不可见类来源: // moWind.cpp : implementation file // #include "stdafx.h" #include "PINActive.h" #include "moWind.h" #include "include\xfspin.h" #include // moWind IMPLEMENT_DYNAMIC(moWind,
8 2024-01-10
编程技术问答社区
将简单的MFC CView/CDocument/CSingleDocTemplate应用转换为ActiveX控件
我有一个相当简单的MFC应用视图上的树.所有非常标准的MFC MVC. 我现在需要转换此应用程序,以便它可以作为ActiveX控件,然后可以将其嵌入较大的应用程序中. 我应该如何解决这个问题? 是否可以在CSingleDocTemplate中使用COleControl子类代替CFrameWnd子类?或者我需要将CFrameWnd子类放置在中如何? 失败了,如何在ActiveX控件中使用现有的CDocument\CView子类? 解决方案 回答我自己的问题:我发现了很多关于此旧文章的引用,该文章曾经在 http://www.microsoft.com/mind/0497/mfc.asp ,但很久以来就消失了. :( 幸运的是, Wayback Machine 仍然有完整的副本: Steve提出了两个新类的源代码: CActiveXDocTemplate: CSingleDocTemplate CActiveXDocControl:
8 2024-01-10
编程技术问答社区
如何将MFC ActiveX控件添加到一个现有的Activex项目中?
在Visual Studio 2008中,我可以创建一个MFC ActiveX项目,并提出一个向导来创建单个ActiveX控件.我现在想在此项目中创建新控件. 我找不到任何方法. 解决方案 我刚刚发现生成ActiveX Control代码的模板和脚本位于: 中 Microsoft Visual Studio 9.0 \ vc \ vcwizards \ appwiz \ mfc \ control \ 可能有某种修改方法可以为现有项目添加控件. 其他解决方案 我也找不到一种方法. 在VC6中,您可以指定(新)项目中想要多少个ActiveX控件.也许您可以在VC6中构建该项目并将其移植到VC2008. 否则,我最好的猜测是您复制当前ActiveX控件的代码.创建两个类似于当前控件的" Ctrl"和" Propage"类,然后在.odl/.idl文件中复制标题.如果完成正确,则新控件将出现在类视图中,您可以添加方法,属性和事件. 其他解决方案
0 2024-01-10
编程技术问答社区
为什么GetSafeHwnd()在ActiveX控件中返回0?
我已经开发了一个MFC ActiveX控件,该控件在运行时是无窗的且不可见的,而我认为基本上ActiveX是一个可以操纵Windows句柄的控件,我使用GetSafeHwnd()来获取Windows Wander,但不幸的是,此方法运行时返回零.也许我在创建ActiveX时设置了错误的选项.我如何创建一个可以操纵Windows Hanlde的无窗ActiveX? 解决方案 根据定义,无窗ActiveX控件没有窗口,并呈现为其父的一部分.如果要使用控件中的Windows消息,则可以使用消息循环创建Worker线程,并处理此处的任何消息.要有消息循环,您不需要窗口,只需线程即可.该解决方案可以在无窗口控制或任何COM组件中实现. 另外,您可以通过更改其属性来使用窗口的ActiveX控件.
2 2024-01-10
编程技术问答社区
添加#include <boost/thread/mutex.hpp>会破坏我的ActiveX控件?
在ActiveX控件中使用时,Boost :: Mutex标头是否存在已知问题? (Boost版本V1.39) 如果我在Visual Studio 2008中创建一个 MFC ActiveX Control 项目,称为 " defaultocxcontrol" ,那么我可以构建它,将控件自身作为构建的一部分,并且可以按照您的期望将其插入ActiveX测试容器中.一切都很好. 如果我只添加此行: #include 在我的DefaultOCXControlCtrl.h文件的顶部和重建:构建结束时的注册步骤失败了: 调试断言失败了! 程序:C:\ Windows \ System32 \ regsvr32.exe 文件:f:\ dd \ vctools \ vc7libs \ ship \ atlmfc \ src \ src \ mfc \ dllinit.cpp 线:587 令人讨厌的断言看起来像这
0 2024-01-10
编程技术问答社区
从C#程序中启动的MFC dll(用C++/CLI包装)的访问违规
我为MFC DLL(C ++)撰写了托管的C ++/CLI包装器,并在第二次呼叫DLL后违反了一些访问! 包装器 // in .h typedef CKeyManagerServerApp* (*KeyManagerInstance)(CCommonUtils *); ManagedKeyInterface::ManagedKeyInterface() { HINSTANCE m_keyManagerLib = LoadLibrary("pathToDll"); KeyManagerInstance _createInstance = (KeyManagerInstance)GetProcAddress(m_keyManagerLib, "GetInstance"); // get native reader interface from managed reader interface CCommonUtils *nativeReade
2 2024-01-09
编程技术问答社区
如何在Windows Vista/7中以编程方式控制文本输入面板(TabTip.exe)?
我正在调整触摸屏接口的应用程序,我们想使用Windows Vista/7中包含的平板电脑文本输入面板,特别是其键盘.我想显示和隐藏适合我的应用程序.基本上,我想要ShowKeyboard()和HideKeyboard()函数.控制这一点的最佳方法是什么? 我看着itextinputpanel API,但我无法直接用它来控制键盘(也许我错过了什么?).我还尝试将窗口消息发送到其窗口. 该应用程序用C ++/MFC编写. 所有指针都非常感谢. 解决方案 我解决了问题.事实证明,间谍++确实是Windows程序员最好的朋友. 首先,输入面板窗口的窗口类结果是" iptip_main_window".我用它像这样获取窗口句柄: HWND wKB = ::FindWindow(_TEXT("IPTip_Main_Window"), NULL); 事实证明,我只能发布与其自己菜单发送的相同的WM_Command消息.大多数操作都可以从菜单上获得:码头顶部,码
10 2024-01-09
编程技术问答社区
64位MFC版本中的访问违规异常
我试图将32位应用程序移植到64位.计算似乎正确运行,但我无法正确配置视图.我正在使用MFC,C ++和OpenGL,Intel 10.0.027编译器在W7 X64机器上VS2005内部. When the crash happens, I get the following message: "First-chance exception at 0xffffffff8043b1b6 in 3DApp.exe: 0xC0000005: Access violation at location 0xffffffff8043b1b6" and this is the stack trace: ffffffff8043b1b6() user32.dll!UserCallWinProcCheckWow() + 0x11d bytes user32.dll!DispatchMessageWorker() + 0x12a bytes 3DApp.exe!AfxInter
6 2024-01-09
编程技术问答社区
无法编译64位的Visual Studio 2010项目
我有几个VS 2010项目,我无法以64位编译(32位可以很好地制造出毫无问题).我做了广泛的事情,例如由命令行,首先由IDE重置Visual Studio设置;维修,重新安装等,无法编译项目.总是告诉我 cannot find ******.lib lib文件始终是系统库.示例: fatal error LNK1104: cannot open file 'shlwapi.lib' fatal error LNK1104: cannot open file 'kernel32.lib' 解决方案 在我向同事寻求帮助之后,我们注意到,即使从TFS获得清洁项目的构建,借助Overrite选项,项目的配置属性>我的计算机上的VC ++目录总是与其他计算机不同. 搜索更多信息,我们在 使用" del%homepath%\ appdata \ local \ microsoft \ msbuild \ msbuild \ v4.0 \ microsoft.cpp.
2 2024-01-08
编程技术问答社区