mfc是什么意思 神奇的赞助商
237次浏览 发布时间:2023-04-14 12:00:51不过呢,也有一个让人热血沸腾的好消息:小编终于抱到了一个神奇赞助商的大腿,终于不用再纠结1万阅读是1块钱还是2块钱的小事情了。
接下来还是说水深火热的事情吧,小编为了解决一个粉丝朋友的MFC编程上的问题,可谓是绞尽了脑汁又挖空了心思,下面就来看看这个坑爹的MFC。
![](/static/images/2023/04/12/7fadafc5-c25e-43e0-bd17-690ae901480b~noop_bzl4gmwxy0c.jpg)
什么是MFC
微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
![](/static/images/2023/04/12/6a0f01aa-215e-4662-86f4-74893ed64655~noop_330lokyggak.jpg)
CString
区别于std::string,MFC搞了一个CString出来。这玩意儿太小众了,当您在网上搜一搜c++代码片断准备copy的时候,会发现全都是std::string的代码呀,根本没人写CString的版本。
于是每次从网上copy了代码,要先做一次CString到std::string的转化;代码结束的时候,还要再做一次std::string到CString的转化。
![](/static/images/2023/04/12/c9cea1dc-1cf0-4a0c-874e-82254ecc514f~noop_awrsa2ahjnj.jpg)
反人类的方法名
MFC里面的方法名实在是让人叹为观止无力吐槽了。比如有一个label控件(或者称为static text),那么给它赋值的方法怎么着也应该从下面选一个吧,比如:setText, setData, setValue之类的, 但是你猜MFC里面给label赋值的方法是啥? SetWindowTextW,对,后面还有一个莫名其妙没头没脑的W。
再比如,一个Modal类型的对话框,当用户点击了关闭按钮时,应该会调用哪个方法? 凭直觉或者良心来说,都应该是onClose或者onDestroy吧? 可MFC里面调用的方法偏偏是OnCancel。
最后再说一个更反人类的方法名,就发生在添加菜单Menu事件的时候,一个菜单项的默认事件处理函数名称竟然是On32777(),您没看错,这是一个完全没有任何语意的方法,要是不加注释您根本不知道它会不会是一个处理邮编的方法。
![](/static/images/2023/04/12/98c1a933-21e8-432a-9de1-daba4bea302b~noop_edyn3yp3ew5.jpg)
JSON
默认情况下,c++是没有办法理解json这种类型的数据的。于是,小编在网上找到了一个叫做jsoncpp的库,使用的时候发现它只支持stringstream,不支持char*,也不支持std::string... 于是先得把std::string里面保存的字符串放到std::istringstream里面,然后再 >> 到Json::Value里面,才能实现JSON字符串的解析。 这个作者设计接口的脑回路实在是让人感觉不可捉摸高深莫测。
![](/static/images/2023/04/12/f93aee71-6ce6-4a25-ac01-74922bc22e22~noop_vet1wjfhrcf.jpg)
粗糙的界面设计
您能相信么,在它的界面设计窗口里面,竟然不能直接修改控件上面的字体大小,更不要提颜色了。 必须写代码才能实现这么一个常用且看起来无比简单的问题,用惯了QT的小编当时真是佩服的五体投地心悦诚服。
![](/static/images/2023/04/12/2f1161ea-eadb-4929-8013-347927591a8c~noop_w4eadixoqyn.jpg)
其它
在与WEB通信时,还有很多想对MFC吐槽的,就不展开了,先罗列在这里了。
首先,WEB服务端一般是UTF-8的字符集, MFC里面可以认为是GBK的,于是要反复地转来转去,转来转去,转得人头晕。
其次,urlencode这么一个基础的功能啊,竟然都不封装一下。
最后,发个http请求,要写几十行代码,实在是让人忍不住加入python的怀抱啊。
![](/static/images/2023/04/12/9779080d-7a19-40a8-891d-805bc8e56a1b~noop_nasnwjumugv.jpg)
![](/static/images/2023/04/12/a1528038-9edf-4ea2-b2ff-feda4ee61bf6~noop_grwzdxftcay.jpg)