C语言设计Win32程序(附C语言设计QQ登陆界面实例)
C语言的基本语法我是不打算再提了,很多C语言编程的书,就是将一些基本的数据类型、数据结构、语法,然后就是一些数值计算的实例,大多数都是雷同的,难免有抄袭之嫌,而且也没有多少实用价值。
本书以实用实例作为编程指导,指引大家编写真正实用的程序。了解到大家对黑客程序、病毒、窗口类程序比较感兴趣,因此我就拿这些实例进行讲解。基于大家基本都用Windows XP SP3,我也就在这个系统上把程序调试成功后再给大家讲解。编程环境,我还是喜欢Visual C++  6.0
本书计划从四个大的方面来讲,这四个方面是:窗口类、文件操作类、网络类、数据库类。
都是时下流行的编程必备技术,也是软件开发者,必须掌握的技术。中间以实例讲解,逐步学习,相信大家看完后会有很大的提高的。
第一章 窗口类程序的编写
这一章就先来讲解下窗口类程序的编写。因为现在程序没有界面,就像人没有脸面一样,而且好的界面更能吸引人。从基本的界面开始,相信能给大家指明出一条路的,使大家很容易地掌握窗口序的编写。其实界面设计利用VC 6.0 MFC,很容易地制作出来。这里从底层开始写代码来写界面程序,使大家知道一些底层的东西,为以后学习打下好的基础,相信您学了这些,再用VC MFC会得心应手的。
1.1 C 写的第一个一个窗口程序
  作为编程的开始,我们还是以一个Hello World来开始我们的学习之旅。代码如下:
  #include <stdio.h>
 
  void main()
{
    printf("Hello World!");
}
这是一个再简单不过的C程序了,只要有点C语言的知识就能够懂的,不过这里估计还有些人,到现在还不知道#include <stdio.h>中的头文件stdio.h到底是什么东西,我就来说下了,stdio.h是一个文本文件,存在于磁盘上的,已VC为例它的位置如下图:
也许你听说过printf()函数是在stdio.h中预定义的,但是你见过其定义的形式没有,没有且看下图
其定义形式,就如图中所示,也许你并不懂前面那些东西是什么,不用担心,以后我会慢慢解释给大家的。函数是先定义才能使用的,所以stdio.h中定义printf函数,我我们在引用了stdio.h头文件后就可以在程序中调用printf函数了。
上面是在命令行中显示一个“Hello World!,没什么意思,下面我写一个窗口程序,显示个Hello World!
#include <windows.h>
void main()
{
    MessageBox(NULL," Hello World!","我的第一个窗口程序",MB_OK);
}
编译运行后如下图:
弹出的是一个对话框,上面有Hello World,还有一个标题和一个“确定”按钮。
当然你会说这对话框也算个窗口吗?这里肯定的告诉你:是的,对话框是窗口程序的一个子集。你可能还会这样问,这样一个简单的窗口有啥用呢,其实这样的窗口非常有用,我们在操作计算机的时候,会出现一些警告或提示的对话框,都是基本是这种方法写出来的。就算是这个很简单,学习本来不就是由易向难,由浅显深奥去的过程吗。
整个效果几乎就是靠一个函数MessageBox的功劳。这里也先不介绍这个函数了,说些其他的。
c编程网其实用C编写一些程序,就是把编程环境中所提供的一些函数熟悉了基本就可以了。用VC来写成序,其中的头文件有很多,定义了很多Windows API 函数 、数据结构、宏,可以让我们大家运用,通过它们,我们可以快速开发出使用的程序。这些Windows API在微软的MSDN上查,上面有很多说明,部分还有代码示例。不会是可以输入函数名,查相关信息,建议大家用英文版的Library,因为其内容比中文版的全面,英语不好的同学呢,就先看中文了
中文MSDN: msdn.microsoft/library/zh-cn/
英文MSDN: msen.micorsoft/library/en-us/
到这里,我们就完成第一个有界面程序的编写,你感觉写有界面的程序难吗?显然不难。
下面看一个向锋和波波感兴趣的程序:九九乘法
采用命令行形式
#include stdio.h
int main()
{
int i=0,j=0;
for(i=1;i<10;i++)
    for(j=1;j<i+1;j++)
        printf(%d*%d=%d \t,j,i,j*i);
    printf(\n);
}
和那个javascript效果都是一样的,所以语言只要学好一样,其他的就很容易旁通的,学习就捡一种学好,不要贪多。
好的,这一节就这样吧,大家先各自了解下微软的MSDN,对以后的学习会有很大的帮助的。
1.2 第一个真正的窗口程序
上一节中,我们用MessageBox函数轻松地实现了一个对话框窗口,可能你会说,那仅仅是个没有用的对话框而已,是的,只是对话框而已。我之所以以一个对话框为例呢,是因为我只是想让你知道写一个有界面的程序并不是件难办的事。明白了这一点后,我们继续。今天来编写一个真正的窗口程序。
下面就该罗嗦一段了,由于大家以前并没有写过什么窗口程序,写的都是命令行下的,我们知道在命令行下的程序都有一个主函数main,这个函数也就是程序的入口函数。我们现在用VC 6.0来写,而且要写窗口类程序,VC 6.0给我们提供了一个专门用作窗口类程序的入口函
WinMain()
这个函数原型是这样的
int WINAPI WinMain(
  HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
  LPSTRlpCmdLine,
  int nCmdShow
);
大家是不是感觉这个函数挺复杂的,有这么几个参数,而像main好像就没有参数。其实main是有参数,这个向锋和小四是知道了的。但是main函数的参数是可以省略的,而WinMain是不可以省的。这里也要对VC 6.0的编译模式改下
看下图
依次是Project”→“Settings”→“Link,在Project Options里把console改为windows就可以了。如果认真学了汇编,或是手写命令编译连接过C程序,就会知道这是干什么的。Console是控制台的意思,以前我们用mian函数写的程序都是以控制台模式连接的,所以很少会有界面的。现在我们要写有界面的程序,所以要选Windows(窗口)模式了。
我们写入以下代码,并按照上面说的方法去做,看看结果
#include "windows.h"
int WINAPI WinMain(HINSTANCE hInstance,
                  HINSTANCE hPreInstance,
                  LPSTR lpCmdLine,
                  int nShowCmd)
{
    MessageBox(NULL,"WinMain创建的窗口程序","WinMain",MB_OK);
    return 0;
}
结果如下图:
与第一节中的这段代码代码比较下
#include windows.h
void main()
{
    MessageBox(NULL," Hello World!","我的第一个窗口程序",MB_OK);
}
两者比较下,后者多了个cmd窗口。可见用main写的并没有完全脱离命令行呀。所以以后我
们写窗口程序就用winmain了。
好了,转过来,我们来看看WinMain()函数,其中有4个参数
先看下解释(看不明白得先看完):
hInstance:应用程序当前事例的句柄。
hPrelnstance:应用程序的先事例的句柄。对于同一个程序打开两次,出现两个窗口第一次打开的窗口就是先前实例的窗口。对于一个32的位程序,该参数总为NULL
lpCmdLine:指向应用程序命令行的空字符串的指针,不包括函数名。获得整个命令行,参看GetCommandLine
nCmdShow:指明窗口如何显示(是隐藏还是显示,有没有最大化按钮之类的)。取值可以参考MSDN