资源描述:
《C语言Windows程序设计-第三天-属于自己地窗口》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用标准文案创建属于自己的窗口================== ·创建窗口前的准备 在创建窗口前我们先来熟悉几个名词, 这些名词现在可以暂时不去透彻的进行理解, 只需要印象中知道有这么回事就行。 1>. 窗口 "窗口"这个我们都已经十分熟悉了, 在Windows中, 一个应用程序窗口上一般会在标题栏上显示程序的名称, 紧挨着标题栏的菜单栏, 或许还会有状态栏、滚动条等其他"装饰品"。 2>. 控件 在一些应用程序中, 我们经常可以在程序的界面上(窗口)看到一些按钮(Push Button)、文本框(Text Box)、列表框(List Box)、滚动条(Scr
2、oll Bar)等, 这些对象通常被称为控件, 在《Windows程序设计》一书中, 还被称为"子窗口"、"控件窗口"或"子窗口控件"。文档大全实用标准文案 3>. 窗口类 在建立一个窗口前, 我们必须首先注册一个"窗口类"(Windows Class), 接触过面向对象的朋友应该会首先想到面向对象当中的"类", 但是, 这里"窗口类"中的"类"并不是指面向对象当中的那个"类"。 在这里我们可以把"窗口类"理解为一个结构体, 结构体的成员就是窗口的一些属性, 例如窗口的标题是什么、窗口使用什么样的小图标以及窗口的风格之类的属性, 一个窗口就是一个结构体的对象, 结构
3、体成员的属性决定着窗口的属性。 4>. 消息循环 在Windows程序设计中, 消息循环是个不得不提的概念, Windows操作系统是以消息驱动的, 消息队列是指在一个应用程序运行时, Windows操作系统会为该应用程序建立一个"消息队列", 这个消息队列用来存放该程序可能创建的各种窗口的消息, 当用户对应用程序进行操作时, 例如点击一个按钮、调整下窗口的大小等, 此时Windows会立即把这一消息告诉应用程序, 使应用程序能作出相应的动作。文档大全实用标准文案 笔者觉得有比较强调一下上一段中的最后一句"此时Windows会立即把这一消息告诉应用程序, 使应用程序
4、能作出相应的动作。", 我们在创建一个应用程序时, 不用想着什么时候才能从用户那得到指令, 因为操作系统会即时告诉我们用户此时是否对程序进行了操作, 对于没有接触过Windows编程的朋友们这点可能有点难以理解, 简单来说就是像如何获取一个按钮是否被单击, 或者如何获取用户此时是否在调整窗口大小之类的代码Windows已经帮我们完成了, 我们只需要等待着Windows给我们发消息就行, 如何判断消息类型以及处理这些消息, 在代码上通常我们用while配合一个巨大的switch来完成,。 5>. 窗口的过程函数 当一个窗口建立之后, 就可以从Windows那里不断的接收
5、到Windows发来的消息, 接收到消息后我们就需要一个函数来处理这些消息, 可以简单的理解为, 这个用来处理接收到的消息的函数就称为窗口过程函数或者回调函数。 下面我们来尝试着看一个创建一个基本窗口的代码。 ·尝试创建自己的窗口文档大全实用标准文案代码如下:#includeLRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//声明用来处理消息的函数intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiC
6、mdShow){staticTCHARszAppName[]=TEXT("MyWindow");HWNDhwnd;MSGmsg;WNDCLASSwndclass;//声明一个窗口类对象//以下为窗口类对象wndclass的属性wndclass.style=CS_HREDRAW
7、CS_VREDRAW;//窗口样式wndclass.lpszClassName=szAppName;//窗口类名wndclass.lpszMenuName=NULL;//窗口菜单:无wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH)
8、;//窗口背景颜色wndclass.lpfnWndProc=WndProc;//窗口处理函数wndclass.cbWndExtra=0;//窗口实例扩展:无wndclass.cbClsExtra=0;//窗口类扩展:无wndclass.hInstance=hInstance;//窗口实例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//窗口最小化图标:使用缺省图标wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口采用箭头光标if(!Regist