----不是我写的.第一讲:预备知识与概念介绍注:我写这个专题目的是为VC初学者提供一个思路,我本人很菜,但我认为对于VC初学者来讲,可能有点帮助,当然,对于WinSDK编程,我也是刚刚接触。如果你对WinSDK编程较熟,请与我联系,咱们共同来把这个专题做好,如果你发现了什么错误,也麻烦你给我留言指正。我写的内容也基本上是我自己的一些理解,错误是肯定有的,如果你发现我的理解偏差很大的话,麻烦你提醒一下。---小朱!什么是WinSDK:大致说来windows编程有两种方法:1.windwosc方式(SDK),2.c++方式:即对SDK函数进行包装,如VC的MFC,BCB的OWL等,如果要深入下去,还是要熟悉SDK。两种方法有哪些区别呢:SDK编程就是直接调用windows的API进行编程,但是有上千个API组成(win95的API有两千多个),这种数目太大了,对于编程显然不利。而MFC把这些API封闭起来,共有一百多个类组成。一般只需20多个windows类和另外20多个通用的非windows类就可干活了,这一改变无疑是有很大好处的。尽管MFC如此方便,但是要学VC,直接去学MFC却是不明智的选择。只有在熟悉了MFC的运行机制的情况下,才有可能深入下去。那些如多少天精通什么什么的书籍其实讲的全是些如怎么使用VC这种工具的话题,学来学去学会了怎么会使用VC这种工具,而不能深入MFC编程。象VB这类工具就更令人感觉到太闷了,不过各有各的好处。MFC虽然提高了程序员编程的效率,但是也失去了SDK编程的灵活性.....不好意思,跑题了....本专题假定:C语言是windows的源语言,用C进行SDK编程是最合适的,你应该至少学过C语言,知道C语言的各种语法等,当我说到指针等类似概念的时候,你不至于茫然就行了。你还应该安装了VisualC++6.0,低版本的就不用用了吧,D版的才几块钱吗?推荐与参考资料:1.Petzold的[programmingwindowsbypetzold],这是我看过的一本书(电子书),不过是E文的,我只看了一半,下载空间一栏能供了该电子书。中文版的是[Windows程序设计](包括上,下卷),CharlesPetzold著,北京博彦发展有限公司译,北京大学出版社出版,本书唯一的缺点就是太贵,价格是160元。一些朋友让我多推荐一些这方面的书,我也没办法,一是这类书目前本就很少,二是如果你非要买的话,肯定要买这本书了,可是经典呢!!2.还有一本老书值得一提,可能市面上已经买不到了,书名[Windows编程],刘振安著,人民邮电出版社出版发行。一个朋友曾借给我看了几天我又还了,很容易读懂的,不过一看日期,95年出版,得!没希望了。我们学校图书馆好像也有几本,不过好像都很烂。3.VC的在线帮助MSDN,有关SDK的资料在PlatformSDK一栏中。下面再加深几点概念:什么是API:什么是API,有必要再谈一下,特别对于从TC过来的朋友和初学编程的朋友。API,全称applicationprograminterface,意思是应用程序编程接口(说起API并不仅仅指windows而言,windows支持的API叫winapi)。winapi就是应用程序和windows之间通讯的一个编程界面。windows提供了上千个API函数,以方便程序员来编写应用程序。做数据库管理系统是很少和API打交道的,我以前学PB,看的十几本书都没有专门的章节来介绍API的。只有到网上看那些PB技巧之类的文章才谈及API,不过还要加入一大堆声明之类的东东。好像VB也是这样。总之,进行系统编程,API是必不可少的。API是每个VC高手的必过的一关。什么是WinSDK编程:WinSDK程序设计就是API方式的windows程序设计。SDK,全称SoftwareDevelopersKit,意思是软件开发工具箱。它是在windows程序设计早期,程序员进行windows程序设计所必须购买的一个软件包(不知道那时候有没有D版的)。我两个月前见SDK还不知所云。开始进行WinSDK编程用C语言最好,可以撇开C++的特性专心熟悉一下Win32编程的思路以及了解windows的消息运行机制。等把这些有所了解后,慢慢转向C++和MFC编程。不过我的观点是WinSDK编程永远要慢慢进行下去,直接接触底层代码对MFC源码的理解是有很大好处的。上周开始用MFC时,按F11进行单步跟踪,一开始见到_tWinMain这样古怪的东东也没有感觉到太大的迷惑,不就是相当于SDK编程中的WinMain函数吗?什么是MFC:MFC,全称MicrosoftFoundationClasses,伪软把WinAPI进行封装的类库。它是一个类的集合,通过覆盖WinAPI,为编程提供了一个面向对象的界面。它使windows程序员能够利用C++面象对象的特性进行编程,类似BCB的OWL,Delphi的VCL组件。它把那些进行SDK编程时最繁琐的部分提供给程序员,使之专注于功能的实现。你不妨把它想象成类似TC提供的函数库吧。用VisualC++这种开发工具编程时,可以用MFC,也可以不用,但MFC是VC的精华所在,从某种意义上来说,不会MFC就是不会使用VC。研究MFC源代码是件既快乐又痛苦的事情,不过,阵痛之后,嘻嘻,......怎么进行WinSDK编程:VisualC++6.0:File--new--Projects--Win32Application(projectname)--......我们既然用C语言进行,就选第一项Anemptyproject............好累,这篇就写这么多吧,但愿对你有帮助,也建议多给我提意见,你的反馈是我最大的动力渊源......讲的不错吧~,还是比较好懂的.下面接着看.要自己动手.第二讲:WinMain与两只小板凳的故事注:呵呵,近两天收到不少网友来信,要求我继续写下去,说实在的,写这东西费时费力。不过一旦想起这些对大家或许有些帮助时,无形的压力就来了。我所写的,仅仅是我编程中的感想,如果你有何感想,希望给我留言或到C程序员论剑台交流,如果你有好的建议,欢迎提出;如果你有好的对VC初学者有利的作品或文章,也欢迎给本站介绍,我将大力为你推广。---小朱第一只小板凳:打开anemptyproject后,在VC的IDE中,打开文本编辑器。输入以下内容:#includewindows.hintWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow){MessageBox(NULL,TEXT(你好,欢迎来到VC之路),TEXT(欢迎),0);return0;}把它保存成以.c为扩展名的文件,并加入空项目中。编译......看到了吧,这就我们的第一只小板凳。它就类似于TC下的helloworld吧!虽然什么功能也没实现,但它比helloworld强多了,因为它向我们展示了一个小窗口。支解第一只小板凳:像TC一样,它包含一个头文件windows.h,这是一个最基本的头文件,它包含其它的windows头文件.在你的X:\ProgramFiles\MicrosoftVisualStudio\VC98\Include目录下,打开windows.h这个文件,你就知道它包含什么东东了。像dos下的C编程的main()一样,windows下的入口是WinMain()函数。把光标放在WinMain()上,按F1键。启动MSDN,如果你没安装的话,一定要安装一下,MSDN是最好的学习VC的资料,当然,对于我们入门者,有一本书从头到尾学一下最好。第一个参数:应用程序的当前实例句柄。第二个参数:应用程序的前一个实例句柄,别管它,对于Win32位而言,它一般是NULL.第三个参数:指向任何传给程序的命令行参数。PSTR代表指向字符串的指针。第四个参数:它告诉应用程序如何初始化窗口,如最大化,最小化等状态。WinMain()所起的作用:初始化,展示,销毁应用程序等。MessageBox(),如果大家在windows下编程,这是一个很常用的API,不用我费话了吧!几个要点:1.句柄(handle):在标准C库中句柄用来对文件输入输出。如下面的代码:inthandle;handle=open(filename,r)if(handle){read(handle,block,bytesToread);}close(handle);在文件被成功打开后,open()返回一个句柄,在read()中使用这个句柄来阅读这个文件。句柄不是指针。程序不能直接使用句柄来阅读文件中的信息。如果不能把它传送给输入输出函数调用的话,句柄就没有用了。句柄不返回零。句柄命名以h开始。这是匈牙利表示法的规定。2.匈牙利表示法:初开始看到这个程序时,你一定感觉到很怪,我当时就是这样的。不知道那些字母怎么回事。因为所有的命名采用了,匈牙利表示法。如消息的前缀使用msg.句柄使用h.函数使用fn等。多说了,习惯了就好了.3.有效使用MSDN:想成为VC高手,还要强迫自己习惯于使用MSDN,看得多了,不怕看不懂,如果仅仅知道功能不知道具体的函数,可用类似的英语单词去搜索。我平时就用金山词霸一点点的啃。唉,说起来惭愧,本人英语四级没过,这学期连报考都没有。以后努力了,总感觉到大学的教育很有问题,好像每个人都在为四六级而奔忙。呵呵,说了这些,真怀疑对你真的有用。有不对的地方,请指出。希望大家共同进步,把VC活吃了.......第二只小板凳打开VC,file--new--progects--win32application,并在projectname中输入hello.顺路走下来,选择第二项。在编辑器中输入以下程序覆盖向导产生的代码:#includestdafx.h//注意,这个向导产生的头文件不能去掉#includewindows.hLRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow){staticTCHARszAppName[]=TEXT(HelloWin);HWNDhwnd;MSGmsg;WNDCLASSwc;wc.style=CS_HREDRAW|CS_VREDRAW;wc.lpfnWndProc=WndProc;wc.cbClsExtra=0;wc.cbWndExtra=0;wc.hInstance=hInstance;wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszMenuName=NULL;wc.lpszClassName=szAppName;if(!RegisterClass(&wc)){MessageBox(NULL,TEXT(ThisprogramrequiresWindowsNT!),szAppName,MB_ICONERROR);return0;}hwnd=CreateWindow(szAppName,//windowclassnameTEXT(欢迎你的到来!),//windowcaptionWS_OVERLAPPEDWINDOW,//windowstyleCW_USEDEFAULT,//initialxpositionCW_USEDEFAULT,//initialypositionCW_USEDEFAULT,//initialxsizeCW_USEDEFAULT,//initialysizeNULL,//parentwindowhandl