mfc

阅读 / 问答 / 标签

mfc中使用waitforsingle

可以不使用waitForSingleObject,因为mfc主线程在不被关闭的话是不会结束的,所以不必使用wait这样的函数进行等待,但是很多情况下,我们又需要知道我们创建的工作线程的情况,所以还是需要了解工作线程的返回值。那么我们可以使用微软提供的函数MsgWaitForMultipleObjects。

有没有必要学MFC呢?

个人您应该深入点学习C++,本人大三,读的是信息管理与信息系统专业,也对编程感兴趣,极力推荐那本《C++编程思想》,写得真的 很好!

想用c/c++写windows编程,又不想学MFC怎么办?

学习QT编程,QT做了简单的系统抽象,不光能在windows上跑,还可以跨其他平台,语法是纯c/c++

MFC中如何在一个按钮中循环一个事件,在点击另一按钮时结束这个事件?

另开一个线程到时可以,不过这个createthread函数(启动线程函数)应该放在BUTTON1里然后你BUTTON1里的循环放在线程函数里,BUTTON2控制bInLoop真假来结束你的线程里的循环。如果不开一个线程其实也可以那就是重载run()函数,部分代码for (;;) { if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { do //if there is pump all waiting { if ( !PumpMessage() ) return ExitInstance(); } while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)); } else if (AfxGetMainWnd()->IsIconic()) { WaitMessage(); }///你的while循环改成ifif(bInLoop) {/////////////////BUTTON1设置bInLoop为真BUTTON2设置bInLoop为假。 }}

在WTL和MFC中,如何知道一个控件的状态是显示(SW_SHOW)还是隐藏呢(SW_HIDE)?

BOOL IsWindowVisible(HWND hWnd);

请教每一个MFC类都有头文件与实现文件吗?

确切地说,不一定。类的声明和实现分开(某些人认为)是个好习惯。所以MFC向导生成的文件,是文件与实现文件分开的。但是你其实可以将成员函数写到类里面,这样就可以省下了实现文件。当然,对于MFC,将实现与声明写在一起不是个好习惯。因为MFC有些内容必须写在类外面,比如MESSAGE_MAP。所以,你是省不掉实现文件的。所以还是乖乖地实现和声明分开吧。而对于相对比较小,而且经常使用的成员函数,可以考虑放到类实现里面,便于内联处理,这样代码清晰,而且速度快。如果你使用WTL,那么可以把全部实现写到类里面。我现在就是这么做的。有人说这样代码不清晰。但是注意,界面类本身就是作为“代码集合”来使用的。所以不存在“暴露接口”的问题。将成员函数写在类里面,反而利于维护和调试。相对于MFC,推荐使用WTL做界面,比之MFC,WTL有轻量级,代码高效简洁,风格优雅的好处。WTL的资料,你可以通过百度《MFC程序员的WTL指南》来得到:http://www.baidu.com/s?tn=monline_dg&ie=gb2312&bs=MFC%B3%CC%D0%F2%D4%B1%B5%C4WTL%CA%D6%B2%E1&sr=&z=&cl=3&f=8&wd=MFC%B3%CC%D0%F2%D4%B1%B5%C4WTL%D6%B8%C4%CF&ct=0

c++ 的 stl windows sdk mfc wtl 这几个部分应该怎么学习啊

这些学完就可以勇闯天下啦

wtl,atl,mfc,哪个cstring效率高一些呢

不明白,有区别吗?

MFC,WTL,WPF,wxWidgets,Qt,GTK 各有什么特点

MFC乃曾经的老大,现在来看设计有点落后;原本可以做得更好用,但MS为了推COM而变得臃肿,而现在MS为了推.net更不愿意继续发展它。WTL基于ATL,ATL是COM组件的模版库,COM是C++应用中的毒瘤(明知有人会喷我,我依然坚持真理); WTL曾受MS打压,因为MS怕它的轻巧特性会妨碍推广.Net,现在不需要打压了,因为已经扶不上墙了。WPF:不是给C++用的。wxWidgets:小巧、小众、多bug;和MFC差不多,这是优点,也是死穴。Qt:库有点庞大,啥都有,信号和槽机制需要特殊的编译器搞;没能尽量复用C++已有的库,看重复的东西会人特别烦。(我个人最看好Qt)。GTK:两个字“难用”。

MFC,WTL,WPF,wxWidgets,Qt,GTK 各有什么特点

WTL都算不上什么Framework,就是利用泛型特性对Win API做了层封装,设计思路也没摆脱MFC的影响,实际上用泛型做UI Framework也只能算是一次行为艺术,这个思路下继续发展就会变得没法用了,比如 代码过于复杂,编译太慢,出错不好调试等问题难以解决。而且封装得也不完全,还是随处可见 HWND HDC之类的东西。用途主要是写一些很小的程序,或者作为其他UI框架的后端实现部分,比如我写过一个小框架用来做安装卸载程序,非常小,其中创建管理窗口部分是用WTL的。MFC是更高级点的Win API封装,比WTL封装彻底,很难见到HWND HDC了,也提供了不少实用工具类,比如高级控件,泛型容器,IO访问,网络协议等。除此之外,还提供了一些基本框架,比如 Document/View,这就是个MVC的简化版本,只有MV,但是对于数据的管理,消息的传递等又没有什么约束,导致Doc/View被用得乱七八糟。尤其是对事件处理的模型,消息映射是功能简陋,而且容易出错的方式,唯一优点是性能好。 从VC++ 1.X就有MFC了,那时整个UI界的设计思想都比较落后(除了Apple),MFC又背负了沉重的兼容性包袱,比如vc++ 1.52的MFC程序到了vc2003稍加修改都可以编译,导致MFC后期没有什么发展,就是沿着老的思路完善了些细节,添加了些组件,但是根本性的设计问题没有改进。GTK,这个吃了语言的亏,用C写面向对象实在是痛苦,虽然在思想上比MFC要先进了些,但是写出来的代码比MFC要罗嗦很多了。相比MFC,多了Layout的概念,事件处理上有了Signal/slot,虽然用起来很麻烦。wxWidgets,这个基本就是个跨平台的MFC,对各个平台的差异做了抽象,实际上后端大多还是用平台原生的API实现,好多控件都是直接用系统原生的。有wxWidgets for GTK+的版本,后端就是GTK+,wxWidgets就是一层壳。这也是wxWidgets的优点,它编译出来的程序发行包比较小,性能也不错。以上这些就是上世纪90年代的UI Framework技术水平了,至今它们也依然没有太多进步。下面来谈谈21世纪的技术。Qt,虽然它也是上世纪90年代出现的,但是它在21世纪有了长足的进步。应该说它的起点就比较高,一开始就定位跨平台,而且不满足于简单封装系统API,而是要自己创造出一套完整的API和框架,甚至要代替系统API,所以不仅仅是做UI,而是涉及到了APP开发所用到的所有东西,包括网络,数据库,多媒体,脚本引擎等。signal/slot是Qt发明的,这是事件通知模型里C++语言的最佳实现了,甚至我都觉得这该写进C++标准,估计C++委员会的老顽固们是从不写GUI的。早期的QT也是没有DirectUI的概念的,每一个QWidget都对应一个原生窗口,从Qt4.4开始,只有顶层QWidget才是原生窗口,而Child Widget是Alien Widget,只是个抽象的图层不对应原生窗口,这就实现了DirectUI的概念,很多图形效果也就变得可能了,比如窗口层叠透明效果。在4.8后实现了QPA(Qt Platform Abstraction),这就使移植Qt变得很容易,目前Qt是支持平台最多的框架没有之一。由于早期授权的问题,Qt对于开源社区不是很友好,导致推广不太顺利,直到它改成了LGPL方式,如果Qt能早点想开了,恐怕就没有wxWidgets的生存空间了。Qt的缺点也是有的,就是太大,不过可以自己剪裁,我可以把QT库剪裁到发行包压缩后2.5MB。WPF,微软在Win Form的思路上走到死胡同后,终于痛下决心用正确的方法开发UI库了。21世纪的UI一定是定义出来的,绝对不能是代码写出来的,所以有了XAML这个强大的定义工具,不但可以定义UI布局,还包括图形动画效果,消息响应方式等。配合C#这种优秀的语言,更是如虎添翼。但是问题也很明显,就是过于庞大,不仅开发时要用到庞大的IDE和设计工具,发行的安装包也十分巨大,所以目前还是很少有人拿他写通用软件客户端的,大多是做企业项目时写专用客户端。大概4-5年前吧疼讯曾经用WPF写了个QQ,但是只实现了基本功能就已经比C++客户端大好多了,而且运行缓慢,主要是太吃内存,而且那时WPF的优化还不充分。最后我想补充下真正的UI库之王,cocoa。Apple的成功有很多原因,其中之一就是cocoa,cocoa理念十分先进,而且出来得早,我都怀疑Qt和WPF有不少思想都是借鉴cocoa的。定义式的UI,用xib就可以定义UI的绝大部分细节,而且提供所见即所得的可视化设计工具。严格的MVC,而且定义非常清晰,分工明确。signal/slot,虽然不叫这个名字,但思想就是,而且真的是拖动鼠标就能connect。提供了ARC,闭包和反射,给UI开发带来巨大的便利性,当然这得益于Objective-C这个语言。再补充下 Borland的OWL和VCL。我是从Borland C++3.0和Delphi 1.0开始用的,那时的Borland看来很有前途的,可惜后来一系列决策失误导致现在这个公司几乎消失了,同学们不要再往这个坑里跳了。OWL曾经和MFC是竞争对手,设计思想也差不多,个人感觉OWL的API设计更优雅一点,但是在市场上OWL被MFC彻底击败。Delphi是神作,它在RAD(快速应用开发)领域长时间没有对手,直到BS架构取代CS架构。Delphi的特点就是简单、开发快,单纯就写个基本可用的应用来说,可能至今都没有比他更快的,但是缺点就是丑,基本大多数Delphi应用都是一大堆控件堆积在一起,很不美观,另外由于Pascal语言的限制无法和现有大量的C/C++代码融合。虽然后来有C++ Builder,但是Builder里简单和快的优点也消失了。Borland的C++编译器越做越差,导致后来开源项目都不太愿意兼容这个编译器了。VCL准确地说不是UI库,而是一套组件接口规范,类似COM ActiveX。delphi和C++builder都是基于这个规范构建了基础库。UI库是个很大的话题,够写好几本书来探讨的,我这里就是随便写点自己的感受。单纯讨论每个库的优劣是没有意义的,而是要放到具体的应用场景里来看,每个库都有自己擅长的场景。如果仅在Windows下,追求程序小巧,用WTL,不足的地方自己实现去吧,但是视觉效果就呵呵了。如果可以大一点,还要好看点,那就Qt。如果完全不在乎大小,只要视觉效果华丽,就用WPF,如果把开发工具价格也考虑进来,那么土豪才会选WPF呢。MFC就是个鸡肋了,除非你现有的工程师不会用别的,或者有历史遗留代码要保持兼容。如果要求跨平台,那么就用Qt,wxWidgets和GTK+跟现在的Qt比起来没有什么优势了。如果是iOS Android,那么最好用原生UI库,除非你写游戏。

马来西亚mbi、mfc是骗人的吗?和腾讯、小米、优酷、米聊、美图秀秀……有合作关系吗?

马来西亚mbi、mfc是马来西亚传销组织,传销范围极广,包括马来西亚、中国大部分地区,中国台湾也卷入其中。未有传闻腾讯、小米、优酷、米聊、美图秀秀等与其有合作关系。MBI公司涉嫌传销被各地执法部门查处重庆警方破获MBI传销案2015年7月,重庆巫溪警方历时7个月,跨7个省市、行程上万公里,破获一起在无实际交易情况下,采取缴纳入会费、拉人头、许诺高额红利等形式邀请数百人加入MBI游戏理财公司的网络传销案,抓获犯罪嫌疑人12名。10名主要犯罪嫌疑人涉嫌组织、领导传销罪已被巫溪警方依法刑事拘留,2名犯罪嫌疑人被执行取保候审,相关案件正在进一步深挖细查之中。广西警方破获MBI传销案两名男子利用国外MBI虚拟币理财公司,采取购买虚拟币、拉人头、许诺高额红利等手段,在广西桂林平乐县从事网络传销违法犯罪活动。2015年12月5日,平乐警方抓获犯罪嫌疑人8名,查获涉案金额百万余元。目前,两名主要嫌疑人涉嫌组织领导传销罪,被平乐警方刑事拘留。泰国警方破获MBI传销案2016年1月泰国泰文“鲜得新闻报”报导指出,泰国司法部特别案件调查厅是在南部的宋卡省的马来西亚商投资的MBI集团所属的一家酒店内查获两大皮箱的美元和人民币现钞,经过清点总值达到8300万泰铢(约新台币8290万元),依规定全部没入充公。马来西亚商投资的MBI集团在泰国投资近20亿泰铢,主要是拥有6家酒店和2家渡假村和9栋公寓,以及多个主题乐园等。泰国方面正在清查这个集团所涉及的洗钱相关犯罪案情,并怀疑和两个月前知名马来西亚商人在宋卡省因购买数笔土地导致被杀害的案件有关。台湾警方破获MBI传销案2016年8月媒体报道:近日,台湾台中警方破获一起跨境诈骗吸金案,马来西亚籍嫌疑人宣称只要投资100到5千美元购买MBI公司“游戏代币”,就可获得高达125%的年利息,稳赚不赔。3年来,这个团伙共诈骗吸金超过10亿元新台币,约合2亿人民币。检调人员初步估算,这个集团3年来诈骗吸金超过10亿新台币。至少有上千名投资者上钩,其中不乏退休的老年人。检调人员在台北、桃园、高雄等多地进行同步搜索,查出涉案公司及嫌疑人住处14处,共查扣5家金融机构、10个账户,以及大批现金。嫌犯生活极尽奢华,警方在其中一个嫌犯的豪华别墅内,共搜索出现金2.4亿新台币,以及各种名车、名表。目前警方逮捕到诈骗集团成员达20人。转自“风靡马来传入国内的MBI、MFC传销骗局骗了多少人?_搜狐财经_搜狐网”

mbi,mfc,mface怎么区分,是什么关系

mbi,mfc,mface怎么区分,是什么关系不得不知道的几层关系 mbi,mfc,mface怎么区分,是什么关系 参与M粉丝忠诚消费回馈系统,又是MBI?又是mface?又是Mmall?又是MFC?它们之间到底有啥关系啊? 现在就跟大家简单的讲解一下: 我们的平台一共分4大板块: MBI(国际资产管理公司)+mface(社交平台)+Mmall(国际网上商城)+MFC(理财平台)。 第一板块,MBI是国际资产管理公司,它的旗下包括60多家实体产业。 第二板块,mface是国际社交平台,是东南亚最大的社交网络平台,马化腾在做的事情我们一样在做。QQ,微信,是社交网络平台,我们的mface是国际社交网络平台,有10多种国家语言;QQ,微信只是中国的聊天软件,我们mface是国际性的;我们还与亚洲航空公司合作,整架飞机都打上我们mface的广告。 大家知道飞机是个特殊载体,不是有钱就可以打广告,必须是公益事业才可以,至今只有亚运会、奥运会才在飞机上打过广告。 第三板块,Mmall是国际网上商城,大家知道,现在的80、90后青年都喜欢网上购物;。大家也知道淘宝和阿里巴巴,阿里巴巴上面购买的都是我们国产货,关键的是你的支付宝不能增值,花了一分少一分,但我们Mmall国际商城是全球商品,我们易物点是可以增值的,花了一分涨十分,相当于我们商城的产品都是免费赠送的!会员自己有产品也可以免费上架,可以对接Mmall商城,我们的商城正在打劫马云的商城,互联网都在跨界打劫,不要觉得不可能,就比如说:我们用了十几二十几年的中国移动等电信企业,发信息、发图片都需要钱,微信一出来都免费了。互联网思维是免费思维。 天下有免费的午餐,羊毛出在猪身上牛来买单,直接打劫了中国移动、电信、联通三大营运商。 第四板块,MFC是M粉丝忠诚消费回馈系统,我们平台有易物点(GRC),听到易物点是不是觉得很好笑?比如说现在的基金、股票等都是看不见、摸不着的东西,像空气一样,但是,它确实就在我们的身边,易物点 1、可以升值; 2、可以吃、喝、玩、乐、购物消费; 3、还可以换购大件商品房子与车子; 4、可以取现; 5、可以投资MBI公司所有实体产业,包括手游、飞标、酒店、电影、M7便利店、房地产等; 6、易物点转VISA卡,全球消费、取现; 7、易物点转MCOIN消费、增值…… 易物点将来的用途会越来越多! 目前平台有近70个国家参与,是一个真正的国际大平台和大品牌!赢在2018、2019、2020 想了解更多资讯 关注鑫众赢系统

MBI,MFC虚拟币是不是传销

是不是传销,应当按照其具体的经营运作模式进行判定。传销可以简单的归纳为:1、需要交入门费。2、需要发展下线。需要不断的找合作者,并打着组建团队的幌子以倍增收入的模式诱导别人。3、根据下面人头数量和这些人的经营业绩来决定你有多大的回报。国务院《禁止传销条例》第七条下列行为,属于传销行为:(一)组织者或者经营者通过发展人员,要求被发展人员发展其他人员加入,对发展的人员以其直接或者间接滚动发展的人员数量为依据计算和给付报酬(包括物质奖励和其他经济利益,下同),牟取非法利益的;(二)组织者或者经营者通过发展人员,要求被发展人员交纳费用或者以认购商品等方式变相交纳费用,取得加入或者发展其他人员加入的资格,牟取非法利益的;(三)组织者或者经营者通过发展人员,要求被发展人员发展其他人员加入,形成上下线关系,并以下线的销售业绩为依据计算和给付上线报酬,牟取非法利益的。

MBI,MFC虚拟币是不是传销

如果你不懂,建议还是慎重点吧

马来西亚mbi、mfc是骗人的吗?能挣钱吗?和腾讯、小米、优酷、米聊、美图秀秀……有合作关系吗?

我爸在两年前偷偷投了十来万,现在每年可拿几十万现金回家,我们这边好多这样的情况,我觉得这家公司还行

请问MFC中这个pDC是什么?

你上面的代码中pDC没有定义, 应该是窗体的DCpDC改为GetDC( )试试

mfc中连接access数据库的详细步骤都是什么?

比如在你的工程目录中建一个 dbfvir.mdb //Access数据库,然后你需要做以下操作:1.在StadAfx.h里面添加#include <afxdb.h> //新加入头文件,用于CDatabase类。2.在StadAfx.h最后的#endif上添加#import "msado15.dll" no_namespace rename("EOF","rsEOF")这时,你要把msado15.dll拷到与dbf同级的目录,也就是工程目录里,当然你可以该路径3.在你自己的工程里,比如MyProc是你建的工程,添加代码CMyPorcApp::CMyProcApp(){CoInitialize(NULL); SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)", "DSN=MyImage;DBQ=dbf\vir.mdb;DEFAULTDIR=dbf"); //注册本地数据库数据源m_db.OpenEx("DSN=MyImage;;",CDatabase::noOdbcDialog);//MyImage是数据源名称}4.在前面的函数体之前创建全局变量CDatabase m_db; CRecordset m_rec(&m_db);5.使用数据库{ CString strSQL="select * from virdb"; BSTR bstrSQL=strSQL.AllocSysString(); m_rec.Open(CRecordset::dynaset,strSQL); while(!m_rec.IsEOF()) { // 使用数据库的代码,读出来的数据都是字符串型的 CString MyVirable; m_rec.GetFieldValue("字段名",MyVirable); //将某个字段的当前行的值读到MyVirabl中 // ...... m_rec.MoveNext(); //将记录移到下一行 }}本程序是自动注册数据源的,当然可以手动注册数据源,关于如何注册数据源并不麻烦,叙述起来不太方面,你就参考其他的吧。不过建议不用手动注册数据源,这样你地程序移植性不好.

MFC远程连接access

从理论上来说,共享MDB是可行的(需要对该文件夹有写权限),或者你可以这样试一下:将远程共享文件夹映射为一个本地磁盘,然后再试试(例如Z:\db.mdb)

MFC中如何连接access数据库?

access我没连过 我只连过sql2000 我把我那时候找到的资料发上来给你参考下 看看可以借鉴不MFC 连接SQL SERVER(ODBC方式) 1、建立数据库这一步比较简单,直接打开SQL Server Management Studio,根据自己需要设计数据库中的表,及其之间的依赖关系等等!要想设计一个完美的数据库,就必须了解数据库的基本知识。这里不再具体说了。这里我们假设我们的数据库名字为Test012、配置数据源数据库设计建立完成后,它只是单独的几张表,我们并不能在程序中去访问它,因为程序并不知道数据库在哪里。因此,就要在应用程序跟数据库之间建立连接。配置数据源说通俗了就是为数据库创建一个对外的窗口,应用程序通过这个窗口来访问数据库中的数据。具体配置步骤为: 1) 打开 控制面板--〉管理工具--〉数据源,在用户DSN面板选择 “添加” 2) 在数据源驱动程序中选择 “SQL Server” --〉完成,即打开 “创建到SQL Server 的新数据源” 3) 在“数据源名称”中填入名称,我们填 TestSQL01,然后选择 服务器,在其中选择要连接到的SQL Server服务器。(如果你电脑的SQL Server服务打开的话,就会有自己的主机名。或者选择网络上的某个SQL Server。 4) 点击 下一步 配置认证信息5) 配置完后点击 下一步, 选中 “更改默认的数据库为”复选框,在下拉中选择自己刚才建立的要连接的数据库。 (这一步很重要,一般一个Server上会有多个数据库,如果不更改数据源的默认数据库,你 建立的数据源将连接到默认的数据库,这样就会造成程序中执行SQL语句时“对象名无效”的错误,即找不到你指定的数据表等) 6) 选择完数据库后直接 下一步--〉完成 就完成了数据源的配置。接下来会出现配置数据源的基本信息,可以通过 “测试数据源”来测试数据源是否配置成功。3、 数据库的连接建立完数据库,又配置好了数据源,接下来就可以在程序中通过数据源来访问数据库了。 1) 首先要在程序中引入MFC ODBC数据库的定义文件 #include <afxdb.h> 2) 定义CDataBase数据库对象, CDataBase m_db; 3) 利用CDataBase类的OpenEx函数建立和数据库的连接; m_db.OpenEx(_T("DSN=TestSQL01;"),CDatabase::noOdbcDialog); /*这里的TestSQL01 即为步骤2中建立的数据源,然后根据OpenEx函数格式填入参数,主要是用户名、密码之类,这里没有设置,所以就没有*/ 具体连接还要捕捉OpenEx可能抛出的异常:TRY{ m_db.OpenEx(_T("DSN=TestSQL01;"),CDatabase::noOdbcDialog); rs.m_pDatabase = &m_db;}CATCH(CDBException,ex){ AfxMessageBox(ex->m_strError); AfxMessageBox(ex->m_strStateNativeOrigin);}AND_CATCH(CMemoryException,pEx){ pEx->ReportError(); AfxMessageBox(_T("memory exception"));}AND_CATCH(CException,e){ TCHAR szError[100]; e->GetErrorMessage(szError,100); AfxMessageBox(szError);}END_CATCH4、 数据库操作在完成了上面的步骤后,就可以使用SQL语句对数据库进行操作了。基本的操作有 查询、添加、修改、删除等。这里主要说一下查询,其他操作都与添加步骤类似。 1)查询 查询的基本步骤可以看下面的这段代码: CString sql = _T("SELECT Password FROM UserInfo WHERE (UserID = 123“) //要执行的SQL语句 CString psd; //存放查询结果 TRY { rs.Open(AFX_DB_USE_DEFAULT_TYPE,sql); //打开查询记录 rs.GetFieldValue(_T("Password"),psd); //得到数据 } CATCH(CDBException,ex) { AfxMessageBox(ex->m_strError); AfxMessageBox(ex->m_strStateNativeOrigin); } AND_CATCH(CMemoryException,pEx){ pEx->ReportError(); AfxMessageBox(_T("memory exception")); } END_CATCH 2)插入 相对于查询,插入、删除、更改操作就简单得多了。 CString sql = _T("USE Test01 INSERT UserInfo(UserID,UserName) VALUES(" 123, "Bob"); try ...{ m_db.ExecuteSQL(sql); } ..............

vc中listbox控件为什么不能横滚动 vc/mfc / 基础类

参考:VC ListBox列表框实现自动水平滚动功能

mfc toolbar 怎么做一个工具栏图标可以稍晚大一些,而且可以随意托动

浮动窗口需要用FIoteBar,图标关联一个大图标的ImageList

怎样将MFC中图标插入到toolbar?

CToolBarCtrl toolbar;CImageList m_ImagList;m_ImageList.Add(AfxGetAPP()->LoadIcon(IDI_ICON));toolbar.SetImageList(&m_Imagelist);

在mfc中怎样在工具条中添加静态文本

工具条中添加静态文本???不是有一个static Text(显示图标是Aa)么?这就是静态文本啊-

MFC CMFCToolBar如何转成toolbarCtrl?

  你可以将CToolBar创建在CReBar上面,你要多行显示,就创建多个CToolBar与CReBar上。 CRebar类似于toolbar,但其比toolbar更好用,可以防止按钮,下拉框和toolbar.

MFC,鼠标移动到对话框某一区域(不是某一控件)上的时候,出现提示,怎么用tooltip实现提示信息?

tooltip有好多addtip的方式吧?

MFC 对右键菜单添加 tooltip 怎么设计?

您好,是这样的: 添加右键菜单:CMenu menu1; menu1.CreatePopupMenu(); //动态创建弹出式菜单对象 menu1.AppendMenu(MF_STRING,ID_TEST1," 菜单项1"); menu1.AppendMenu(MF_STRING,ID_TEST2," 菜单项2");menu1.InsertMenu(2,MF_BYPOSITION|MF_POPUP|MF_STRING, (UINT) menuMain.m_hMenu,"子菜单"); //添加子菜单 CPoint pt; GetCursorPos(&pt); menu1.TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this); menu1.DestroyMenu();若菜单ID值是连续的,最好用ON_COMMAND_RANGE来映射消息处理函数,可以在一个函数中处理一个范围内的所有消息。当用户按下某个菜单项,会发出一个WM_COMMAND消息,而菜单项的ID号,就包含在参数wParam的低位中. 。

如何给CMFCButton添加ToolTip消息提示

1:从工具箱里拖一个ToolTip控件到窗体上,成为ToolTip1 2:选择你要添加提示的Button1,此时Button1的属性中,最下面就多了1个ToolTip1上的ToolTip属性了,就在那里编辑文字 3:ToolTip1可以编辑tip提示的各个关键属性,一个ToolTip1能满足控制...

mfc实现只要鼠标进入对话框中的一个区域就出现tooltip的提示信息,当鼠标离开时提示信息马上消失?急..

假设在CDlg**中有一控件IDC_EDIT_A,想要鼠标指向该控件时提示,步骤如下:1、CDlg**头文件中声明成员变量CToolTipCtrl m_tooltip;2、CDlg***::OnInitDialog() 中创建并设置参数m_tooltip.Create(this);//CToolTipCtrl与控件关联m_tooltip.AddTool(GetDlgItem(IDC_EDIT_A), TTS_ALWAYSTIP);//当鼠标指向IDC_EDIT_A控件显示提示//若如是句柄可以用FromHandle(hwnd)替换 GetDlgItem(IDC_EDIT_A)//文字颜色m_tooltip.SetTipTextColor(RGB(0,0,255));//鼠标指向多久后显示提示,毫秒m_tooltip.SetDelayTime(TTDT_INITIAL, 10); //鼠标保持指向,提示显示多久,毫秒m_tooltip.SetDelayTime(TTDT_AUTOPOP, 30000); //设定显示宽度,超长内容自动换行m_tooltip.SetMaxTipWidth(200);3、重写PreTranslateMessage,增加以下内容:if(m_tooltip.m_hWnd!=NULL) { m_tooltip.RelayEvent(pMsg);}4、在需要的地方动态更新tip内容m_tooltip.UpdateTipText(str, FromHandle(hwnd));

MFC中怎样设置窗体的RBG参数,或者其他较为简单的修改窗体颜色的办法,请给具体做法,我菜鸟。急用!!谢

重载WM_CTLCOLOR消息,添加消息映射你应该会吧在生成的函数中增加代码,HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){ HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); switch(nCtlColor) { case CTLCOLOR_DLG: { COLORREF lColorref = RGB(255,255,0); HBRUSH lHbrush = CreateSolidBrush(lColorref); return lHbrush; } break; default: break; } // TODO: 在此更改 DC 的任何特性 // TODO: 如果默认的不是所需画笔,则返回另一个画笔 return hbr;}

VS2008中 怎么给类CMFCMenuBar菜单项关联图标

可以关闭工程试试,并删除*.ncb文件,重新编译

我在用VS2010做MFC单文档开发时,怎么将m_wndMenuBar中对应的菜单删掉,然后再重新加载进来啊。

MFC标准单文档程序的菜单,不需要“重新加载”,你只需要获取框架窗口(因为菜单是从属于框架的)指针,或者在CMainFrame类中直接://删除子菜单:GetMenu()->DeleteMenu(1,MF_BYPOSITION);//删除菜单项:GetMenu()->GetSubMenu(0)->DeleteMenu(2,MF_BYPOSITION);就可以实现删除了。

如何让MFC窗口启动时最大化

只需将App类InitInstance()函数中m_pMainWnd->ShowWindow()的参数改为SW_SHOWMAXIMIZED即可。微软MSDN网页中有相关介绍:MFC Library Reference CWnd::ShowWindowSets the visibility state of the window.BOOL ShowWindow(int nCmdShow );ParametersnCmdShowSpecifies how the CWnd is to be shown. It must be one of the following values:SW_HIDE Hides this window and passes activation to another window.SW_MINIMIZE Minimizes the window and activates the top-level window in the system"s list.SW_RESTORE Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position.SW_SHOW Activates the window and displays it in its current size and position.SW_SHOWMAXIMIZED Activates the window and displays it as a maximized window.SW_SHOWMINIMIZED Activates the window and displays it as an icon.SW_SHOWMINNOACTIVE Displays the window as an icon. The window that is currently active remains active.SW_SHOWNA Displays the window in its current state. The window that is currently active remains active.SW_SHOWNOACTIVATE Displays the window in its most recent size and position. The window that is currently active remains active.SW_SHOWNORMAL Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position.Return ValueNonzero if the window was previously visible; 0 if the CWnd was previously hidden.

C++ 显示图片 不基于MFC

void GiveBmp(int x,int y,char name[],int hi,int we){ HDC mdc; HBITMAP bg; mdc=CreateCompatibleDC(hdc); bg=(HBITMAP)LoadImage(NULL,TEXT(name),IMAGE_BITMAP,we,hi,LR_LOADFROMFILE); HGDIOBJ xx=SelectObject(mdc,bg); BitBlt(hdc,x,y,we,hi,mdc,0,0,SRCCOPY); DeleteObject(xx); DeleteObject(bg); DeleteObject(mdc);}就这样,基于Windows API

如何在mfc中配置opengl

1:新建一个MFC的工程,单文档的工程。2:工程建好之后,可以先编译运行一下。下面就是要把View的窗口初始化为OpenGL的编程环境。当然以下所有的操作都是在View类中进行的。先在Project->Settings->Link中,加上opengl32.libglu32.lib glut.lib glaux.lib,然后在View.h的类定义中加上如下引用。#include <glgl.h>#include <glglu.h> #include <glglaux.h>3:首先要让窗口支持OpenGL,那就必须要对PIXELFORMATDESCRIPTOR这个结构有所了解,先在View类中新建一个函数SetupPixFormat(CDC*pDC),类型:看下面的函数就知道为BOOL,(方法:在classview中,找到**view类,鼠标右击,添加函数)公有私有无所谓,如下:BOOL CTestGLInitialView::SetupPixFormat(CDC *pDC) //我建立的工程名叫TestGLInitial{static PIXELFORMATDESCRIPTOR pfd = //定义像素格式{ sizeof(PIXELFORMATDESCRIPTOR), // 上述格式描述符的大小 1, // 版本号 PFD_DRAW_TO_WINDOW | // 格式支持窗口 PFD_SUPPORT_OPENGL | // 格式必须支持OpenGL PFD_DOUBLEBUFFER, // 必须支持双缓冲 PFD_TYPE_RGBA, // 申请 RGBA 格式 24, // 24位色彩深度,即1.67千万的真彩色 0, 0, 0, 0, 0, 0, // 忽略的色彩位 0, // 无Alpha缓存 0, // 忽略Shift Bit 0, // 无累加缓存 0, 0, 0, 0, // 忽略聚集位 32, // 32位 Z-缓存 (深度缓存) 0, // 无蒙板缓存 0, // 无辅助缓存 PFD_MAIN_PLANE, // 主绘图层 0, // Reserved 0, 0, 0 // 忽略层遮罩};int nIndex = ChoosePixelFormat(pDC->GetSafeHdc(), &pfd); //选择刚刚定义的像素格式if( nIndex == 0 ) return FALSE;return SetPixelFormat(pDC->GetSafeHdc(), nIndex, &pfd); //设置像素格式}这个函数的主要目的就是设置窗口的像素格式,使之支持OpenGL,明白这点就行了。在创建窗口的时候,调用这个函数。5:刚刚那个函数是用来在创建窗口是调用的,在创建窗口时,还需要对OpenGL的环境做一些初始化,再定义一个函数InitialGL(),(方法:在classview中,找到**view类,鼠标右击,添加函数)公有私有也无所谓,反正是自己调用的,如下:BOOL CTestGLInitialView::InitialGL(){glShadeModel(GL_SMOOTH); // 启用阴影平滑glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // 黑色背景glClearDepth(1.0f); // 设置深度缓存glEnable(GL_DEPTH_TEST); // 启用深度测试glDepthFunc(GL_LEQUAL); // 所作深度测试的类型glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 告诉系统对透视进行修正return TRUE; // 初始化 OK}这里的代码我都是抄的NeHe教程上面的代码。6:现在可以捕获WM_CREATE消息了(方法:view-->classvizard -->messagesmaps:classname选**view,找到WM_CREATE,添加函数,编辑代码)。但是,还要先定义一个CClientDC*的成员,(方法:在classview中,找到**view类,鼠标右击,添加函数成员变量。类型:CClientDC*,名字:m_pDC)这个成员指向View窗口自己,是用来传递给SetupPixFormat(CDC*pDC)函数的,没别的意思。现在,来捕获WM_CREATE消息(),写上如下代码:int CTestGLInitialView::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CView::OnCreate(lpCreateStruct) == -1) return -1;// TODO: Add your specialized creation code herem_pDC = new CClientDC(this);SetupPixFormat(m_pDC);HGLRC hrc = wglCreateContext(m_pDC->GetSafeHdc());wglMakeCurrent(m_pDC->GetSafeHdc(), hrc);InitialGL();return 0;}当然,当窗口关闭的时候,还应该要释放一些资源。捕获WM_DESTROY消息,(方法:view-->classvizard-->messages maps:classname 选**view,找到WM_DESTROY,添加函数,编辑代码)写下如下代码:void CTestGLInitialView::OnDestroy(){CView::OnDestroy();// TODO: Add your message handler code hereHGLRC hrc = wglGetCurrentContext();wglMakeCurrent(NULL, 0);wglDeleteContext(hrc);delete m_pDC;}现在可以编译一下了,没有错误。7:现在,OpenGL的环境已经初始化差不多了。可以开始做图了,先定义一个作图的函数DrawScene(),写上如下的代码:BOOL CTestGLInitialView::DrawScene(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存glLoadIdentity(); // 重置当前的模型观察矩阵SwapBuffers(m_pDC->GetSafeHdc()); // 交换缓冲区return TRUE;}然后,要在OnDraw中,调用这个函数:void CTestGLInitialView::OnDraw(CDC* pDC){CTestGLInitialDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereDrawScene();}8:运行一下,黑色的背景出来了。9:这时,可以修改DrawScene()这个作图函数,作图。画出NeHe第3课的那个三角形和正方形来。写代码如下:BOOL CTestGLInitialView::DrawScene(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存glLoadIdentity(); // 重置当前的模型观察矩阵glTranslatef(-1.5f,0.0f,-6.0f); // 左移 1.5 单位,并移入屏幕 6.0glBegin(GL_TRIANGLES); // 绘制三角形glColor3f(1.0f, 0.0f, 0.0f);glVertex3f( 0.0f, 1.0f, 0.0f); // 上顶点glColor3f(0.0f, 1.0f, 0.0f);glVertex3f(-1.0f,-1.0f, 0.0f); // 左下glColor3f(0.0f, 0.0f, 1.0f);glVertex3f( 1.0f,-1.0f, 0.0f); // 右下glEnd(); // 三角形绘制结束glTranslatef(3.0f,0.0f,0.0f); // 右移3单位glColor3f(0.0f, 0.0f, 1.0f);glBegin(GL_QUADS); // 绘制正方形glVertex3f(-1.0f, 1.0f, 0.0f); // 左上glVertex3f( 1.0f, 1.0f, 0.0f); // 右上glVertex3f( 1.0f,-1.0f, 0.0f); // 左下glVertex3f(-1.0f,-1.0f, 0.0f); // 右下 glEnd();SwapBuffers(m_pDC->GetSafeHdc()); // 交换缓冲区return TRUE;}运行一下,发现图形没有出现,这个怎么回事呢。原来是因为还没有定义投影方式和视口。即用正交投影还是透视投影。定义投影,还要捕获WM_SIZE消息。写如下代码:void CTestGLInitialView::OnSize(UINT nType, int cx, int cy){CView::OnSize(nType, cx, cy);// TODO: Add your message handler code hereif (0 == cy) // 防止被零除{ cy = 1; // 将Height设为1}glViewport(0, 0, cx, cy); // 重置当前的视口glMatrixMode(GL_PROJECTION); // 选择投影矩阵glLoadIdentity(); // 重置投影矩阵// 设置视口的大小gluPerspective(45.0f,(GLfloat)cx/(GLfloat)cy,0.1f,100.0f);glMatrixMode(GL_MODELVIEW); // 选择模型观察矩阵glLoadIdentity(); // 重置模型观察矩阵}再运行一下,图形已经出来了。以后,就可以在DrawScene()写任何画图的代码了,当窗口重绘的时候,都可以自动适应。如果要做一段可以运动的3D图画,可以再捕获WM_TIMER消息,通过在OnCreate的时候定义一个时钟,再配合一些变量,就可以做简单的动画了

我使用MFC自动生成类的时候(基类CCmdTarget),没有自动生成.ODL文件,如何设置才能生成ODL文件呢

是MSDN里去搜索,一定有答案的。

MFC开发进程外COM,如何定义事件接口

利用利用MFC AppWizard(exe)生成Windows应用程这个向导来完成,关键点是在第二步的时候,将Automation打上勾(默认不打勾),这样得到的工程生成出来的exe文件就具备进程外组件的框架了。以对话框程序为例,SDI和MDI的程序大同小异。首先看一看通过这样的方式得到的工程,除了具备普通Dialog程序的几个文件之外,还多了以下几个文件,分别如下: DlgProxy.cpp 接口实现文件,类似ActiveXControl向导生成的[ProjectName]Ctrl.cpp DlgProxy.h 接口实现的定义文件,类似ActiveXControl向导生成的[ProjectName]Ctrl.h [ProjectName].odl 接口定义文件,ActiveXControl向导也有,作用一样的组件还没有事件功能,也就是说只能客户端调用组件,而组件不能主动调用客户端。用过VB的人知道,在VB中定义一个组件如果要支持事件的话,必须加上WithEvents关键字。而调用上面得到的组件,不加WithEvents还好,加上了后反而还不行,原因是什么呢?就是组件还不支持事件触发。要使组件支持事件触发要怎么做呢?一般来说需要做两大事情:第一:定义出接口;第二:实现连接点。我这里说的是一般,因为事件的实现还可以用用回调函数实现,或者还有其它的自定义方式,COM是一个规范,很多时候它只提供了一些实现的思路,并没有严格规定一定要这么地。打个比方说吧,事件的触发,如果客户端用VC开发,那么可以很灵活,只要组件和客户端能够相互通信的任何方式都可以考虑;但是如果用VB开发客户端,由于VB已经要求你用连接点机制实现了,组件端不用连接点来实现VB就不认了。VBScript和JavaScript也是这样要求的,所以这个一般的范围还是非常广的,很少有不一般的情况。下面我就以这种一般情形做论述。 首先要定义出接口。这里说出接口是相对于入接口而言的,管理方法的接口叫入接口,因为是提供给别人调的;管理事件的接口叫出接口,因为是调别人的。入接口和出接口你硬要定义在一起,也没有什么不可以,只是习惯上都这么做,且命名上通常是入接口叫IXXX,相应的出接口叫IXXXEvents。入接口和出接口本质上没有什么区别,都是继承IDispatch接口(这也是一般做法,COM没有严格规定的),但是不同的是入接口一般需要我们来实现,因为入接口通常是提供服务的接口,而出接口不用实现,只用定义,因为出接口是客户端实现的,通常是服务端来通知客户端用的,注意:事件的触发代码还是得服务端编写的,不然哪来事件呢。我们此处讨论的入接口,即是向导默认生成的那个接口,已经有了,我们现在需要加上出接口的定义。在哪里加呢?在ClassView视图上鼠标双击接口名,即打开了一个[ProjectName].odl文件,接口的定义就是在这里定义的,可以看到刚才我们加的方法就在里面呆着呢。这个odl文件的结构不是太复杂,基本上看一看就知道怎么增加一个接口了,不知道的话也可以参考一下ocx的工程。需要注意的是接口的GUID(也称IID)不要重复。现在的组件已经可以支持事件触发了,你可以在VB声明中加上WithEvents关键字,这回不会出错了。加上触发代码,就可以用了

用MFC类库设计的含有消息映射表的Windows应用程序无法编译成功

你用的是MFC类库中标准的消息ON_WM_LBUTTONDOWN(),所以你的处理函数也得按标准的来,就是说父类给你定义好了这个函数的原型,你要重写这个处理函数!所以参数等等的要一致! 你换成ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown);试试

MFC 透明贴图背景变成白色

你这是qq的关闭按钮,那是png,你要用gdi+来绘制。

为什么Wolfram Mathematica注册机安装时显示mfc100u.dll文件丢失,无法安装。这是为什么,如何解决。

刚才用cn.dll-files点com/mfc100u.dll点html的修复工具修好了。。很不错,不需要“自己找dll,放system32,运行regsvr32 mfc100u.dll”这套操作了。

MFC可控硅模块的应用电路有哪些?

智能硬件操作

MFC可控硅模块的应用电路有哪些?

用MFC可控硅模块控制交流的应用很广泛,单结晶体管交流调压电路就是一种典型的交流调压电路。调压原理是:通过改变单结晶体管发出触发脉冲的导通角度来控制MFC可控硅的导通时间,来实现交流调压。此电路中,单结晶体管是接在交流电路中的,通过半波整流和降压获取工作电源。 通常在调压电路中,触发电路由控制电路产生,控制电路工作在直流电路中。其实,不必深究是否是直流控制交流,只要知道MFC可控硅模块的控制原理就行了,其最基本的原理就是用触发脉冲控制可控硅模块的导通,用较小的触发电流控制较大电流的负载工作。

如何在MFC下对Ribbon界面进行重写

首先你要了解RibbonBar的结构;RibbonBar分了好几层 1、MainButton 2、普通Category: 最下面是一个Panel,Panel上面是各种元素,可以是CRibbonbarButton,CRibbonBarEdit等控件;然后重绘你需要的部分: CMFCRibbonBar 肯定需要重绘,就是继承下原先的类,然后跟普通控件重绘差不多; 左上角的大按钮,所有的Category,还有其他子控件可以选择性重绘,需要用到的再重绘。

怎么编辑基于mfcd的ribbon界面和按钮的大小

Ribbon是类似于office2007样式的界面,它替代了传统的MFC程序里的菜单和工具栏MFC默认生成的Ribbon功能少,需要我们自己添加一些控件和图片等元素使界面好看看下面的一个界面,是VC2010示例里的看到它与默认Ribbon样式的区别:工具自己设计,MFC提供的Ribbon控件基本都用上了;图片(位图)也是原资源没有的那到底怎么实现呢?可以注意到的是:类别由面板组成,面板由按钮或文本编辑框或进度条等控件组成按钮都是有图片和文字组成,按钮通过按钮集合可以产生类似于下拉菜单的作用观察这些按钮,可以发现有两类:小图标的按钮和大图标的按钮小图标:像素16×16,32位

如何在MFC下对Ribbon界面进行重写

* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示! 实际上,Ribbon界面(Office 2007风格的界面)的开发早在2008年就随着Visual C++ Feature Pack被引入到Visual Studio 2008中。在即将到来的Visual Studio 2010中,Ribbon界面的开发更是得到了原生的支持,使得Ribbon界面的开发更加简便高效。  首先,我们启动Visual Studio 2010,创建一个基于MFC的应用程序,项目模板我们选择“MFC Application” 在接下来的“MFC应用程序向导”中,我们就可以对项目的可视化风格进行选择和配置。Visual Studio 2010支持MFC风格、标准的Windows风格,Visual Studio 2005风格和Office 2007风格。而这里的Office 2007风格,就是我们要创建的Ribbon界面。 在接下来的向导页中,我们可以选择命令栏(工具栏。菜单栏)的样式,这里我们当然选择“Use a ribbon”了。当然,为了跟旧有的系统保持兼容,Visual Studio 2010也支持传统的命令式界面,如果你的用户比较保守,想继续使用传统的菜单式界面,我们可以选择“Use a menu bar and toolbar” 为了支持丰富的Office 2007界面风格,MFC默认情况下为MFC文档应用程序添加了类似Outlook风格的导航面板(Navigation pane)和标题条(Caption bar)。这两者并不是我们关注的重点,为了更好的展示Ribbon界面,我们这里就去掉这两个多余的面板。 到这里,针对新项目的设置就完成了,点击“Finish”按钮关闭应用程序向导,Visual Studio 2010就会按照我们的设置创建相应的MFC应用程序解决方案。编译运行这个解决方案,我们就得到了第一个具有Ribbon界面的应用程序。 在微软网站上,有六个示例代码:Windows Ribbon: Samples 网址是http://www.m*******.com/en-us/download/details.aspx?id=9620

质量流量计(MFC)原理及如何来选择使用

质量流量计选择要注意流量范围,流体温度,流体特性,安装时要注意安装位置和安装方式,安装位置就是流量计前后要安装阀门,方便以后的零点调整,远离震动和电磁干扰的位置,注意测量不同的介质安装方式,测量介质是不是含有结晶体,或气泡,流量计前后要加固定支架,流量计前后安装绕性接头。

如何在MFC中添加音乐

MFC 中设置背景音乐问题#include <mmsystem.h> 必须包含这文件#pragma comment( lib, "Winmm.lib" ) 必须包含这文件一定要进行 PlaySound函数的声明为: BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound); 第一种方法是直接播出声音文件,相应的代码为: PlaySound("c:\win95\media\The Microsoft Sound.wav", NULL, SND_FILENAME | SND_ASYNC); 注意参数中的路径使用两个连续的反斜杠转义代表一个反斜杠。第二种方法是把声音文件加入到资源中,记住一定是wav格式的声音,然后从资源中播放声音。Visual C++支持WAVE型资源,用户在资源视图中单击鼠标右键并选择Import命令,然后在文件选择对话框中选择The Microsoft Sound.wav文件,则该文件就会被加入到WAVE资源中。假定声音资源的ID为IDR_STARTWIN,则下面的调用同样会输出启动声音: PlaySound((LPCTSTR)IDR_STARTWIN, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC); 第三种方法是用PlaySound播放系统声音,Windows启动的声音是由SystemStart定义的系统声音,因此可以用下面的方法播放启动声音: PlaySound("SystemStart",NULL,SND_ALIAS|SND_ASYNC); 函数sndPlaySound的功能与PlaySound类似,但少了一个参数。函数的声明为: BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound); 除了不能指定资源名字外,参数lpszSound与PlaySound的是一样的。参数fuSound是如何播放声音的标志,可以是SND_ASYNC、SND_LOOP、SND_MEMORY、SND_NODEFAULT、SND_NOSTOP和SND_SYNC的组合,这些标志的含义与PlaySound的一样。 第四种方法:sndPlaySound不能直接播放声音资源。要用该函数播放WAVE文件,可按下面的方式调用: sndPlaySound(“MYSOUND.WAV”,SND_ASYNC);自己把资源添在Debug文件夹里。如下:void CLotteryDlg::OnPlaySound() { srand((unsigned)time(NULL));int k;k=rand()%4;switch(k){case 0: {PlaySound((LPCTSTR)IDR_WAVE, AfxGetInstanceHandle(),SND_RESOURCE | SND_ASYNC); break; //天堂之泪}case 1: {PlaySound((LPCTSTR)IDR_WAVE1, AfxGetInstanceHandle(),SND_RESOURCE | SND_ASYNC); break; //亡灵序曲}case 2: {

VC(MFC中)用sndPlaySound()播送音乐只有咚咚声,为什么?

你的问题可以这样的解决:下面的程序编译并且通过!首先你要在工程中加入多媒体组件。选择 Project|Add to Project|Compents and Controls 菜单项,在弹出的 Compents and Control Gallery 对话框中选择 Visual C++Compents 文件夹,然后选择 Windows Multimedia library 选项,将其插入工程中。 然后就有:void CSndplaysoundDlg::OnButton1() {sndPlaySound("c:\1.wav",SND_ASYNC);}这样就可以解决你的问题,如果你还是只是听到咚咚的声音,那么你就可以检查你的声音文件是不是损坏了。

松下电容FLFMFCFJFK哪个好呢?

还是我来告诉你吧!FC是105度的标准品,FK的内阻比FC要低10%-30%,FM比FC内阻要低40%-70%

c++(易语言和MFC怎么结合)

易语言(OGRE),有没有听过OGRE嵌入到MFC?网上有很多例子,就是把OGRE的头文件库文件以及示范代码,通过设置MFC配置引用到MFC!从而实现OGRE和MFC的结合

【MFC中 串口通信 怎么检测是否连接成功】

你的代码只是打开串口,只要该串口可用,就可以成功打开,就算该串口不链接任何设备.

MFC 用MoveTo LineTo画图 如何放大缩小 求高手指导

你可以自己增添放大缩小的系数(my_scale).座标系,原点在 x0,y0画x[i], y[i] 点 时, 添入 座标变换: xv = x0 + (x[i] - x0) * my_scale; yv = y0 + (y[i] - x0) * my_scale; 画 xv,yv 就可以了。另一种办法 改变 Viewport 的设置。 Viewport 的视野大了,图就小了,视野小了,图就大了。

MFC自定义的类 怎么响应command消息啊。查了好久说 ,不能响应,能弹出来,就是不能响应点击事件

你自定义的类是集成于哪个类的?每个类都不同的事件响应。

MFC美化包的用法

CStringCString没有基类。一个CString对象由可变长度的一队字符组成。CString使用类似于Basic的语法提供函数和操作符。连接和比较操作符以及简化的内存管理使CString对象比普通字符串数组容易使用。CString是基于TCHAR数据类型的对象。如果在你的程序中定义了符号_UNICODE,则TCHAR被定义为类型wchar_t,即16位字符类型;否则,TCHAR被定义为char,即8位字符类型。在UNICODE方式下,CString对象由16位字符组成。非UNICODE方式下,CString对象由8位字符组成。当不使用_UNICODE时,CString是多字节字符集(MBCS,也被认为是双字节字符集,DBCS)。注意,对于MBCS字符串,CString仍然基于8位字符来计算,返回,以及处理字符串,并且你的应用程序必须自己解释MBCS的开始和结束字节。CString对象还具有下列特征: · CString可作为连接操作的结果而增大。 · CString对象遵循“值语义”。应将CString看作是一个真实的字符串而不是指向字符串的指针。 · 你可以使用CString对象任意替换const char*和LPCTSTR函数参数。 · 转换操作符使得直接访问该字符串的字符就像访问一个只读字符(C-风格的字符)数组一样。 提示:如果可能的话,应在框架中而不是堆中分配这个CString对象。这可以节省内存并简化参数的传递。CString允许两个具有相同值的字符串共享相同的缓冲空间,这有助于你节省内存空间。但是,如果你初始直接改变该缓冲的内容(不使用MFC),则有可能在无意中改变了两个字符串。CString提供了两个成员函数CString::LockBuffer和CString::UnlockBuffer来帮助你保护你的数据。当你调用LockBuffer时,你就创建了一个字符串的一个拷贝,然后将引用计数设置为-1,这就“加锁”了该缓冲区。当缓冲区被加锁时,就没有其它的字符串可以引用该字符串中的数据,被加锁的字符串也不能引用其它字符串的数据。通过加锁该缓冲区内的字符串,就可以保证该字符串对数据的持续独占。当你使用完数据后,调用UnlockBuffer来将引用计数恢复为1。CString类成员构造 CString 以各种方法构造一个CString对象 字符串数组 GetLength 返回CString对象中的字符数。对多字节字符,按8位字符计算;即在一个多字节字符中一个开始和结束字节算作两个字符 IsEmpty 测试一个CString对象中是否不含有字符 Empty 强制一个字符串的长度为0 GetAt 返回在给定位置的字符 operator [] 返回在给定位置的字符--它是代替GetAt的操作符 SetAt 设置给定位置上的字符 operator LPCTSTR 像访问一个C风格的字符串一样,直接访问保存在一个CString对象中的字符 分配/串联 operator = 给CString对象赋一个新值 operator + 连接两个字符串并返回一个新字符串 operator += 把一个新字符串连接到一个已经存在的字符串的末端 比较 operator 比较操作符 比较操作符(大小写敏感) Compare 比较两个字符串(大小写敏感) CompareNoCase 比较两个字符串(不区分大小写) Collate 比较两个字符串(大小写敏感,使用现场特别信息) CollateNoCase 比较两个字符串(不区分大小写,使用现场特别信息) 提取 Mid 提取一个字符串的中间一部分(类似于BASIC的MID$函数) Left 提取一个字符串的左边一部分(类似于BASIC的LEFT$函数) Right 提取一个字符串的右边一部分(类似于BASIC的RIGHT$函数) SpanIncluding 提取一个字符串,该子字符串中仅含有某一字符集合中的字符。 SpanExcluding 提取一个字符串,该子字符串中不含有某一字符集合中的字符。 其他转换 MakeUpper 将字符串中的所有字符转换为大写字符 MakeLower 将字符串中的所有字符转换为小写字符 MakeReverse 将字符串中的字符以倒序排列 Replace 用其它字符替换指定的字符 Remove 从一个字符串中移走指定的字符 Insert 在字符串中的给定索引处插入一个字符或一个子字符串 Delete 从一个字符串中删除一个或多个字符 Format 像sprintf函数一样格式化该字符串 FormatV 像vprintf函数一样格式化该字符串 TrimLeft 将字符串中前面的空格整理出字符串 TrimRight 将字符串中结尾的空格整理出字符串 FormatMessage 格式化一个消息字符串 搜索 Find 在一个较大的字符串中查找字符或子字符串 ReverseFind 在一个较大的字符串中从末端开始查找某个字符 FindOneOf 查找与某个字符集合中的字符相匹配的第一个字符 归档/存储 operator << 把一个CString对象插入一个存档或转储的环境中 operator >> 从一个存档中提取一个CString对象 缓冲区访问 GetBuffer 返回一个指向CString对象的指针 GetBufferSetLength 返回一个指向CString对象的指针,字符串被截断为指定的长度 ReleaseBuffer 释放对GetBuffer所返回的缓冲区的控制权 FreeExtra 通过释放原先为此字符串分配的额外内存来删除此字符串对象的额外开销 LockBuffer 使引用计数无效并保护缓冲区内的数据 UnlockBuffer 使引用计数有效并释放缓冲区中的数据 Windows专用 AllocSysString 由CString数据分配一个BSTR SetSysString 使用CString对象中的数据来设置一个已存在的BSTR LoadString 从一个Windows资源中加载一个已经存在的CString对象 AnsiToOem 实现由ANSI字符集到OEM字符集的对应转换 OemToAnsi 实现由OEM字符集到ANSI字符集的对应转换 其实最详细的资料是MSDN

100分寻求MFC高手,如何通过MFC操作Excel添加一个工作表

这是我的一个操作过程,可以参考看看(如有更好,也请贴出啊):void CTestExcelDlg::OnButton2() { // TODO: Add your control notification handler code here _Application ExcelApp; Workbooks books; _Workbook book; Worksheets sheets; _Worksheet sheet; Range range; LPDISPATCH lpDisp = NULL; //创建Excel 服务器(启动Excel) if(!ExcelApp.CreateDispatch(_T("Excel.Application"),NULL)) { AfxMessageBox(_T("启动Excel服务器失败!")); return; } ExcelApp.SetVisible(false); ExcelApp.SetUserControl(FALSE); /*得到工作簿容器*/ books.AttachDispatch(ExcelApp.GetWorkbooks()); /*打开一个工作簿,如不存在,则新增一个工作簿*/ CString strBookPath =_T("f:\tmpl.xls"); try { /*打开一个工作簿*/ lpDisp = books.Open(strBookPath, vtMissing, vtMissing,vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,vtMissing, vtMissing); book.AttachDispatch(lpDisp); } catch(...) { /*增加一个新的工作簿*/ lpDisp = books.Add(vtMissing); book.AttachDispatch(lpDisp); }/*得到工作簿中的Sheet的容器*/ sheets.AttachDispatch(book.GetSheets()); /*打开一个Sheet,如不存在,就新增一个Sheet*/ CString strSheetName =_T("Sheet1"); try { /*打开一个已有的Sheet*/ lpDisp =sheets.GetItem(_variant_t(strSheetName)); sheet.AttachDispatch(lpDisp); } catch(...) { /*创建一个新的Sheet*/ lpDisp = sheets.Add(vtMissing, vtMissing, _variant_t((long)1), vtMissing); sheet.AttachDispatch(lpDisp); sheet.SetName(strSheetName); } /*向Sheet中写入多个单元格,规模为4*30 */ lpDisp = sheet.GetRange(_variant_t("C6"),_variant_t("F35")); range.AttachDispatch(lpDisp); VARTYPE vt = VT_R4; /*数组元素的类型,float*/ SAFEARRAYBOUND sabWrite[2]; /*用于定义数组的维数和下标的起始值*/ sabWrite[0].cElements = 30; sabWrite[0].lLbound = 0; sabWrite[1].cElements = 4; sabWrite[1].lLbound = 0; COleSafeArray olesaWrite; olesaWrite.Create(vt, sizeof(sabWrite)/sizeof(SAFEARRAYBOUND), sabWrite); /*通过指向数组的指针来对二维数组的元素进行间接赋值*/ float (*pArray)[2]= NULL; olesaWrite.AccessData((void **)&pArray); memset(pArray, 0, sabWrite[0].cElements * sabWrite[1].cElements* sizeof(float)); /*释放指向数组的指针*/ olesaWrite.UnaccessData(); pArray = NULL; /*对二维数组的元素进行逐个赋值*/ long index[2]= {0, 0}; long lFirstLBound = 0; long lFirstUBound = 0; long lSecondLBound = 0; long lSecondUBound = 0; olesaWrite.GetLBound(1, &lFirstLBound); olesaWrite.GetUBound(1, &lFirstUBound); olesaWrite.GetLBound(2, &lSecondLBound); olesaWrite.GetUBound(2, &lSecondUBound); long i = 0; for (i = lFirstLBound;i <= lFirstUBound; i++) { index[0] = i; for (long j =lSecondLBound; j <= lSecondUBound; j++) { index[1] = j; float lElement = (float)(i * sabWrite[1].cElements + j); olesaWrite.PutElement(index, &lElement); } } /*把ColesaWritefeArray变量转换为VARIANT,并写入到Excel表格中*/ VARIANT varWrite = (VARIANT)olesaWrite; range.SetValue2(varWrite); range.SetNumberFormatLocal(COleVariant("0.00")); /*根据文件的后缀名选择保存文件的格式*/ //CString strSaveAsName = _T("C:\ew.xls"); //CString strSuffix = strSaveAsName.Mid(strSaveAsName.ReverseFind(_T("."))); //XlFileFormat NewFileFormat = xlOpenXMLWorkbook; ////Excel::XlFileFormat NewFileFormat = xlWorkbookNormal; //if (0 ==strSuffix.CompareNoCase(_T(".xls"))) //{ // NewFileFormat= xlExcel8; //} //book.SaveAs(_variant_t(strSaveAsName), _variant_t((long)NewFileFormat),vtMissing, vtMissing, vtMissing, // vtMissing, 0, vtMissing, vtMissing, vtMissing, // vtMissing, vtMissing); book.Save(); /*释放资源*/ sheet.ReleaseDispatch(); sheets.ReleaseDispatch(); book.ReleaseDispatch(); books.ReleaseDispatch(); ExcelApp.Quit(); ExcelApp.ReleaseDispatch();}

mfc中CString 变量的比较?

str.CompareNoCase( str2 )

我下载的CAJViewer,可是提示缺少mfc71.dll,我在网上找到并且复制到system32

缺少mfc71.dll你就试试1.首先,打开百度搜索,搜索你缺失的DLL文件名,比如:d3dx9_30.dll,我们开始搜索!我们立马就能看到很多下载信息。 2.找一个比较安全网址下载!然后我们会发现下载的文件打开后会有2个文件夹,一个64位,一个86位!3.那么我们需要哪一个文件呢?其实很简单。点电脑左下角的“开始”,然后点击“运行”,在弹出的对话框里输入“dxdiag”,在弹出的界面下放,我们就知道自己的电脑是多少位的系统了:注意:x86就是32位系统~~我的电脑是32位的,所以我就需要x86文件里的DLL文件。3.打开x86文件夹,复制d3dx9_30.dll文件,在打开“我的电脑”,点击“C盘”,打开“windows”文件夹,在里面找到“System32”文件夹打开。把刚刚复制的文件粘贴进“System32”文件夹就好了! 4.如果还没解决就使用腾讯电脑管家,打开腾讯电脑管家然后找到电脑诊所在搜索栏中搜(dll)然后选择立即修复就可以了。腾讯电脑管家,是腾讯公司推出的一款免费安全软件,能有效预防和解决计算机上常见的安全风险。拥有云查杀木马,系统加速,漏洞修复,实时防护,网速保护,电脑诊所,健康小助手等功能,且首创了“管理+杀毒”二合一的开创性功能 依托管家云查杀和第二代自主研发反病毒引擎“鹰眼”,小红伞(antivir) 管家系统修复引擎和金山云查杀引擎,拥有腾讯账号全景防卫系统,尤其针对网络钓鱼欺诈及盗号打击方面,有更加出色的表现,在安全防护及病毒查杀方面的能力已经达到了国际一流杀软的同等水平,能够全面保障电脑安全。

mfc切割窗口后其中一个窗口紧靠边的问题??

m_wndSplitter.CreateStatic( this, 1, 2); w_wndSplitter.CreateView(0,0,w_wndSplitter.CreateView(1,0,别的先不提 楼主看我上面复制的代码得劲吗 CreateView的前两个参数貌似有问题第二个因该是CreateView(0,1

为什么mfc分割窗口CreateStatic(this , 1 , 2)总出错

第一步,建立两个新类。基类为CFormView类,类名CFormView1,CFormView2,Visual Studio会自动新建两个对话框资源并进行关联,ID号为IDD_FORMVIEW1,IDD_FORMVIEW2. 第二步,在CMainFrame插入两个成员变量,变量类型为CSplitterWnd,变量名分别为m_splitter1和m_splitter2. 这两个变量用来标识分割后的窗口区域。 第三步,重载OnCreateClient,添加如下代码。含义见代码注释,具体函数用法参见MSDN,恕不详述。 -------------------------------------------------------------------------------- BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext){// TODO: 在此添加专用代码和/或调用基类 CRect rect; this-GetClientRect(&rect); //将窗口划分为1行2列 if( ! m_Splitter1.CreateStatic(this , 1 , 2)) return FALSE; //将第0列分为2行1列 if( ! m_Splitter2.CreateStatic( &m_Splitter1 ,2 , 1,WS_CHILD | WS_VISIBLE)) return FALSE; //为三块区域关联类 m_Splitter1.CreateView(0 , 1,RUNTIME_CLASS(CFormView2),CSize(0,0),pContext); m_Splitter2.CreateView(0 , 0,RUNTIME_CLASS(CTestView), CSize(0,0),pContext); m_Splitter2.CreateView(1 , 0,RUNTIME_CLASS(CFormView1),CSize(0,0),pContext); //设置区域大小 这里的代码不能提前,原因不明- -! m_Splitter1.SetColumnInfo(0,rect.Width()/2,0); m_Splitter2.SetRowInfo(0,rect.Height()/2,100); return TRUE; //return CFrameWnd::OnCreateClient(lpcs, pContext);}-------------------------------------------------------------------------------- 第四步,添加头文件,在CMainFrame中添加,建议头文件顺序不变: --------------------------------------------------------------------------------

关于MFC画图闪烁的问题

奉劝最好别用mfc的图像绘制,很麻烦 我记得用MemDC 可以解决闪烁问题, 但是效果也并不好..所以我奉劝你使用OpenGl来绘制 ,或者采用QT ,wxwidget 等库.MFC 已经过时了,画啥都麻烦

MFC中SetTimer()的用法???

其他函数看不到啊!switch都带上break和default:

MFC中ProcessMessage()函数有什么作用?

while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){//调用窗口对应的消息处理函数TranslateMessage (&msg); DispatchMessage (&msg);}而这个PeekMessage是从当前线程的消息队列获取消息。你程序中如果使用PostMessage则可以把消息放入消息队列,但是要等待上一条消息被处理完,如果使用SendMessage,就不用放入消息队列,直接响应,而MFC内部控制界面,如你的Invalidate();会PostMesage ,所以,你当前函数没退出,那就不能响应消息,于是,如果你在循环时MSG msg; if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){TranslateMessage (&msg); DispatchMessage (&msg);}那就可以从消息队列处理消息,那就不会阻塞程序正常运行。

在MFC编程中Invalidate(); pDoc->SetModifiedFlag(TRUE); pDoc->UpdateAllViews(this);分别是什么意思?

就凭这些看不出问题啊

VC++的MFC实现的最小二乘法曲线拟合?

是不是类似于用鼠标在一个坐标平面画一条曲线,然后把这个曲线的坐标点都记录下来。然后根据这些离散的坐标点,求一些参数,然后根据参数,把这条曲线类似的还原出来?我以前写类似的代码(MFC)的,楼主可以留个邮箱,我发给你.

mfc编程,当鼠标左键按下后,拖动鼠标可以在视图上画出一系列点来,鼠标抬起则停止

用一个数组记录鼠标移动过程中的坐标;用两个变量分别记录线的颜色和粗细值;添加两个菜单,对应修改颜色和粗细值的变量;响应OnMouserMove,把鼠标移动过程中的每个点记录在数组中;在OnPaint中绘制数组中记录的点,用那个颜色和粗细变量

请问大家谁会用MFC编万年历?会的话麻烦把源代码发上来,谢了!

简单点话,把那个日历控件(Month Calendar)拖出来就OK了。

MFC 单文档 修改工具栏图标 图标从彩色变为黑灰了 不知什么原因 求高手指导

没错啊,你这个图标就是黑灰的,如果你说载入的比较难看应该是小图标只有16*16或8*8吧,你先下载一个图标制作软件把你的图转换一下

visual studio MFC能支持声音文件资源的添加吗

应该是可以的,请检查你的WAV文件。另外,将IDR_WAVE1转换为LPCTSTR最好用MAKEINTRESOURCE宏。

怎么用MFC获取硬盘的物理ID

锐英源哪有例子代码。

MFC多线程安全问题。

解决不了,伤神

MFC程序中怎么定义CAN卡的端口

void CCOMMUNICATIONSet::OnBtnStartcan() //“启动CAN”按钮{ // TODO: Add your control notification handler code here if(m_connect==1) //如果已经连接 { m_connect=0; m_startcanlight.SetIcon(m_hIConGrey1); Sleep(500); GetDlgItem(IDC_EDIT_BTR)->EnableWindow(!m_connect); GetDlgItem(IDC_EDIT_STARTID)->EnableWindow(!m_connect); GetDlgItem(IDC_EDIT_ENDID)->EnableWindow(!m_connect); GetDlgItem(IDC_COMBO_BAUD)->EnableWindow(!m_connect); GetDlgItem(IDC_COMBO_FILTER)->EnableWindow(!m_connect); GetDlgItem(IDC_COMBO_MODE)->EnableWindow(!m_connect); OnSelchangeComboBaud(); OnSelchangeComboFilter(); GetDlgItem(IDC_BTN_STARTCAN)->SetWindowText("启动CAN"); VCI_ResetCAN(m_devtype,m_devind,m_cannum); VCI_CloseDevice(m_devtype,m_devind);// 此函数用以关闭设备。 return; } //如果未连接 VCI_INIT_CONFIG init_config;//定义初始化CAN的数据类型的结构体 int index,mode,cannum,baud; UpdateData(true);//控件的值->变量index=m_ComboIndex.GetCurSel();//设备索引号 mode=m_ComboMode.GetCurSel();//工作模式 cannum=m_ComboCANInd.GetCurSel();//第几路CAN sscanf(m_strBTR, _T("%x"), &baud); m_devind=index;//设备类型 m_cannum=cannum;//第几路CAN UpdateData(false);//变量值->控件显示 init_config.Mode=mode;//模式 //滤波设置 DWORD filterMode=m_ComboFilterMode.GetCurSel();//"滤波模式" if (filterMode!=2) { VCI_FILTER_RECORD filterRecord; filterRecord.ExtFrame=filterMode; UpdateData(TRUE);//控件的值->变量 DWORD IDtemp; IDtemp=atoi(m_strStartID);//"滤波范围起始帧ID"字符转换为整形 //_stscanf_s(m_strStartID, _T("%d"), &IDtemp); filterRecord.Start = IDtemp;//Start:滤波范围的起始帧ID IDtemp=atoi(m_strEndID);//"滤波范围结束帧ID"字符转换为整形 //_stscanf_s(m_strEndID, _T("%d"), &IDtemp); filterRecord.End= IDtemp;//End:滤波范围的结束帧ID VCI_SetReference(m_devtype, m_devind, cannum, 1, &filterRecord);// 设置报文滤波。为1表示操作成功,0表示操作失败 //使滤波表格生效 if (VCI_SetReference(m_devtype, m_devind, cannum, 2, NULL)!=STATUS_OK)//参数类型为2???????????????????? { MessageBox(_T("设置滤波失败!"), _T("警告"), MB_OK | MB_ICONQUESTION); VCI_CloseDevice(m_devtype,index); return; } } m_connect=1; GetDlgItem(IDC_EDIT_BTR)->EnableWindow(!m_connect);//不激活"自定义波特率寄存器"编辑框 GetDlgItem(IDC_EDIT_STARTID)->EnableWindow(!m_connect);//不激活"滤波范围起始帧ID"编辑框 GetDlgItem(IDC_EDIT_ENDID)->EnableWindow(!m_connect);//不激活"滤波范围结束帧ID"编辑框 GetDlgItem(IDC_COMBO_BAUD)->EnableWindow(!m_connect);//不激活"波特率"组合框 GetDlgItem(IDC_COMBO_FILTER)->EnableWindow(!m_connect);//不激活"滤波模式"组合框 GetDlgItem(IDC_COMBO_MODE)->EnableWindow(!m_connect);//不激活"工作模式"组合框 GetDlgItem(IDC_BTN_STARTCAN)->SetWindowText("关闭CAN");//改变控件的文本内容 m_startcanlight.SetIcon(m_hIConGreen1); VCI_StartCAN(m_devtype,m_devind,m_cannum); AfxBeginThread(ReceiveThread,this);//启动线程,ReceiveThread为线程函数 //Sleep(8000); }UINT CCOMMUNICATIONSet::ReceiveThread(void *param)//接收CAN报文 线程函数的定义{ CCOMMUNICATIONSet *dlg=(CCOMMUNICATIONSet*)param; CListBox *box=(CListBox *)dlg->GetDlgItem(IDC_LIST_INFO); VCI_CAN_OBJ frameinfo[50];//定义CAN信息帧数据类型的结构体 VCI_ERR_INFO errinfo;//定义错误信息数据类型的结构体 int len=1; int i=0; CString str,tmpstr; while(1) { Sleep(1); if(dlg->m_connect==0)//未连接 break; len=VCI_Receive(dlg->m_devtype,dlg->m_devind,dlg->m_cannum,frameinfo,50,200);//从指定的设备读取数据 if(len<=0)//没有读到数据 { VCI_ReadErrInfo(dlg->m_devtype,dlg->m_devind,dlg->m_cannum,&errinfo);//获取最后一次错误信息 } else//读到数据 { for(i=0;i<len;i++) { str="接收到数据帧: ";if(frameinfo[i].TimeFlag==0)//无时间标识 tmpstr="时间标识:无 "; else tmpstr.Format("时间标识:%08x ",frameinfo[i].TimeStamp); str+=tmpstr;//接收到信息帧时的时间标识 tmpstr.Format("帧ID:%08x ",frameinfo[i].ID); str+=tmpstr;//报文IDstr+="帧格式:"; if(frameinfo[i].RemoteFlag==0) tmpstr="数据帧 "; else tmpstr="远程帧 "; str+=tmpstr;str+="帧类型:"; if(frameinfo[i].ExternFlag==0) tmpstr="标准帧 "; else tmpstr="扩展帧 "; str+=tmpstr;box->InsertString(box->GetCount(),str);//插入字符串if(frameinfo[i].RemoteFlag==0)//不是远程帧? { str="数据:"; if(frameinfo[i].DataLen>8) frameinfo[i].DataLen=8; for(int j=0;j<frameinfo[i].DataLen;j++) { tmpstr.Format("%02x ",frameinfo[i].Data[j]); str+=tmpstr; } //EnterCriticalSection(&(dlg->m_Section));//获得指定的临界区对象的所有权 //LeaveCriticalSection(&(dlg->m_Section));//释放指定的临界区对象的所有权 box->InsertString(box->GetCount(),str); } CNaS_BMSDlg *m_Host = (CNaS_BMSDlg*)AfxGetMainWnd();//获取主界面的指针 if(frameinfo[7].Data[2]!=1) m_Host->xxx->m_page1.SendMessage(UM_ALARM,0,0); } box->SetCurSel(box->GetCount()-1);//box->GetCount():返回列表框中的字符串数目 } } return 0; }

北京为什么没有山寨肯德基?(就是像DFC美味基,MFC美优乐,YKC一啃基,KEC肯德甚这种)

北京一线城市,也是首都,肯定不会让开这种店!

brotyermfc-7360怎么设置成共享打印机

想要共享,电脑必须是在一个局域网内,有固定的IP地址。首先点“开始”“设置”“打印机和传真”进入到打印机界面。在你要共享的打印机上点鼠标右键,点“共享”确定。然后点“开始”“运行”输入cmd 回车,在弹出的窗口里输入 ipconfig 查看IP address项数字地址,记录下来,关闭窗口。然后到另一台电脑上,点“开始”“运行”输入\刚才记录的IP地址(前面的二个反斜杠不要忘记),回车。这时在弹出的窗口里就可以看到你刚才共享的那台打印机了。右键点此打印机的属性,点“连接”,成功后就会在电脑中生成一台共享的打印机。

MFC中的CDC是什么意思?

美国疾病控制和预防中心;美国疾病控制与预防中心。CDC(P):CentersforDiseaseControl疾病控制中心.是由政府举办的实施国家级疾病预防控制与公共卫生技术管理和服务的公益事业单位。其使命是通过对疾病、残疾和伤害的预防控制,创造健康环境,维护社会稳定,保障国家安全,促进人民健康;其宗旨是以科研为依托、以人才为根本、以疾控为中心。

MFC中CSocket类里的Receive()怎么实现 自动触发接收数据

使用异步方式,OnReceive()函数是自动接收

VC/MFC如何在一个函数循环中中响应串口消息

建议看经典入门书Visual C++_Turbo C串口通信编程实践循序渐进

MFC SOCKET 网络编程--OnReceive函数无法响应,为什么???

CliSock.Create(0,SOCK_STREAM,FD_CONNECT|FD_READ);

mfc CSocket::OnReceive 接收不到

要把socket设为允许读才可以。

MFC CSocket::OnReceive()函数不被触发?

ActiveX控件用于Web的过程是将控件嵌入主页中,用户通过浏览器访问该主页时,将主页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行。控件下载一次后就驻留在用户本地机器上,下次再访问相同的主页时,可不再下载该控件,而是直接运行用户本地的控件。这里控件容器就是浏览器,用户不需要通过浏览器调用控件的属性或方法。因此,开发面向Web的ActiveX控件比开发桌面的控件还要简单些,所复杂的是如何将该控件很好地嵌入主页,使用户能正常浏览。

MFC中使用cncomm类,无法响应OnReceive

2

mfc onreceive

该函数是个需要重载的回调函数,当一个套接口已经准备好数据,并且可以由函数Receive()接收时,就可以调用此函数处理相应的消息。//下面的CMyAsyncSocket是CAsyncSocket类的派生类void CMyAsyncSocket::OnReceive(int nErrorCode){ static int i=0; i++; TCHAR buf[4096]; int nRead; nRead=Receive(buff,4096); switch(nRead) { case 0: Close(); break; case SOCKET_ERROR: if(GetLastError()!=WSAEWOULDBLOCK) { AfxMessageBox("Error occurred"); Close(); } break; default: buff[uRead]=0; CString szTemp(buff); m_strRecv+=szTemp;//m_strRecv是一个在CMyAsyncSocket中说明的字符串 if(szTemp.CompareNoCase("bye")==0) ShutDown(); } CAsyncSocket::OnReceive(nErrorCode);}
 1 2 3  下一页  尾页