想做windows界面程序,应该界面开发用mfc还是qtt或者其他,优势或者差别是什么?

windows、C++、MFC、Qt项目除错笔记
刚好今天解决了两个蛋疼的问题,就先记着,之后再补补以前的好了。
1.首先问题的现象是程序的Release版本崩溃了(Debug没有崩溃),崩溃的位置位于两个CString赋值,CString这货说实话,用了MFC这么久还真没怎么深究过,只依稀记得这货可动态改变缓冲区大小,且是通过引用计数进行内存释放的,一个赋值怎能崩溃?网上是查不到了的,因为这是不可能事件,只能自己找,我大概的解决路线如下:
(1)通过svn查看是因为加了一段代码导致,那段代码也就是简单的给wstring多赋了几个字符值,去掉则不崩溃,加上则崩溃,百思不得其解啊。
(2)崩溃的位置提示诡异,那么猜测有可能是内存损坏了,之后去检查相关调用,发现了问题的所在。
由于strlen本身是不计算\0的,在其中的一个类给char*赋值时,传入的len少给了一个\0的大小。
2.这个问题是关于多线程的,也是个蛋疼的问题,不过没有花费多少时间,总算是找到了。问题的现象是,MFC界面程序在经过某些操作之后,界面没有响应了(XP下发生,win7下正常)。任务管理器显示cpu为0,那么可以肯定不是死循环了,猜测到可能是多线程等待的问题。罪魁祸首是LeaveCriticalSection;由于某些同事的疏忽,在某个函数中调用了两次LeaveCriticalSection,导致后续调用EnterCriticalSection时程序等待,有点像死锁了。不过感觉还是微软实现的有问题,win7改了。
下面是补补之前的
3.多线程读写STL程序崩溃
同样遇到问题的人以及他们的解决方案:
我自己的解决方案是:通过发消息给窗体,等到主窗体的消息循环时,才进行处理,不直接调用接口,就可以避免多线程调用STL。
4.Windows TCP延迟问题:这个是之前做的多屏互动项目,需要通过TCP协议操作电脑,但由于TCP的延迟,导致效果不理想。找到了一个解决方案:
以下内容是从别处转载的:
TCP本身属面向链接的通讯协议。通讯双方的每一个收发动作,需要以通讯链路正常为前提。因此TCP协议内部提供了默认的ACK验证机制。而ACK验证方式存又与操作系统有关,在TCP中,对数据的确认往往是延迟的,在时延定时器没有溢出的情况下,一般情况是两个TCP数据对应一个确认,如果时延定时器溢出了,那么自然也会发送确认报文。但在某些系统中,会出现必须每次回复ACK包才继续发送TCP数据,这时就会出现以下问题:假定Server A、和Client B之间建立了一个TCP连接,某一时刻A第一次向B发送数据,发送完成后等待B回复的ACK包,而B认为收到第二个TCP数据包才回复ACK标记,则约200ms之后,B中的时延定时器溢出,B此时才向A回发一个长度为1的ACK确认包,因此B第二次收到数据时,会莫名其妙的产生一个约200ms的延时——这个延时不是别的,正是ACK确认包默认的发送时延。 & && &当我们测试自行研发的服务端通讯框架时,一旦其发生广播,则此时处于接收方的客户端很有可能会因为通讯双方的收发不均而引发上述现象——这并非是由于你的服务端通讯框架性能不达标,而是由于TCP的内部机制导致的。 那么,我们应该如何避免这种情况呢?这里介绍一种最简单也最容易实现的方法——修改注册表,提高客户端ACK包默认的发送频率,也就是缩短ACK包的发送时延: 首先,点击你电脑屏幕左下角的“开始”菜单,打开“运行”,键入“regedit”打开你的注册表;
选择HKEY_LOCAL_MACHINE 项目开始一层层的往下点,一直到
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/Tcpip/Parameters/Interfaces 这里是关于你网卡的数据,有很多项,且它们都有类似{5F26EBBD-9CA6-4219-9DBD-}这样的名字,但是正确的那个会在右边窗口显示包括你的IP地址和你的服务器IP地址等等网络设定)。 你找到IPAddress项符合你的本机IP地址的那个,那么它就是你连接网络的那个网卡的设定项,我们的任务目标就是改动它来提高客户端ACK包的发送频率。 其次,右键点击窗口右边的空白处,“新建”-“DWORD值”;
给它改名成“TcpAckFrequency”,然后右键点击它 ,选择&修改”,然后再那个&数值数据&的空白处填&1&(不用管是16进制,还是10进制) 最后,关闭注册表,重启电脑,修改完成。
有关TcpAckFrequency的补充说明: TcpAckFrequency 值这个值确定了windows用TCP/IP 发送应答消息的频率,也就是决定了在发送“命令正确应答”之前将等候几个数据包; 默认值为 2,这时TCP/IP 将在接收到 2 个分段后发送应答,或是在接收了 1 个分段但在 200 毫秒内没有接收到其他分段的情况下发送应答
如果值为 3,则 TCP/IP 将在接收到 3 个分段后发送应答,或是在接收了 1 个或 2 个分段但在 200 毫秒内没有接收到其他分段的情况下发送应答,以此类推。 如果需要通过消除 TCP/IP 应答延迟来缩短响应时间,则将该值设为 1。在这种情况下,Windows将每收到一个TCP数据包就回送一个“命令正确应答”。 该值的有效范围是 0 到 255,其中 0 表示使用缺省值(2)。
采用Delayed ACK机制后,通常是服务端发送2个数据包后,客户端再进行确认,这样将极大的减少不必要的ACK数据包,同时也能提高访问速度,减少带宽浪费。 修改方法: 在注册表中添加键值进行修改;
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersInterfacesAdapter GUID 值名称:TcpDelAckTicks(不同的操作系统该值的名称不尽相同) 数据类型:REG_DWORD
值数据:将该值设置为 0 到 6 之间的值 默认情况下,延迟 ACK 计时器值为 200 毫秒。如果将 TcpDelAckTicks 值设置为 0,则禁用延迟确认。
5.windows 7 高DPI UI错乱的解决办法
微软自己有提供解决方案,我们采用就可以了:
csdn上有个帖子: http://bbs.csdn.net/topics/
微软官方的解决方案: /en-us/library/windows/desktop/dd464660(v=vs.85).aspx
微软给出了一个CDPI类封装了转换函数,之后可以用这个进行常规替换,解决起来应该是很方便的。
6.Win7多点触摸VS2010以及后续版本单点长按右键问题解决方案
做触摸应用这点很重要啊
需求描述:需要在对话框右键菜单做出类似word大纲级别的右键菜单
在普通的菜单中这个是很简单很简单的,但是由于在对话框中,动态创建菜单,并且在菜单前加上【o】 这样的选中符号。辛苦之后找到解决方案 Cause: When a drop-down menu is displayed, the WM_INITMENUPOPUP message is sent prior to displaying the menu items. The MFCCFrameWnd::OnInitMenuPopup function iterates through the menu items and calls the update command UI handler for the item, if there is one. The appearance of each menu item is updated to reflect its state (enabled/disabled, checked/unchecked).
The update UI mechanism doesn't work for a dialog box-based application because
CDialog has no OnInitMenuPopup handler and it uses
CWnd's default handler, which does not call update command UI handlers for menu items.
Rusolution:
8.win 7窗体置顶问题(MFC)
相信很多人都遇到了,在网上搜索了很多方法,什么先AttachThreadInput到顶层窗体然后SetForegroundWindow,以及什么SystemParametersInfo关闭SPI_SETFOREGROUNDLOCKTIMEOUT属性,然后SetForegroundWindow在开启,能试的方法都试过了,都不能理想的让窗体置顶(MFC多文档窗体,有不同模式,需要在全屏模式下置顶),最后还是自己试验除了一套组合,
SetWindowPos(&wndTopMost,0,0,0,0,SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE); ::SetForegroundWindow(this-&GetSafeHwnd()); SetWindowPos(0,0,0,0,0,SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE);
前两个方法必须一起调用才有效果,最后那个是为了只置顶一次才添加。
本分类共有文章7篇,更多信息详见
& 2012 - 2014 &
&All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";
/*爱悠闲底部960*75*/
var cpro_id = "u1888128";FinderCheng 的BLOG
用户名:FinderCheng
文章数:123
评论数:1023
访问量:4056030
注册日期:
阅读量:24883
阅读量:252748
阅读量:992664
阅读量:146527
51CTO推荐博文
《让你的 Qt 桌面程序看上去更加 native》是一个系列文章。在这个系列中,你将会了解到如何让你的 Qt 桌面应用程序看上去更加 native。这里,我假设你已经清楚如何使用 Qt 编写桌面应用程序,因为文章中大多都是所谓的&细节&,而有时候恰恰是这些&细节&决定着用户体验。同时,这里的程序都是指桌面程序,不包括各个嵌入式平台。
关于 Qt 的介绍这里就不再赘述。这里只说明一点,相比其他的 C++ UI库,Qt 的处理实际上更类似 Java 的 Swing。Qt 的大部分组件都是由自己的绘图系统绘制出来的,这一点决定了 Qt 的效率不会像 MFC 或者 wxWidgets 那么高。同时,也正是由于这一点,使得 Qt 的桌面程序有时候看起来不是那么原生。
所谓 native,也就是这里所说的&原生&。任何桌面,Windows、GNOME、KDE、MacOS,都有着自己独特的风格。这种风格就称为 native。通常,获取一个窗口最最 native 的方式就是调用系统自己的函数,例如在 Windows 平台上使用 win32 API 创建一个窗口,这个窗口一定是 native 的。同样,你使用 Gnome 或者 KDE 的 API,也会获得一个原生的窗口。各个平台上的窗口组件布局也是不同的。在 Windows 上,菜单上面的 Help 总是出现在其他菜单项相邻的位置,菜单栏最右侧往往是一片空白。但是在 MacOS 上,Help 菜单是出现在菜单栏的最右侧,Help 菜单与其他菜单之间会有一大段空白。这就是两个平台的 native 风格的差异。如果你的程序仅仅按照 Windows 平台上的样式编写,MacOS 用户就会觉得这个程序很山寨。这对于一个真正跨平台的程序来说是不足的。
现在我们说明,这个系列所做的工作,就是让 Qt 桌面程序在 Windows、GNOME、KDE 和 MacOS 下都有着同原生程序一样的效果。当然,有些时候这个目的很难实现,因此,我们只是朝这个努力一下。
在开始正文之前,我们应该知道,实际上,各个平台都有自己的界面设计指南,告诉你在本平台上,确定按钮和取消按钮究竟谁在前谁在后,应用程序通常字体是什么,几号字等等。这些指导性文档都是可以在网上找到,下面我们列出来供大家参考:
KDE:本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
10:42:47 22:48:46编程方面,语言用 C/C++,想做个界面,不想用 MFC,除 了QT,还有什么好的做界面的方法吗?
程序界面不要求非常美观,简洁实用就行,之前想到用 C/C++ 做 DLL,界面用 C# 来做。
按投票排序
如果你读过一遍Win32 Windowing API以后,会发现MFC其实容易理解。而且自己可以逐步替换MFC的功能,直到打磨成自己用的最适合的框架如果实在不想用MFC,就直接用Win32 Windowing API,第一次用会觉得创建一个窗口的参数有点多,过了这个坎,会发现其实很容易理解的。而且那些复杂的参数,等弄明白了,可以自己包装简化起来
直接Win32 API……
你提到的:用 C/C++ 做 DLL,界面用 C# 来做我觉得就是一个很好的思路,并且我认为这也是未来的一个趋势:各种语言发挥自己各自的优势(C++负责核心运算,C#负责界面),最终的产品,是一个混合的产物就像一个国家,有工人,也有农民,还有知识分子,大家在一起才组成了这个国家
做界面,如果用C,我觉得BC也是个选择啊,BC的界面开发速度非常快,控件的开发速度也很快。C#的设计师原来就是设计Delphi,BC系统架构的。不过QT真的很赞,前天在车上读了它的界面设计最简单的部分,流式布局和信号插槽,都是很好的处理方式。不知道QT的三方控件多不多。
wxWidgets 全是原生UI,你值得拥有。但是它的使用方式类似于MFC。另外还有一个国产的BOLT,迅雷7用的就是那个,你可以尝试一下。
C++界面库里,最好用的就是 Qt 了。
wpf应该会是个不错的选择吧
C# 和 Qt 我都用过;我觉得你要是跨平台,建议使用Qt。如果只是在windows下开发,那么用C#编程比较方便。C#有的插件Qt基本都有,但是C#用起来要比Qt方便点。
Gtk+ 也是可以的
已有帐号?
无法登录?
社交帐号登录现在一般用什么来做windows程序的界面?还是用MFC吗?_百度知道
现在一般用什么来做windows程序的界面?还是用MFC吗?
提问者采纳
现桌面程序网页程序边界越越模糊所兴趣研究WPF前景乐观啊MFC微软旗用做界面没问题或者QT错啊用关键看公司要求像WFP能够界面设计程序功能彻底离所利于软件项目进步细化工界面美化块单独交给专门设计员处理让程序员能够集精力程序功能表达同能实现两者缝衔接
提问者评价
按照你说的,真的成功了,好开心,谢谢你!
其他类似问题
为您推荐:
其他2条回答
般都用VS2010吧MFC啊微软发工具现MFC发Win32应用程序挺看界面错
你可以先熟悉下SDK,SDK懂了再学MFC
mfc的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁QT和MFC来开辟的不合[整理版]Qt,梳理,QT,MFC,MFC的,MFC来,QT的,mfc,Qt的,性格不合
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
QT和MFC来开辟的不合[整理版]
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 mfc和qt 的文章

 

随机推荐