存在问题: 桌面系统windows为王,windows编程大有可为。 解决方案: 大家知道现在PC市场上,Windows、Linux、Mac基本占了百分之九十多,而在个人用户PC市场,Windows应用在目前的PC市场还是占据了绝大多数,根据StatCounter和Net Applications两家机构的最新统计,Windows系统仍然占据90%以上,因此在Windows上或者在Windows环境下开发应用程序还是非常普遍的。及时是Linux下开发软件的同时,也有不少人是在Windows环境下开发,所用工
MFC 微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。早期很多学习计算机专业的读者可以在学校里面都有接触过,因为这个是每一个计算机专业的读者必修课程,所以在早期的C++项目里面很多都是使用MFC为开发框架进行构建的,因为它有一个很大的好处就是和我们的windows的系统兼容性很好,可以直接调用整个系统的API函数,而且开发的程序对系统的支持度很好,因为我们现在的windows系统都是在向前兼容的,如windows系统里面有win 95、win98、win2000,win Xp,win7,这些操作系统都是一致向前兼容的,如果经历过这些系统的读者都会发现系统在win8之前一直往前兼容,造成操作系统变得越来越大,在win8系统,后windows系统引入C#一起来对windows系统进行调控,这时我们会发现win8对win7的兼容性很差,而且这个操作系统也是微软除visit系统最短命的系统,这个时候我们就会发现我们的MFC开发的程序在整个windows兼容性不是那么高了,而且由于当时,对于我们的C++开发一直有一个叫做visual studio 的编译器在C#语言没有出来前,只能编译C++,所以visual studio作为全世界最优的编译器也是整体支持MFC,所以这个时候我们现实生活中在windows系统开发的程序很大部分都是使用了MFC框架进行开发,在如今我们的很多酒店、政府等等很多行业上面用的都是MFC框架进行开发,MFC全面支持COM组件开发,这个时候很多在windows开发的程序也会在这上面支持COM组件开发,还有由于在中国大部分计算机的使用者都是用的windows系统,所以在开发程序中用C++来开发的时候都是使用了最为稳定的MFC进行开发,记得几年前和一位一起工作的朋友曾经谈过,只要微软不倒闭,MFC的工作者就不会失业,为啥呢,哪怕现在在windows上面最为流行的C#语言也没有C++中的windows编程对windows操作系统操作这么流利,打个比方如果你的电脑里面在加上一个高拍仪这个时候要用到的是USB驱动进行调用,这个时候处理USB驱动调用的时候就会发现,驱动调用的数据都需要进行位运算,这个时候用C++来处理是最为方便的,所以C++在windows上面的开发之所以占尽了便宜,是因为windows编程,而我们的MFC是封装后的windows编程。
Java编程语言(第三版)—Java四大名著—-James Gosling(Java之父)
大家好,又见面了,我是你们的朋友全栈君。 开篇先声明一点,《深入浅出MFC》是一本不错的书,对于MFC原码的剖析,十分到位,特别是前面对于MFC六大关键技术的总结和演示程序,尤其精彩。那为什么我要说不要看这本书呢? 我是站在一个初学者的角度来说这句话的,也是我当初看了这本书的一些感受(因为过于难以理解,差了几章没有看,后来再补的),这本书对于MFC的讲解对一个初次接触MFC的人来说,内容过于的晦涩难懂,大段大段的原码引用,一定会使人头晕目眩,不知所措,就算忍受着煎熬读完,我敢保证,你坐在电脑前,打开vc++,肯定还是不知道怎么用,甚至添加一个控件成员变量都不会,更不要说用MFC开发一个windows程序了。 “深入浅出”这四个字,确实有点名不副实,也有着一定的误导作用,大多看这本书的朋友,我想一定是被它的名气所吸引的。不过,就我到现在的学习经验,我觉得,如果你不是要用到底层的开发,对于MFC的原码,不了解也没什么关系,只要知道其基本工作机制,就可以了,而这本书,完全可以不看,以目前的趋势,开发工具日益便捷,很多东西都是用的“代码自动生成”,除非,你想充分diy,一般默认这些就可以了。当然,能了解原理更好了,不过不是必须罢了。 另外,侯先生的语言也过于跳跃,类似于网页中的连接,有时让人无所适从,这大概也算是他的风格吧,不过,对于教材,或者说技术性的书,还是以线带面为好。 对于有一定MFC编程经验的人来说,了解MFC原码,对编程水平的提高还是十分有帮助的,这里,我也推荐这本书!! 对于想学习MFC的朋友,我还是推荐《VC++技术内幕》( Programming Visual C++ ),当初我看的是英文的第五版,现在好像第六版也出来了吧,中文的好像只有第四版。 我还建议大家在学MFC之前看一点WINDOWS编程的书,了解一些windows的工作原理,像消息机制啦等等 当然了,这都是我个人的一些看法,仅供参考!
大家知道现在PC市场上,、Linux、Mac基本占了百分之九十多,而在个人用户PC市场,应用在目前的PC市场还是占据了绝大多数,根据和Net 两家机构的最新统计,系统仍然占据90%以上,因此在上或者在环境下开发应用程序还是非常普遍的。及时是Linux下开发软件的同时,也有不少人是在环境下开发,所用工具也很多都是平台的软件。
在Windows平台下,最常见最流行的编程就是MFC编程了,在网上可以搜索出大把的MFC编程相关的文章,今天我们来讨论另外一种windows下的编程模式,即Windows SDK编程。这种编程具有更加灵活和强大的控制,能实现一些MFC不易实现甚至难以实现的功能。 所有的WindowsSDK编程都有一个类似的框架,本文就说说这个框架,Windows程序设计的框架分为“三部曲”: 注册窗口类 注册窗口类的API函数是RegisterClass或者RegisterClassEx,这两个函数参数区别不大,具
学VC并不是传说的那么难,可不下些功夫是学不成的。学编程急不得,没有编程的基础知识上来就学VC肯定碰一头灰,说VC难就难在这点上了。如果硬上,意志坚强的话还能挺过来,但最后还得回头来补习基础知识。意志不坚强的话,很有可能就此放弃,并留下一个VC难得不得了的印象。
很多人都说windows编程凉了,实则不然,因为微软不倒,我们还在使用微软提供的winddows操作系统,windows编程就不会消亡,MFC也是一样,不可否认其他编程语言的方便,强大,但是windows编程也有它自己的优势,学习windows编程的人喜欢的就是DLL注入,钩子之类的东西,觉得很装逼
一、可能你忽视的基础 在正式开始之前,我不得不从最基本的地方开始,因为这些地方大多数人会忽视的一干二净,如果不在开始进行说明,那么在后面一定会有很多困惑的地方。 最开始我们回到数字在计算机里的表示,回到最开始的问题上-2&-255是多少,那么我们首先得回顾一下-2在计算机里面的表示是什么样子的。 最开始,希望你还记得什么叫无符号整数和有符号整数,实际上,你得庆幸在一般的图像中没有浮点数,不然你需要复习或者重新学习的基础比这个还多。 先说有符号整
总是被问到,如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复。 一家之言,欢迎拍砖哈。 1、可以考虑先学习C. 大多数时候,我们学习语言的目的,不是为了成为一个语言专家,而是希望成为一个解决问题的专家。做一个有用的程序员,做一个赚钱的程序员。我们的价值,将体现在客户价值上,而不是语言写得好不好看。 C++是C的一个面向对象的解释,C++为C扩充了大规模工程应用,复杂的系统结构的组织和掌控方法,但是,我认为,C++骨子里还是C的。 毕竟,解决具体问题,每个函数内部,都是用C的方式写程序,还是面向过程的。 因此,想要学习好C++,我的建议,先学习C,先学解决问题的能力,再讨论解决大问题的能力。就是先学习怎么走路,再学习怎么跑步。 2、学习C的过程中,一定要理解结构化编程思维。 为什么呢,我前面有文章说过,软件语言的发展过程,就是一个数据私有化的过程,大型工程应用,强调高内聚,低耦合,模块化设计,保持代码最大的灵活性和安全性。 这是现代工程化开发的核心和灵魂。 因此,利用C这门语言入门,借此理解结构化开发思维,可以说是个很方便的路子。因为C的函数,本来就是为重用做准备的。同时,全局变量和cpp内部私有变量的差别,其使用原则,这些都能学到很多结构化开发思维。 3、开始学习C++ C++不难学的,很多人觉得C++难学,其实是因为它在C之外,又提供了很多的概念,尤其是对象,很难以理解。 不过我经过这么多年,把这个问题反而看淡了,我认为面向对象相对面向过程,仅仅是结构化程序设计的一个具体体现,是编译器提供手段,强迫程序员必须遵循数据私有化的一个实例,C++和C的关系,最核心的莫过于此。 现在我们回到C再看看,如果我们把一个全局变量,写到一个cpp里面,并且在对应的h文件中不声明,它是不是就只有这个模块可以使用?它是不是就是私有变量,以这个理解,类能明白了吗? 4、学习C++的深入技巧 C++在类的基础上,经过这么多年的发展,其实提供了很多深入的概念,看起来很复杂,其实我看也很简单。比如模板,我的理解就是“类的类”,大家说是不是? 既然模板理解了,STL,ATL这些,静态模板库,动态模板库,还难理解吗?就是一大堆类的类,可以借此实现很多应用中需要的类,不需要程序员再自己写而已。 ok,STL都理解了,泛型开发还难吗?所谓泛型开发,其实就是我做一个模板,来定义一套算法规则,但是呢,我希望这个算法规则,能进一步抽象,对核心数据类型不要限死,我把各种数据套进去,都可以用,这样,仅算法这部分,我不需要重写了。你想想是不是这个道理? 学到这里,C++和C,其实已经差不多了。再学语言,就是求全责备,过于钻牛角尖了。 5、学习应用开发 前面说了,学习语言,目的不是让别人认为自己是专家,是为了写程序赚钱。因此,语言学完,要学习应用开发。 什么叫应用开发呢,我会一门语言,但是,客户不懂,客户说的很直接,在Windows下给我写个程序,我要什么什么功能。为啥Windows呢?因为我习惯。 OK,很多时候,应用开发要尊重客户习惯,一般说来,语言这个东东,还是要结合具体平台的开发,才能开发出有意义的应用程序卖钱。那么,一般说来,客户端是Windows系统,服务器是Linux,这些都是行业习惯,嵌入式不好说,各种平台都有,Palm,S60,Linux,WinCE,等等。要根据自己的目标客户来定。 当我们选定目标平台后,有一个问题,选什么语言,很多时候,学生和商用程序员差别就在这里,学生一般没得选,自己会啥就用啥呗,企业里的程序员不会,要先评估需求,看哪个语言更合适,不会的语言,要去学。 ok,假定我们选了C和C++,那么,我们需要选择开发平台,Windows下不用说了,VC,这是最好用的,Linux下呢,gcc,其他的也差不多。 假如我们开发VC,并且使用C++,这个时候,才需要考虑学习MFC了,因为这是微软的标准类库,至少Windows平台下,它最权威,你看见没有,我们从学习开始,走了多少步,才走到MFC?是不是MFC不是学习C++上来就必须学的? 6、学习MFC 学习MFC,很多人一上来就开始看其体系架构,看得一头雾水,那个模块关系依赖图,我到现在都看不懂。 呵呵,其实不是啦,和学语言一样,我们学MFC的目的,也不是希望成为MFC的专家,而是要利用MFC开发Windows应用程序,为我们赚钱。看见没?MFC是手段,不是目的,目的是开发Windows程序。 其实Windows下,有一套很标准的C接口,叫Win32API,这个才是Windows的标准编程核心,因此,学习MFC,真实的目的是理解Windows程序开发,建议可以先学习Win32API,看来我们又回到C了哈,呵呵。刚开始学C有用吧? 7、Win32API
总是被同学们问到,如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复。 一家之言,欢迎拍砖哈。 1、可以考虑先学习C. 📷 大多数时候,我们学习语言的目的,不是为了成为一个语言专家,而是希望成为一个解决问题的专家。做一个有用的程序员,做一个赚钱的程序员。我们的价值,将体现在客户价值上,而不是语言写得好不好看。 C++是C的一个面向对象的解释,C++为C扩充了大规模工程应用,复杂的系统结构的组织和掌控方法,但是,我认为,C++骨子里还是C的。 因此,想要学习好C++,我的建议,先学习C,先
C#语言是在微软公司的.NET框架上开发程序而设计的,首先作者给大家纠正了一下C#的正确发音:See Sharp(而不是很多人说的什么C井之类的,每次听到C井我都只能呵呵一笑)。
前一篇文章我们一起学习了Windows编程基本框架,几乎所有的Windows编程都是以这个模式开始,剩下的就是如何怎么框架的基础上如何添加枝叶实现不同的功能了。在Windows平台下,肯定少不了最基本的界面控件,这些控件方便了应用程序与用户之间的交互,也成了Windows独霸个人PC市场近20年的关键因素。 在Win32 SDK环境下,怎么来创建常用的那些基本控件呢?我们知道如果用MFC,简单的拖放即可完成大多数控件的创建,但是我们既然是用Windows SDK API编程,当然是从根上解决这个问题,实际上
模仿windows任务管理器制作一个任务管理器软件。设计语言不限。 二知识要求 Windows编程,MFC编程,API调用 三.开发环境 使用Microsoft Visual Studio 2013的开发环境,模拟Windows的任务管理器。首先分析进程管理器软件的相关功能;其次,综合运用以前所学的相关知识,广泛查阅资料。 四.主要功能及实现思路 4.1设计要求实现的主要功能进程管理功能,具体包括以下内容: (1) 使用系统API。 (2) 制作出相应的图形用户界面。 (3) 至少包括三个功能: 获取
1.1 在.NET之前 C#发音:see shap 1.1.1 20世纪90年代后期的Windows编程 20世纪90年代后期各语言缺点: 1.纯Win32 API不是面向对象的,而且工作量比MFC的更发 2.MC是面向对象的,但是他却不一致,并逐渐变得陈旧 3.COM虽然概念上简单。但实际代码复杂,而且需要更多丑陋的,不雅的底层代码 共同缺点: 主要针对桌面程序而不是Internet的开发 1.2 进入Microsoft.NET .NET框架是一种比MFC或COM编程
消息钩子在Windows编程中有着非常广泛的应用,它可以任意拦截Windows系统,这个以消息为驱动的系统中的绝大多数消息类型。一方面这给编程者带来了巨大的灵活性,另一方面也埋下了巨大隐患,大多数窃密软件都使用这种方法。此篇文章给您提供一种钩子的反拦截方法,希望对您有所帮助。文章中使用了API钩子,您之前必须对此技术有一定了解。 为求完整,文章分为两部分,第一部分为消息钩子的使用,熟悉此技术的读者可以直接跳过此节。第二部分为消息钩子的反拦截。
第一种解释:句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。
接触Windows编程大概是从2000年左右开始,一直持续到2008年。这中间在学习的过程中也留下了不少的笔记,在网络资源不是那么发达的情况下很多资料都是从MSDN中获取和翻译的,也有很多知识是在不断的实践中得到的累积的。虽说现在移动互联网或者基于WEB编程的技术大行其道,但是这些曾经的技术积累还是对于那些初入和学习Windows编程的同学非常有帮助的。因此这里将这些曾经的知识点进行整理和编辑然后通过简书来分享给大家。
在上中学时,那时候就对计算机产生了浓厚的兴趣。甚至当时因为学习原因,家里都不让玩电脑,只能索性偷着打游戏。而当时喜欢打一些小游戏,但奈何等级问题,一直被老玩家吊着打。
掌握语言基础是第一步,如果不了解基础知识,那么就不知道自己是否做错了或者接下来该怎么做。掌握C/C++相关的基础知识,如C语言基本语法、C++基础语法或者容器、迭代器和虚函数等等。
首先声明一下,标题所指的钩子是消息钩子,而不是API钩子(一种对API地址的替换技术)。若标题使您误解,请不要继续阅读。 消息钩子在Windows编程中有着非常广泛的应用,它可以任意拦截Windows系统,这个以消息为驱动的系统中的绝大多数消息类型。一方面这给编程者带来了巨大的灵活性,另一方面也埋下了巨大隐患,大多数窃密软件都使用这种方法。此篇文章给您提供一种钩子的反拦截方法,希望对您有所帮助。文章中使用了API钩子,您之前必须对此技术有一定了解。 为求完整,文章分为两部分,第一部分为消息钩子的使用,熟悉此技术的读者可以直接跳过此节。第二部分为消息钩子的反拦截。 一、消息钩子的使用。 消息钩子分为本地(local)和远程(remote)两种(两个local system-wide hook例外,无关主题,不多说了)。local类型的钩子函数只能拦截本进程的消息。能够拦截本进程以外的消息的钩子,都是remote类型。remote类型的钩子必须放在DLL里面。下面以remote类型为例,通过安装键盘钩子介绍其使用。 1、首先建立DLL,在头文件中添加如下代码。 #ifdef KM_EXPORTS #define KM_API __declspec(dllexport) #else #define KM_API __declspec(dllimport) #endif KM_API BOOL HookStart();//安装钩子 KM_API BOOL HookStop();//卸载钩子 2、在.cpp文件中添加代码 #pragma data_seg(“Shared”) HHOOK g_hhookKey=NULL; #pragma data_seg() #pragma comment(linker,”/SECTION:Shared,RWS”) g_hhookKey为键盘钩子的句柄,为确保此数值在所有实例中均保持不变,将其存放于此模块所有实例的共享数据区,若在exe程序中按此格式添加一int 变量 appNum,在程序启动时appNum++,则可以通过访问此变量的数值,确定有多少个exe的实例,当然这种方法也可以替代同步对象用于只启动一个实例。 HINSTANCE g_hinstDll=NULL; //添加全局变量用于记录此DLL模块的句柄 BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: g_hinstDll=(HINSTANCE)hModule;//在DLL加载时对全局变量赋值 ……………… } } LRESULT KeyHookProc(int nCode,WPARAM wParam,LPARAM lParam)//键盘钩子的过滤函数 { ………………… return::CallNextHookEx(g_hhookKey,nCode,wParam,lParam);//*****请留意此行代码***** } BOOL HookStart()//安装钩子 { g_hhookKey=::SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyHookProc,g_hinstDll, ::GetWindowThreadProcessId(::FindWindow(NULL,”被监视的窗口的标题“),NULL) ); return (g_hhookKey!=NULL); } BOOL HookStop()//卸载钩子 { BOOL ret; if(g_hhookKey!=NULL) ret=::UnhookWindowsHookEx(g_hhookKey);
指导书上出现了一个陌生的名词“句柄(handle)”,感觉比较奇妙,因为在之前编写微信公众号小程序看教程也编写了一个handle程序。所以留档一下吧。
在微软公司的windows平台下,有众多的编程语言和编程模式,比如windows SDK、C/C++、MFC、VB、Win32汇编等,哪种是最合适你的呢?小编认为,这取决于你的工作场景和情况,编程语言和模式本身并没有好坏之分,只有恰当与否。 如果你平时工作并不需要常常编写程序,只是偶尔做一些小工具来完成琐碎、重复、耗时的工作,那么VB是最适合你的编程语言了。VB编程学习简单,很容易上手,可以较快的编写出一些简单程序和工具,如果再深入一点,同样可以很方便快捷的编写出功能强大程序。比如几条语句就可实现一
大家好,又见面了,我是你们的朋友全栈君。 读者朋友们可能天天使用Visual C++这个强大的工具来开发应用程序,不知道注意到没有,Visual C++每次装载一个项目的时候,为了使项目加载过程不至于太单调,会在状态栏的左半部分会出现一个装载进度条,用来即时显示Visual C++装载项目的进度,当项目装载完毕后,进度条隐藏。那么这个功能是如何实现的呢?为了说明该功能的实现原理,本例提供了一个范例程序prgsbar,它演示了在编辑视图里显示文本文件,在加载文本文件时,在界面的状态条中的进度指示器仿真显示文件的加载过程,当文本装载完毕后,进度条隐藏。由于该程序在装载文件显示的进度条时无法进行拷屏操作,所以这里没有给出状态条中显示进度条的界面效果图,读者可以运行本书所带光盘中的程序代码观看相应的效果。 一、实现方法 虽然Visual C++中的MFC类提供了标准的进度指示器控件(progress control),但是我们不能在状态栏里直接使用这个控件,要解决这个问题,可以创建一个可重用C++类CProgStatusBar,这个类从CStatusBar派生,用来来实现状态条中的进度指示。整个实现过程不是很难,思路是在状态栏创建一个进度指示器控制,把它作为子窗口来对待,然后根据不同的状态来显示或者隐藏进度指示器。 在具体实现CProgStatusBar类的过程中,首先在CProgStatusBar派生类中加了一个CProgressCtrl类型的数据成员–m_wndProgBar,然后重载CstatusBar类的二个重要成员函数:OnCreate()、OnSize(),最后还要在该类中添加一个自定义成员函数OnProgress()。在上述三个函数中, OnCreate()负责在状态栏第一次被创建时接收控制,继而创建进度指示器并将它初始化为一个子窗口,它的实现代码如下: int CProgStatusBar::OnCreate(LPCREATESTRUCT lpcs) { lpcs->style |= WS_CLIPCHILDREN; VERIFY(CStatusBar::OnCreate(lpcs)==0); VERIFY(m_wndProgBar.Create(WS_CHILD, CRect(), this, 1)); m_wndProgBar.SetRange(0,100); return 0; } OnCreate()函数在状态栏的式样中加了一个WS_CLIPCHILDREN,它告诉Windows不要绘制子窗口以下的状态栏区域,这样可以减少屏幕闪烁。接着OnCreate()函数创建进度指示器控件并将它的范围设置成[0,100]。注意在这里创建进度指示器控件时没有用WS_VISIBLE,因为我们要实现的目标是仅仅当装载文件时进度条才显现,其余时间内应用程序都隐藏它。 熟悉Windows编程的人都清楚,无论何时,只要在某个窗口里添加子窗口,那么一定要负责管理它的大小尺寸,也就是说,当父窗口大小改变后,子窗口的大小也要跟着作相应的改变。一般来说,这个工作由父窗口的WM_SIZE消息处理函数OnSize()来作,所以我们也要处理该类的OnSize()函数。 void CProgStatusBar::OnSize(…) { CStatusBar::OnSize(…); CRect rc; GetItemRect(0, &rc);//获取状态条的第一个窗口的尺寸; m_wndProgBar.MoveWindow(&rc,FALSE);//移动进度条到状态条的第一个窗口; } 从上述代码可以看出,CProgStatusBar::OnSize()将进度指示器放在了状态栏的第一个窗格,这个窗格通常用来显示程序的”就绪”信息和命令提示信息。注意这里不论进度指示器是处于可见状态还是隐藏状态,MoveWindow都照样起作用–所以即便是进度指示器处于隐藏状态,其窗口大小同样是可调的。 调整好进度指示器的窗口大小后,下面要作的就是进度指示器的显示,进度指示器当前进度状态的显示在CProgStatusBar::OnProgress中完成。它有一个类型为UINT的入口参数:参数值的范围从0到100,表示进度百分比,0表示进度没开始,100表示全部完成。如果这个参数的值大于0,则OnProgress显示进度控制并设置指示器的位置;如果参数值等于0,则 OnProgress隐藏进度控制。 虽然子窗口控件通常都是放在父窗口能绘制的区域的最上面,但这样做在绘制方面是有一定风险的。在隐藏/显示进度控制时尤其如此,这时候会出现两个问题:第一,因为进度指示器显示在状态栏的第一个窗格位置,所以如果进度条指示器
[序言] 旧版的”80×86汇编小站站长简单介绍”已经过时了, 因此于2013年10月01日花费1个小时又一次更新和排版一次.
学习编程依然是一个高频话题主要是程序员薪资高,大家都想计入这个行业,但是由于自己没有编程基础,所以发起了这个讨论,学习编程需要什么基础吗?我觉得学习编程最重要的是入门,如果你入门的时候有一个好的方
[序言] 旧版的”80×86汇编小站站长简介”已经过时了, 因此于2013年10月01日花费1个小时重新更新和排版一次.
前段时间,帮人改了个项目,里面明明感觉是MFC,但是却调用C#的类函数,用的都是gcnew指针,凭借着对C#的熟悉,一点一点的实验,终于帮人把程序改好了,但是却不知道到底是什么东西,C#和MFC的混合编程?感觉也不像,现在发现原来是CLR,找了两篇文章,标记一下,便于以后学习。
程序员也一样,增值也好,改善表达力也好,最终都要在某种环境下达成一定的稀缺性,这样一个人才有价值。稀缺性同时受两个维度上的力量影响:一个是自身的努力,比如前文所提到的增值和表达力;一个是大环境的变化以及对这种变化的适应。在这一章里主要关注的是后者。
上一篇我们学习了解了如何使用Windows GDI画图,该应用程序都是光光的静态窗口,我们使用Windows应用程序,但凡稍微复杂一点的程序都会有工具栏和状态栏,工具栏主要用于一些快捷功能按钮。比如典型的windows应用程序的上面是菜单栏,从菜单栏我们可以选择应用程序提供的各种功能,但是有的功能比较常用,且不能放在第一级菜单,需要进入二级、三级甚至更多的菜单才能选择。显然这样使用起来比较麻烦,于是这时候工具栏的作用就体现出来了,一般工具栏位于菜单栏的下面,但是位于客户窗口的上面。下面就是windows的文
现代的桌面应用基本上很少使用原始的 Windows API 进行开发了,因为使用原始 API 堆砌出来的应用代码逻辑非常繁琐,特别是窗口消息的处理非常不方便,大多数直接使用 C# 或者 QT 这种跨平台的开发库,而那种直接封装 Windows API 而存在的 MFC 早已半步入土。
Windows编程中,对所有的GUI组件和控件进行了分类,每种类型的实例对象都具有不同的特性,这些特性包括UI外观以及事件的处理和响应的方法。就和面向对象技术中的类和实例对象一样,Windows中也提供了窗口类和窗口实例的概念,在创建一个窗口对象是必须要指定对应的窗口类名称,所有的窗口类必须要先注册到系统中才能进行实例化创建。系统内部默认注册了一些窗口类,比如按钮,编辑框这些窗口类等等。本文所要介绍的就是那些针对窗口类进行操作的API。一个窗口类其实就是定义了这种窗口实例的外观显示的样式、光标在窗口上移动时的样式、以及图标样式、背景绘制的画刷的类型、菜单、以及对应的UI事件处理函数等等。为了唯一的表征一个窗口类,还需要为窗口类指定一个唯一的字符串名称。下面的结构体就是用来描述一个窗口类所应该具有的数据结构:
本系统上位机软件设计是基于 MFC进行开发的,MFC(Microsoft Foundation Classes)是微软基础类库的简称,提供了基于 C++语言的面向对象编程的框架,软件工程师可以使用该框架开发 Windows 应用程序。本系统采用 MFC 作为上位机软件开发工具,主要原因是:
(MFC效率较高,但大量的Windows API和消息机制使得其较难理解,不易用;QT封装较好,易用且==跨平台==,但效率较低)
(MFC效率较高,但大量的Windows API和消息机制使得其较难理解,不易用;QT封装较好,易用且跨平台,但效率较低)
月光博客6月12日发表了《写给新手程序员的一封信》,翻译自《An open letter to those who want to start programming》,我的朋友(他在本站的id是Mailper)告诉我,他希望在酷壳上看到一篇更具操作性的文章。因为他也是喜欢编程和技术的家伙,于是,我让他把他的一些学习Python和Web编程的一些点滴总结一下。于是他给我发来了一些他的心得和经历,我在把他的心得做了不多的增改,并根据我的经历增加了“进阶”一节。这是一篇由新手和我这个老家伙根据我们的经历完成的文
什么是编程思想?答案可能很会复杂,但也可以很简单; 一句话来讲就是,用计算机来解决人们实际问题的思维方式,即编程思想; 编程就是为了解决实际中的问题,在思考如何编码的时候,把问题抽象到一定的高度去思考,更容易把握问题所在; 我们学习编程语言的最终目的,就是希望用计算机来解决我们的实际问题; 那么学习计算机该如何入手,也是很多初学者犯难的一个问题,特别是对与非计算机专业的人来说更是如此; 面对现实如此多的编程语言(比如:C,C++,JAVA,C# …)和 种类繁多的应用技术(比如: windows编程, li
前段时间由于工作的电脑问题,只好重装电脑。然而,在我使用Qt 尝试使用Loadlibrary动态调用DLL时却不成功,然后我使用Qt自带的动态调用API来尝试,依旧失败。起初觉得有点意外,搞了两天无果。后来才想起重装前曾经有装过某一个烧录工具,后来我尝试了一下,果然!Loadlibrary又调用成功了!
相信很多的大家能看到这篇文章的童鞋要么是学生,要么是学习语言汇编的。嗯大部分都是学生,号主我也是从学生时代过来的,在大学期间相信大家都有学习一门叫做C语言的课程,而这门课程的考核就需要用到的vc++6.0,同样的,国家计算机二级考试也需要用到这个。所以现在相信大家直达这个VC++6.0的作用了吧。
大二以前一直都是在用windows编程,即使看到别人使用华丽丽的mac也不屑一顾,认为那只不过虚有其表而已,不可能用来工作。可是有一天看到同学使用的ubuntu以后,其界面,其速度,其方便,日渐让我厌恶windows,特别是连开一个eclipse都要卡住,连鼠标都不能动的时候。我决定,要装上windows+ubuntu的双系统,ubuntu确实很好,不仅是他的系统做得华丽而高效,而且连安装都高windows一筹,因为它可以直接从u盘启动,然后让用户边体验边安装,我们再也不用像安装windo
编程语言做为一种语言自然和英语这些自然语言有类似的地方.学英语时我们知道要先记26个字母,然后单词及其发音,接下来就是词组,句子.反正简单的说就是记单词,熟悉词法,句法.接下来就是应用了,听说读写.而使用相同语言的人大脑里都有个翻译器,可以把自己的想法翻译成语言然后用说或写表达出来,而听和读则把接收来的语言翻译成自己大脑能理解的思想.
Windows 10中的错误仅通过在浏览器的地址栏中打开特定路径或使用其他Windows命令,即可使操作系统崩溃并显示蓝屏死机。
前言:本文来自于网络位置http://www.2cto.com/kf/201009/74917.html。尽管内容可能有些老,但是没有关系,对于想深入Python开发的工作者,在选择GUI开发包,乃至可视化IDE方面都还有相当的借鉴意义。
熟悉我的朋友应该知道,我是做嵌入式软、硬件开发工作的,在项目的调测过程中难免需要用到上位机进行数据调测和可视化,所以最近开始一个新的学习方向:Python Qt GUI设计。
我们在调用一个控制台程序时一直都有DOS黑框闪烁一下,很多时候我们都不希望出现那个黑框,因为那样给人感觉特别不好,但是如果是控制台程序的话又是无法避免的。那是不是就没办法了呢,当然不是,我们可以选择在VS中制作Win32应用程序来解决,它虽然是窗口程序,但是我们可将窗口隐藏掉就不会像之前有闪烁的现象,但是默认生成的Win32应用程序又不能使用MFC类库,给我们编程造成不便,下面我就来教大家怎样在WIN32应用程序中支持MFC类库的方法,让我们接着开始吧! 首先,在文件中加入如下头文件语句: #ifndef VC_EXTRALEAN #define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料 #endif #include <afx.h> #include <afxwin.h> // MFC 核心组件和标准组件 #include <afxext.h> // MFC 扩展 上面这段代码可以放在预编译头文件stdafx.h中,位置自己可定 然后在_tWinMain的开始加入 if (!AfxWinInit(hInstance, NULL, lpCmdLine, 0)) { MessageBox(NULL,_T("MFC init error!"),_T("Error!"),MB_OK); return 0; } 然后在菜单中依次选择"项目->属性->配置属性->常规->MFC的使用"中选择"在共享DLL中使用MFC";
现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重量级的都有。本文为你介绍了十一种类库,有我们常见的,也有不常见的,一起来看。 C++类库介绍 再次体现了C++保持核心语言的效率同时大力发展应用库的发展趋势!!在C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而
使用Windows API构建窗体应用 就历史来说,使用纯API开发窗体应用程序是上个世纪80年代以前的事情了,开发应用程序的人需要使用大量接近系统内核的API来完成应用程序的设计(当时C的版本还很低,没有类等概念,使用大量流程式,函数式的代码写一个窗体应用是一件很恐怖的事情)。MFC的第一个公开版本发布于1992年3月,使用C语言开发窗体应用的程序员们转而开始使用MFC来代替使用API直接开发窗体类应用程序。MFC相当彻底的用类封装了Win32 API,使得C程序员的开发窗体类应用的效率大大提高了。本文试
今天主要了解了Visual C++的开发环境Visual Studio(话说以前都是用来调试控制台程序的)和用mfc写了一个最简单的程序。
从事软件开发多年对于C/C++用的比较多,可以明确说这两种编程语言也是支持跨平台,肯定还是有很多人问什么是真正意义上的跨平台,所谓的跨平台就是同一套代码在不同的操作系统都能直接去运行,这里面涉及到一个很重要的问题,在java这门编程语言刚开始流行的时候就提到了跨平台的功能,在windows上运行的jar包直接放在linux上也能直接去运行,单纯从C/C++角度出发也是能够实现这种功能的,因为其语法实现是相同的。
领取专属 10元无门槛券
手把手带您无忧上云