窗口用c语言做win32程序(c语言设计qq登录界面)

wb qq com  时间:2021-02-22  阅读:()

C语言的基本语法我是不打算再提了很多C语言编程的书就是将一些基本的数据类型、数据结构、语法然后就是一些数值

计算的实例大多数都是雷同的难免有抄袭之嫌而且页没有多少实用价值。

本书以实用实例作为编程指导指引大家编写真正实用的程序。了解到大家对黑客程序、病毒、窗口类程序比较感兴趣 因此我就拿这些实例进行讲解。基于大家基本都用Windows XP SP3我也就在这个系统上把程序调试成功后再给大家讲解。编程环境我还是喜欢Visual C++6.0

本书计划从四个大的方面来讲这四个方面是窗口类、文件操作类、 网络类、数据库类。

都是时下流行的编程必备技术也是软件开发者必须掌握的技术。中间以实例讲解逐步学习相信大家看完后

会有很大的提高的。

第一章窗口类程序的编写

这一章就先来讲解下窗口类程序的编写。因为现在程序没有界面就像人没有脸面一样而且好的界面更能吸引人。从基本的界面开始相信能给大家指明出一条路的使大家很容易地掌握窗口序的编写。其实界面设计利用VC 6.0的MFC很容易地制作出来。这里从底层开始写代码来写界面程序使大家知道一些底层的东西为以后学习打下好的基础相信您学了这些再用VC的M F C会得心应手的。

1.1

用C写的第一个一个窗口程序

作为编程的开始我们还是以一个Hello World来开始我们的学习之旅。代码如下

#include<stdio.h>void main()

{printf("Hello World!") ;

}

这是一个再简单不过的C程序了只要有点C语言的知识就能够懂的不过这里估计还有些人到现在还不知道#include

<st di o.h>中的头文件st di o.h到底是什么东西我就来说下了 st dio.h是一个文本文件存在于磁盘上的已VC为例它的位臵如下图

也许你听说过pri ntf 函数是在st dio.h中预定义的但是你见过其定义的形式没有没有且看下图

其定义形式就如图中所示也许你并不懂前面那些东西是什么不用担心以后我会慢慢解释给大家的。函数是先定义才能使用的所以stdio.h中定义printf函数我我们在引用了stdio.h头文件后就可以在程序中调用printf函数了。

上面是在命令行中显示一个“Hello World!” ,没什么意思下面我写一个窗口程序显示个Hello World!

#include<windows.h>

void main()

{

MessageBox(NULL,"H ello World!","我的第一个窗口程序",MB_OK) ;

}

编译运行后如下图

弹出的是一个对话框上面有Hello World还有一个标题和一个“确定”按钮。

当然你会说这对话框也算个窗口吗这里肯定的告诉你是的对话框是窗口程序的一个子集。你可能还会这样问这样一个简单的窗口有啥用呢其实这样的窗口非常有用我们在操作计算机的时候会出现一些警告或提示的对话框都是基本是这种方法写出来的。就算是这个很简单学习本来不就是有易向难有浅显深奥去的过程吗。

整个效果几乎就是靠一个函数MessageBox的功劳。这里也先不介绍这个函数了说些其他的。

其实用C编写一些恶程序就是把编程环境中所提供的一些函数熟悉了基本就可以了。用VC来写成序其中的头文件有很多定义了很多Windows API函数、数据结构、宏可以让我们大家运用通过它们我们可以快速开发出使用的程序。这些Windows API在微软的MSD N上查上面有很多说明部分还有代码示例。不会是可以输入函数名查找相关信息建议大家用英文版的Li brary 因为其容比中文版的全面英语不好的同学呢就先看中文了

中文MSDN:msdn.microsoft./library/zh-cn/

英文MSDN:msen.micorsoft./library/en-us/

到这里我们就完成第一个有界面程序的编写你感觉写有界面的程序难吗显然不难。

下面看一个向锋和波波感兴趣的程序九九乘法

采用命令行形式

#include “stdio.h”int i=0,j=0;for(i=1;i<10;i++)for(j=1;j<i+1;j++)pri ntf( “%d*%d=%d\t” ,j,i,j*i) ;printf( “\n” ) ;

和那个j avascri pt效果都是一样的所以语言只要学好一样其他的就很容易旁通的学习就捡一种学好不要贪多。好的这一节就这样吧大家先各自了解下微软的MSDN对以后的学习会有很大的帮助的。

1.2 第一个真正的窗口程序

上一节中我们用MessageBox函数轻松地实现了一个对话框窗口可能你会说那仅仅是个没有用的对话框而已是的只是对话框而已。我之所以以一个对话框为例呢是因为我只是想让你知道写一个有界面的程序并不是件难办的事。明白了这一点后我们继续。今天来编写一个真正的窗口程序。

下面就该罗嗦一段了由于大家以前并没有写过什么窗口程序写的都是命令行下的我们知道在命令行下的程序都有一个主函数main这个函数也就是程序的入口函数。我们现在用VC 6.0来写而且要写窗口类程序VC 6.0给我们提供了一个专门用作窗口类程序的入口函数WinMain()

这个函数原型是这样的int WINAPI WinMain(

HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR l pC mdLin e,int nCmdShow

) ;

大家是不是感觉这个函数挺复杂的有这么几个参数而像main好像就没有参数。其实main是有参数这个向锋和小四是知道了的。但是main函数的参数是可以省略的而WinMain是不可以省的。这里也要对VC 6.0的编译模式改下

看下图

依次是“工程”→“设臵”→“连接” 在“工程选项”里把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,"H ello World!","我的第一个窗口程序",MB_OK) ;

}

两者比较下后者多了个cmd窗口。可见用main写的并没有完全脱离命令行呀。所以以后我们写窗口程序就用winmain了。

好了转过来我们来看看WinMain()函数其中有4个参数

先看下解释看不明白得先看完 hInstance应用程序当前事例的句柄。hPrelnstance应用程序的先事例的句柄。对于同一个程序打开两次 出现两个窗口第一次打开的窗口就是先前实例的窗口。对于一个32的位程序该参数总为NULL。lpCmdLine指向应用程序命令行的空字符串的指针不包括函数名。获得整个命令行参看GetCommandLine。nCmdShow指明窗口如何显示是隐藏还是显示有没有最大化按钮之类的 。取值可以参考MSDN这里我相信有一个词大家好应该比较陌生句柄(HANDLE)是吧。下面我就来简单的说下

句柄其实就是Windows系统中一个东西的唯一标识。就是系统中有很多运行的程序或者资源之类的为了更好的管理使用Windows系统给它们每人一个ID一样。懂得网页制作的人应该知道网页中各个元素的ID吧 网页的ID如果重复话可能出现错误。那么系统的句柄会不会有相同的那是肯定不会有的了就和我们的学号一样系统自动分配每一个模块的句柄是不会相同的了。

对于句柄大家可以先这样理解着不用一下子搞懂得。 以后学着学着就明白了。

估计大家对那几个参数的类型改犯迷糊了吧。其实那几个类型并不是什么新类型都是Windows开发人员为了自己和他人编程方便 同过基本的C语言语法定义一种新的结构体或者是共同体再者就是枚举类型。我知道结构体、共同体和枚举类型很多老师是没有讲到的 因为在书的后边很多教C的又是很垃圾的老师所以不会讲那么快的。其实结构体这些数据类型就是通过我们常用的字符、整型、浮点等数据类型构造一个比较复杂的类型而已举个例子就是我们知道C没有一个数据类型可以描述一个人吧那么我构造一个是不是很方便我们编程呢。我们可以这样构造一个struct People

{int age;//年龄char sex[2] ;//性别int height;//身高

……

}

我们这样定义以后就可以在我们以后的程序中利用这个数据类型了 People zhangsan;把zhangsan的身高172放到zhangsan.height中。这样可以方便完成很多工作。所以结构体是很简单的还有其他的复杂数据类型也是很简单的都是有常用的简单的类型来结合到一起构造一个复杂的而已。这和JAVA定义类是很相似的 java定义个人类不是可以这样的public class People

{public int age;public string sex;public height;

……

}

看起来都差不多而且用法也很相像。唯一的差别其实就是类可以有方法而结构体是没有的经过特殊处理也是可以的这里不用考虑 。

上面是为了让大家了解下复杂数据类型的定义罗嗦了一大堆。下面来看下WinMain中第一个参数的类型HINSTANCE这个只是个结构体而已实际上和HANDLE这个类型差不多但是有一点差别而HANDL

E是这样typedef PVOID HANDLE;定义的 PVOID是什么呢我们来看下typedef void*PVOID;说明PVOID是一个指针初始指向空vo i d 。因此可以知道句柄也是个指针而已。看着这么复杂原来也只是指针。

这些都可以在微软的msdn上查得到的而且很详细的

那个第二个L P S TR根据字面上的意思就知道是字符串类型了。查一查果然是。

大家一定要利用好msdn很有用的。

本节就到此结束了主要是说明了一个WinMain函数和结构体的事情东西也不算太多大家应该能接受得了吧。下节就来点复杂点深点的东西希望大家做好心理准备。

1.3 窗口程序的编写

在来啰嗦之前希望大家能够做好准备这一节知识有点多容有点长。但愿大家能够一口气读完如果一口气

读不完那就换口气接着读。

上节中我们用MessageBox()就实现了一个真正的窗口。 MessageBox()中的原型如下

Int MessageBox(HWND hWnd,

LPCTSTR lpText,

LPCTSTR lpCaption,

UINT uType) ;

参数解释hWnd 所属对话框所属窗口的句柄如果是NULL则此对话框不属于任何一个窗口。lpText 对话框窗口的显示容。lpCaption 对话框窗口的标题。uType 对话框的样式和动作像是确定按钮还是取消按钮就是设臵这里的

关于这个函数的细节可以看这里msdn.micro soft./en-us/library/ms645505(VS.85) .aspx

MessageBox() 

显示一个模态对话框,包含了的系统图标,一套按钮和一个简短的应用程序特有的信息,比如状态或者错误信息。留言版返回一个整数价值用户按钮显示了。

到此为止你也算是会了窗口程序的编写但只是一个开始不过这已经很好可能会让你感觉到了C的魅力也可能会稍微解点C语言能干什么的疑惑。在开始写代码之前我有必要把细节和原理先说明下。

Windows下一个窗口创建的过程有以下几个步骤

1. 程序创建一个窗口首先要向Windows系统注册一个窗口类wndclassex其实就是定义一个变量变量

的 类 型 是 WNDCLASSEX( 结 构 体 ) 。 该 结 构 体 的 定 义 与 介 绍 看 这 里

(msdn.mi cro so ft./en-us/li brary/ms 633577(VS.85) .aspx) typedef struct {

UINT cbSize;

UINT style;

WNDPROC lpfnWndProc;int cbClsExtra;int cbWndExtra;

HINSTANCE hInstance;

HICON hIcon;

HCURSOR hCursor;

HBRUSH hbrBackground;

LPCTSTR lpszMenuNam e;

LPCTSTR lpszClassName;

HICON hIconSm;

}WNDCLASSEX, *PWNDCLASSEX;

成员介绍cbSize 值为sizeof(WNDCLASSEX) ,在调用GetClassInfoEx前必须要先设臵它值。style 窗口类的样式它的值可以是窗口样式值的任意组合。

可以有以下的值lpf nWndProc 指向窗口处理函数回调函数 。处理窗口事件像单击鼠标会怎样右击鼠标会怎样都是由此函数控制的。cbClsExtra 为窗口类的额外信息做记录系统初始化为0。cbWndExtra记录窗口实例的额外信息系统初始为0.如果程序使用WNDCLASSEX注册一个从资源文件里创建的对话框则此参数必须设臵为DLGWINDOWEXTRAhIcon 窗口类的图标为资源句柄如果设臵为NULL系统将为窗口提供一个默认的图标。hCursor窗口类的鼠标样式为鼠标样式资源的句柄如果设臵为NULL系统提供一个默认的鼠标样式。hbrBackground窗口类的背景刷为背景刷句柄也可以为系统颜色值如果颜色值已给出则必须转化为以下的HBRUSH的值

 CO LO R_ACTIVEBO RD ER

 CO LO R_ACTIVE CAPTIO N

 CO LO R_APPWO RKSPACE

 COLOR_BACKGROUND

 CO LO R_BTNFACE

 COLOR_BTNSHADOW

 CO LO R_BTNTEXT

 CO LO R_CAPTIO NTEXT

 CO LO R_GRAYTEXT

 COLOR_HIGHLIGHT

 CO LO R_H IGH LIGHTTEXT

 CO LO R_INACTIVEBO RD ER

 CO LO R_INACTIVECAPTIO N

 COLOR_MENU

 CO LO R_MENUTEXT

 CO LO R_SCRO LLBAR

 COLOR_WINDOW

 COLOR_WINDOWFRAME

 CO LO R_WIND OWTEXTlpszM enuName 指向一个以NULL结尾的字符床 同目录资源的名字一样。如果使用整型id表示菜单可以用MAKEINTRESOURCE定义一个宏。如果它的值为NULL,那么该类创建的窗口将都没有默认的菜单。lpszClassName 窗口类的名字字符串类型。hIconSm 小图标的句柄在任务栏显示的图标可以和上面的那个一样。

定义一个WNDCLASSEX类型变量后在给变量成员初始化后我们就可以用

RegisterWindowEx(&wndclassex)来注册这个窗口类了。

这个注册过程就和我们平常创建一个项目一样都要先注册才能创建。

2. 创建窗口

这一步很简单就是利用CreateWindowEx()函数来创建就是了。

CreateWindowEx函数的原型如下:

HWND CreateWindowEx(

DWORD dwExStyle,

LPCTSTR lpClassName,

LPCTSTR lp Win do wName,

DWORD dwStyle,int x,int y,int n Width,

美国Cera 2核4G 20元/45天 香港CN2 E5 20M物理机服务器 150元 日本CN2 E5 20M物理机服务器 150元 提速啦

提速啦 成立于2012年,作为互联网老兵我们一直为用户提供 稳定 高速 高质量的产品。成立至今一直深受用户的喜爱 荣获 “2021年赣州安全大赛第三名” “2020创新企业入围奖” 等殊荣。目前我司在美国拥有4.6万G总内存云服务器资源,香港拥有2.2万G总内存云服务器资源,阿里云香港机房拥有8000G总内存云服务器资源,国内多地区拥有1.6万G总内存云服务器资源,绝非1 2台宿主机的小商家可比。...

TmhHost 全场八折优惠且充值返10% 多款CN2线路

TmhHost 商家是一家成立于2019年的国人主机品牌。目前主营的是美国VPS以及美国、香港、韩国、菲律宾的独立服务器等,其中VPS业务涵盖香港CN2、香港NTT、美国CN2回程高防、美国CN2 GIA、日本软银、韩国cn2等,均为亚太中国直连优质线路,TmhHost提供全中文界面,支持支付宝付款。 TmhHost黑五优惠活动发布了,全场云服务器、独立服务器提供8折,另有充值返现、特价服务器促销...

hosthatch:14个数据中心15美元/年

hosthatch在做美国独立日促销,可能你会说这操作是不是晚了一个月?对,为了准备资源等,他们拖延到现在才有空,这次是针对自己全球14个数据中心的VPS。提前示警:各个数据中心的网络没有一个是针对中国直连的,都会绕道而且ping值比较高,想买的考虑清楚再说!官方网站:https://hosthatch.com所有VPS都基于KVM虚拟,支持PayPal在内的多种付款方式!芝加哥(大硬盘)VPS5...

wb qq com为你推荐
有趣的广告比较有趣的广告词有哪些51自学网站网上自学网站有哪些?最好是免费的,我想学习网页设计在线漏洞检测网站好像有漏洞,直接看代码可以找出来吗?拂晓雅阁现在最流行的系统是那个???依赖注入什么是侵入性?还有依赖注入?9flashIE9flash模块异常。2012年正月十五山西省太原市2012年正月十五活动的相关情况二层交换机什么是二层交换机和三层交换机???电子商务网站模板做电子商务网站用什么cms或者模版比较好?系统分析员考系统分析员有什么好处?
域名注册服务 北京虚拟主机租用 谷歌域名邮箱 buyvm 荷兰服务器 狗爹 vultr美国与日本 vpsio 国外bt 万网优惠券 ubuntu更新源 tk域名 网站实时监控 华为4核 百兆独享 bgp双线 isp服务商 爱奇艺vip免费试用7天 傲盾官网 百度云1t 更多