精华内容
下载资源
问答
  • 2021-07-25 00:42:31

    对于很多还未接触或者还不知道 Windows 7 系统考试内容的同学来说 Windows 7以“窗口”的形式来区分各个程序的工作区域,用户打开计算机、磁盘驱动器、文件夹,或是一个应用程序,系统会打开一个窗口,用于执行相应的工作。这些窗口的组成大同小异,以“计算机”窗口为例,对窗口的组成作如下说明。

    17cdb465ef4cfe4ecfb4dab7c8318aa6.png

    1、最大方是标题栏,通过标题栏可以进行移动窗口、改变窗口的大小和关闭窗口操作,标题栏最右端显示“最小化”、“最大化”、“关闭” 3个按钮。

    2、标题栏下是地址栏,用于显示和输入当前浏览位置的详细路径信息。

    3、地址栏右边是搜索栏:用于在计算机中搜索各种文件。

    4、地址、标题栏下是工具栏,相当于Windows XP系统里的菜单栏和工具栏的结合。前边(左边)是菜单,后边是(右边)一些基本工具。

    5、工具栏下左边是导航窗格,导航窗格给用户提供了树状结构文件夹列表,从而方便用户快速定位所需的目标,其主要分成收藏夹、库、计算机、网络等4大类。

    6、工具栏下左边是窗口工作区:用于显示主要的内容,如多个不同的文件夹、磁盘驱动等。它是窗口中最主要的组成部分。

    7、最下方是详细信息窗格(状态栏),用于显示当前操作的状态及提示信息,或当前用户选定对象的详细信息。

    以上就是windows7窗口的主要组成部分有哪些的详细内容讲解啦,希望可以帮助到还不了解该内容的用户哦。

    更多相关内容
  • 这些系统都是一个个窗口组成的?那么,什么是窗口呢?举个简单的例子,比如双击我的电脑之后,就打开了一个窗口,如下图所示。下面,就让我们一起来学习关于电脑窗口的相关知识吧。1、窗口的组成1)边框和工作区 每...

    现在,很多的操作系统都是视窗操作系统,比如:Windows、linux、iOS等。这些系统都是由一个个窗口组成的?那么,什么是窗口呢?举个简单的例子,比如双击我的电脑之后,就打开了一个窗口,如下图所示。下面,就让我们一起来学习关于电脑窗口的相关知识吧。

    86282b1e5b82695e2e87d9d9cc5d6ff8.png

    1、窗口的组成

    1)边框和工作区 每个窗口都有四个边,将鼠标移到边上,指针会变成双箭头

    16d89af9b3715245bc831d58766d06a7.png,这时拖动就可以改变窗口的大小,中间就是工作区;

    2)标题栏 每个窗口最上面都有一个蓝色的长条,这是窗口的标题,称作标题栏,在标题栏的左边是窗口的名称,最右边是三个按钮图标

    311941b3681c8b0a3f5d1361b67eb4fd.gif

    从图标上可以看出,第一个是最小化,中间是最大化,第三个就是关闭了,将鼠标移到标题栏上,然后拖动标题栏可以移动这个窗口;

    47fa9cfe672e9179cfe9498ef8970dc8.gif

    3)菜单栏 在标题栏的下方是菜单栏,每个菜单都有一个文字名称,单击一下会出来一个下拉菜单,第一个是“文件”菜单,第二个是“编辑”菜单,里面都有相关的命令,记住文件菜单里有“保存”和“另存为”命令,编辑里有“复制”和“粘贴”命令;

    f35fe7c123b1aec0b1de8825b487a136.gif

    4)工具栏 菜单栏的下方有一排按钮,它们是最常用的一些菜单命令,都是用按钮图标来表示,图标比文字更形象一些,操作也更简便,  记住后退按钮

    90a1c018a39b933004f65638489cd5c8.gif

    cc61621256a45d8215fac83bace1adf4.gif

    5)地址栏 在工具栏的下方有一个白色的长条,里面是当前的位置,长条右边有一个黑色的三角按钮

    2014070410225432.gif,单击它,可以选择其他的位置;

    d9f51899c332df37dea94e5a434baf2b.gif

    6)工作区 窗口中的空白区域就是工作区,里面可以放文件和文件夹,在“我的电脑”窗口中放的是磁盘,方形盒子形状的是逻辑硬盘,一个光盘形状的是光驱,

    不同的窗口中工作区也不同,例如在“记事本”窗口中可以输入文字,在“画图”程序窗口中可以绘画;

    7)滚动条 在窗口的右边和底边有时会出现一个长条上下是两个黑箭头,这就是滚动条,单击黑箭头或者拖动滚动条,窗口中遮挡的内容就会显现出来;

    fe806ba3d4031e6d2c62bcde55635a04.gif

    8)常见任务 在窗口左侧,显示了一些常用的操作,可以方便的切换到其他位置;

    a62ab15e299f014c69ea6184bddd7817.gif

    练习:

    1、双击“我的电脑”图标,打开“我的电脑”窗口,瞄准标题栏把它拖到右边,再移到中间,最小化窗口、最大化窗口,然后再还原;

    2、记住窗口的各个组成部分的名称和作用;

    3、打开“我的电脑”窗口中“(C:)”盘,看一下窗口中的内容,单击工具栏上的“向上”按钮,回到“我的电脑”,再打开“(D:)”盘,看一下窗口中的内容,点“向上”按钮,回到“我的电脑”;

    4、看一下地址栏中的内容,确定当前的位置,单击黑色的下拉按钮,在出现的下拉列表中单击“我的文档”文件夹,看一下窗口发生的变化,单击“后退”按钮返回原位;

    5、找一个窗口有滚动条的窗口,拖动一下滚动条,再单击上下的黑三角按钮看看有什么不同?

    结束语:窗口这个概念其实不难,几乎每个程序都是一个窗口,我们也是通过这些窗口跟操作系统进行交互的。

    展开全文
  • Windows窗口组成与性质.docx
  • windows窗口种类,组成,基本操作.docx
  • 98窗口组成及操作 教学内容 windows 98窗口组成及操作 教学目的1使学生掌握windows 95窗口操作的有关知识 2培养学生学习计算机的兴趣 3培养学生主动发现问题解决问题的能力 教学重点窗口组成及其基本操作 课的...
  • 其中的主要概念就是窗口类(window class),一个窗口类就是一个有关窗口的规范,这个规范定义了几个主要窗口的元素,如:图标、光标、背景色、和负责处理该窗口的函数。您产生一个窗口时就必须要有这样的一个窗口...

    跟我一起学图形编程

    a4fbdc5db31359b745b2590eb579077b.png                              作者:姚明联系方式:

    欢迎使用我的图形学教程。我是计算机专业的学生,对图形图像技术有浓厚的兴趣,就读期间广泛的涉及相关知识,但始终没有深入研究。原因很简单,我认为广度可以决定深度,大学期间应博学,不宜专于细节。现在毕业了,我选择了图形学作为自己深入研究的方向。

    关于图形学,我也算是初学者,也许,与大家不同的是,在深入研究之前,我做了充分的知识准备,我计划从点的绘制开始,实现一套完整的三维渲染流水线。朋友们,跟我一起学吧,让我们披荆斩棘,一起攀上这座美丽的高峰!

    下面,开始我们的第一步,创建一个windows下的窗口程序。

    理论:

    Windows程序中,在写图形用户界面时需要调用大量的标准Windows Gui函数。其实这对用户和程序员来说都有好处,对于用户,面对的是同一套标准的窗口,对这些窗口的操作都是一样的,所以使用不同的应用程序时无须重新学习操作。对程序员来说,这些Gui源代码都是经过了微软的严格测试,随时拿来就可以用的。当然至于具体地写程序对于程序员来说还是有难度的。为了创建基于窗口的应用程序,必须严格遵守规范。作到这一点并不难,只要用模块化或面向对象的编程方法即可。

    下面我就列出在桌面显示一个窗口的几个步骤:

    得到您应用程序的句柄(必需);

    得到命令行参数(如果您想从命令行得到参数,可选);

    注册窗口类(必需,除非您使用Windows预定义的窗口类,如MessageBox或dialog box;

    产生窗口(必需);

    在桌面显示窗口(必需,除非您不想立即显示它);

    刷新窗口客户区;

    进入无限的获取窗口消息的循环;

    如果有消息到达,由负责该窗口的窗口回调函数处理;

    如果用户关闭窗口,进行退出处理。

    相对于单用户的DOS下的编程来说,Windows下的程序框架结构是相当复杂的。但是Windows和DOS在系统架构上是截然不同的。Windows是一个多任务的操作系统,故系统中同时有多个应用程序彼此协同运行。这就要求Windows程序员必须严格遵守编程规范,并养成良好的编程风格。

    Windows中的文本是一个GUI(图形用户界面)对象。每一个字符实际上是由许多的像素点组成,这些点在有笔画的地方显示出来,这样就会出现字符。这也是为什么我说“绘制”字符,而不是写字符。通常您都是在您应用程序的客户区“绘制”字符串(尽管您也可以在客户区外“绘制”)。Windows下的“绘制”字符串方法和Dos下的截然不同,在Dos下,您可以把屏幕想象成85 x 25的一个平面,而Windows下由于屏幕上同时有几个应用程序的画面,所以您必须严格遵从规范。Windows通过把每一个应用程序限制在他的客户区来做到这一点。当然客户区的大小是可变的,您随时可以调整。

    在您在客户区“绘制”字符串前,您必须从Windows那里得到您客户区的大小,确实您无法像在DOS下那样随心所欲地在屏幕上任何地方“绘制”,绘制前您必须得到Windows的允许,然后Windows会告诉您客户区的大小,字体,颜色和其它GUI对象的属性。您可以用这些来在客户区“绘制”。

    什么是“设备环境”(DC)呢? 它其实是由Windows内部维护的一个数据结构。一个“设备环境”和一个特定的设备相连。像打印机和显示器。对于显示器来说,“设备环境”和一个个特定的窗口相连。

    “设备环境”中的有些属性和绘图有关,像:颜色,字体等。您可以随时改动那些缺省值,之所以保存缺省值是为了方便。您可以把“设备环境”想象成是Windows为您准备的一个绘图环境,而您可以随时根据需要改变某些缺省属性。

    当应用程序需要绘制时,您必须得到一个“设备环境”的句柄。通常有几种方法。

    在WM_PAINT消息中使用call BeginPaint

    在其他消息中使用call GetDC

    call CreateDC建立你自己的DC

    您必须牢记的是,在处理单个消息后你必须释放“设备环境”句柄。不要在一个消息处理中获得“设备环境”句柄,而在另一个消息处理中在释放它。

    我们在Windows发送WM_PAINT消息时处理绘制客户区,Windows不会保存客户区的内容,它用的是方法是“重绘”机制(譬如当客户区刚被另一个应用程序的客户区覆盖),Windows会把WM_PAINT消息放入该应用程序的消息队列。重绘窗口的客户区是各个窗口自己的责任,您要做的是在窗口过程处理WM_PAINT的部分知道绘制什么和何如绘制。

    您必须了解的另一个概念是“无效区域”。Windows把一个最小的需要重绘的正方形区域叫做“无效区域”。当Windows发现了一个”无效区域“后,它就会向该应用程序发送一个WM_PAINT消息,在WM_PAINT的处理过程中,窗口首先得到一个有关绘图的结构体,里面包括无效区的坐标位置等。您可以通过调用BeginPaint让“无效区”有效,如果您不处理WM_PAINT消息,至少要调用缺省的窗口处理函数DefWindowProc,或者调用ValidateRect让“无效区”有效。否则您的应用程序将会收到无穷无尽的WM_PAINT消息。

    下面是响应该消息的步骤:

    取得“设备环境”句柄

    绘制客户区

    释放“设备环境”句柄

    注意,您无须显式地让“无效区”有效,这个动作由BeginPaint自动完成。您可以在BeginPaint和Endpaint之间,调用所有的绘制函数。几乎所有的GDI函数都需要“设备环境”的句柄作为参数。

    内容:

    下面是我们简单的窗口程序的源代码。在进入复杂的细节前,我将提纲挈领地指出几点要点:

    您应当把程序中要用到的所有常量和结构体的声明放到一个头文件中,并且在源程序的开始处包含这个头文件。这么做将会节省您大量的时间,也免得一次又一次的敲键盘。您也可以定义您自己的常量和结构体,但最好把它们放到独立的头文件中。

    在其它地方运用头文件中定义函数原型,常数和结构体时,要严格保持和头文件中的定义一致,包括大小写。在查询函数定义时,这将节约您大量的时间;

    如果想详细系统的学习Windows编程,可以参考《windows程序设计》,

    如果你的系统中没有安装VC,或不会使用VC,我准备了精简版本,只有10MB左右,无需复杂操作,也能编译本教程中的代码,生成程序,

    如果你对下面的代码视如天书,那么请先看《谭浩强C语言教程》,务必熟读,

    1

    2f88ce130b654eb5dc6788e02dbcfc90.png

    dbf989d57862681739b642d8621fe1f0.png/**//*------------------------------------------------------------------------2df37983f39daa189b8c814e01a6a9011.png  HELLOWIN.CPP -- Displays "你好, 欢迎使用YM的图形学教程!" in client area3df37983f39daa189b8c814e01a6a9011.png                 (c) Charles Petzold, 199840ac3a2d53663ec01c7f7225264eeefae.png-----------------------------------------------------------------------*/5cbef093dcc044b2793832001e2365e43.png#include6cbef093dcc044b2793832001e2365e43.png7cbef093dcc044b2793832001e2365e43.pngLRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;8cbef093dcc044b2793832001e2365e43.png9cbef093dcc044b2793832001e2365e43.pngintWINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,10cbef093dcc044b2793832001e2365e43.png                   PSTR szCmdLine,intiCmdShow)112f88ce130b654eb5dc6788e02dbcfc90.png

    dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{12df37983f39daa189b8c814e01a6a9011.pngstaticTCHAR szAppName[]=TEXT ("HelloWin") ;13df37983f39daa189b8c814e01a6a9011.png    HWND   hwnd ;14df37983f39daa189b8c814e01a6a9011.png    MSG    msg ;15df37983f39daa189b8c814e01a6a9011.png    WNDCLASS    wndclass ;16df37983f39daa189b8c814e01a6a9011.png    wndclass.style=CS_HREDRAW|CS_VREDRAW ;17df37983f39daa189b8c814e01a6a9011.png    wndclass.lpfnWndProc=WndProc ;18df37983f39daa189b8c814e01a6a9011.png    wndclass.cbClsExtra=0;19df37983f39daa189b8c814e01a6a9011.png    wndclass.cbWndExtra=0;20df37983f39daa189b8c814e01a6a9011.png    wndclass.hInstance=hInstance ;21df37983f39daa189b8c814e01a6a9011.png    wndclass.hIcon=LoadIcon (NULL, IDI_APPLICATION) ;22df37983f39daa189b8c814e01a6a9011.png    wndclass.hCursor=LoadCursor (NULL, IDC_ARROW) ;23df37983f39daa189b8c814e01a6a9011.png    wndclass.hbrBackground=(HBRUSH) GetStockObject (WHITE_BRUSH) ;24df37983f39daa189b8c814e01a6a9011.png    wndclass.lpszMenuName=NULL ;25df37983f39daa189b8c814e01a6a9011.png    wndclass.lpszClassName=szAppName ;26df37983f39daa189b8c814e01a6a9011.png    RegisterClass (&wndclass);27df37983f39daa189b8c814e01a6a9011.png    hwnd=CreateWindow( szAppName,//window class name28df37983f39daa189b8c814e01a6a9011.pngTEXT ("The Hello Program"),//window caption29df37983f39daa189b8c814e01a6a9011.pngWS_OVERLAPPEDWINDOW,//window style30df37983f39daa189b8c814e01a6a9011.pngCW_USEDEFAULT,//initial x position31df37983f39daa189b8c814e01a6a9011.pngCW_USEDEFAULT,//initial y position32df37983f39daa189b8c814e01a6a9011.pngCW_USEDEFAULT,//initial x size33df37983f39daa189b8c814e01a6a9011.pngCW_USEDEFAULT,//initial y size34df37983f39daa189b8c814e01a6a9011.pngNULL,//parent window handle35df37983f39daa189b8c814e01a6a9011.pngNULL,//window menu handle36df37983f39daa189b8c814e01a6a9011.pnghInstance,//program instance handle37df37983f39daa189b8c814e01a6a9011.pngNULL) ;//creation parameters38df37983f39daa189b8c814e01a6a9011.pngShowWindow (hwnd, iCmdShow) ;39df37983f39daa189b8c814e01a6a9011.png    UpdateWindow (hwnd) ;40df37983f39daa189b8c814e01a6a9011.pngwhile(GetMessage (&msg, NULL,0,0))41f70a0fde2b51b7dd92a70e712e540cf6.png

    edb48e6f68462ea23d9a824f01de40c5.png918e8df969f9f8c8d002f25cda86cade.png{42df37983f39daa189b8c814e01a6a9011.png          TranslateMessage (&msg) ;43df37983f39daa189b8c814e01a6a9011.png          DispatchMessage (&msg) ;444a5daaec04350a363f186a4d2c5ed6ce.png    }45df37983f39daa189b8c814e01a6a9011.pngreturnmsg.wParam ;460ac3a2d53663ec01c7f7225264eeefae.png}47cbef093dcc044b2793832001e2365e43.pngLRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)482f88ce130b654eb5dc6788e02dbcfc90.png

    dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{49df37983f39daa189b8c814e01a6a9011.png    HDC            hdc ;50df37983f39daa189b8c814e01a6a9011.png    PAINTSTRUCT     ps ;51df37983f39daa189b8c814e01a6a9011.png    RECT          rect ;52df37983f39daa189b8c814e01a6a9011.pngswitch(message)53f70a0fde2b51b7dd92a70e712e540cf6.png

    edb48e6f68462ea23d9a824f01de40c5.png918e8df969f9f8c8d002f25cda86cade.png{54df37983f39daa189b8c814e01a6a9011.pngcaseWM_PAINT:55df37983f39daa189b8c814e01a6a9011.png            hdc=BeginPaint (hwnd,&ps) ;56df37983f39daa189b8c814e01a6a9011.png            GetClientRect (hwnd,&rect) ;57df37983f39daa189b8c814e01a6a9011.png            DrawText (hdc, TEXT ("你好, 欢迎使用YM的图形学教程!"),-1,&rect,58df37983f39daa189b8c814e01a6a9011.png                   DT_SINGLELINE|DT_CENTER|DT_VCENTER) ;59df37983f39daa189b8c814e01a6a9011.png            EndPaint (hwnd,&ps) ;60df37983f39daa189b8c814e01a6a9011.pngreturn0;61df37983f39daa189b8c814e01a6a9011.pngcaseWM_DESTROY:62df37983f39daa189b8c814e01a6a9011.png            PostQuitMessage (0) ;63df37983f39daa189b8c814e01a6a9011.pngreturn0;644a5daaec04350a363f186a4d2c5ed6ce.png    }65df37983f39daa189b8c814e01a6a9011.pngreturnDefWindowProc (hwnd, message, wParam, lParam) ;660ac3a2d53663ec01c7f7225264eeefae.png}67cbef093dcc044b2793832001e2365e43.png

    分析:

    看到一个简单的Windows程序有这么多行,您是不是有点想撤?但是您必须要知道的是上面的大多数代码都是模板而已,模板的意思即是指这些代码对差不多所有标准Windows程序来说都是相同的。在写Windows程序时您可以把这些代码拷来拷去,当然把这些重复的代码写到一个库中也挺好。其实真正要写的代码集中在WinMain中。这和一些C编译器一样,无须要关心其它杂务,集中精力于WinMain函数。唯一不同的是C编译器要求您的源代码有必须有一个函数叫WinMain。否则C无法知道将哪个函数和有关的前后代码链接。相对C,汇编语言提供了较大的灵活性,它不强行要求一个叫WinMain的函数。

    下面我们开始分析,您可得做好思想准备,这可不是一件太轻松的活。

    HELLOWIN至少呼叫了18个Windows函数。下面以它们在HELLOWIN中出现的次序列出这些函数以及各自的简明描述:

    LoadIcon加载图标供程序使用。

    LoadCursor加载鼠标光标供程序使用。

    GetStockObject取得一个图形对象(在这个例子中,是取得绘制窗口背景的画刷对象)。

    RegisterClass为程序窗口注册窗口类别。

    MessageBox显示消息框。

    CreateWindow根据窗口类别建立一个窗口。

    ShowWindow在屏幕上显示窗口。

    UpdateWindow指示窗口自我更新。

    GetMessage从消息队列中取得消息。

    TranslateMessage转译某些键盘消息。

    DispatchMessage将消息发送给窗口消息处理程序。

    PlaySound播放一个声音文件。

    BeginPaint开始绘制窗口。

    GetClientRect取得窗口显示区域的大小。

    DrawText显示字符串。

    EndPaint结束绘制窗口。

    PostQuitMessage在消息队列中插入一个「退出程序」消息。

    DefWindowProc执行内定的消息处理。

    这些函数均在Platform SDK文件中说明,并在不同的表头文件中声明,其中绝大多数声明在WINUSER.H中。

    WinMain函数共有4个参数:应用程序的实例句柄,该应用程序的前一实例句柄,命令行参数串指针和窗口如何显示。Win32没有前一实例句柄的概念,所以第二个参数总为0。之所以保留它是为了和Win16兼容的考虑,在Win16下,如果hPrevInst是NULL,则该函数是第一次运行。特别注意:您不用必须申明一个名为WinMain函数,事实上在这方面您可以完全作主,您甚至无须有一个和WinMain等同的函数。您只要把WinMain中的代码拷到GetCommandLine之后,其所实现的功能完全相同。在WinMain返回时,产生一个返回值。然后在应用程序结束时通过ExitProcess函数把该返回码传递给Windows。

    1

    cbef093dcc044b2793832001e2365e43.pngwndclass.style=CS_HREDRAW|CS_VREDRAW ;2cbef093dcc044b2793832001e2365e43.png    wndclass.lpfnWndProc=WndProc ;3cbef093dcc044b2793832001e2365e43.png    wndclass.cbClsExtra=0;4cbef093dcc044b2793832001e2365e43.png    wndclass.cbWndExtra=0;5cbef093dcc044b2793832001e2365e43.png    wndclass.hInstance=hInstance ;6cbef093dcc044b2793832001e2365e43.png    wndclass.hIcon=LoadIcon (NULL, IDI_APPLICATION) ;7cbef093dcc044b2793832001e2365e43.png    wndclass.hCursor=LoadCursor (NULL, IDC_ARROW) ;8cbef093dcc044b2793832001e2365e43.png    wndclass.hbrBackground=(HBRUSH) GetStockObject (WHITE_BRUSH) ;9cbef093dcc044b2793832001e2365e43.png    wndclass.lpszMenuName=NULL ;10cbef093dcc044b2793832001e2365e43.png   wndclass.lpszClassName=szAppName ;11cbef093dcc044b2793832001e2365e43.png   RegisterClass (&wndclass);12cbef093dcc044b2793832001e2365e43.png

    上面几行从概念上说确实是非常地简单。只要几行指令就可以实现。其中的主要概念就是窗口类(window class),一个窗口类就是一个有关窗口的规范,这个规范定义了几个主要的窗口的元素,如:图标、光标、背景色、和负责处理该窗口的函数。您产生一个窗口时就必须要有这样的一个窗口类。如果您要产生不止一个同种类型的窗口时,最好的方法就是把这个窗口类存储起来,这种方法可以节约许多的内存空间。也许今天您不会太感觉到,可是想想以前PC大多数只有1M内存时,这么做是非常有必要的。如果您要定义自己的创建窗口类就必须:在一个WINDCLASS或WINDOWCLASSEX结构体中指明您窗口的组成元素,然后调用RegisterClass或RegisterClass,再根据该窗口类产生窗口。对不同特色的窗口必须定义不同的窗口类。WINDOWS有几个预定义的窗口类,譬如:按钮、编辑框等。要产生该种风格的窗口无须预先再定义窗口类了,只要包预定义类的类名作为参数调用CreateWindow即可。

    WNDCLASS中最重要的成员莫过于lpfnWndProc了。前缀lpfn表示该成员是一个指向函数的长指针。在Win32中由于内存模式是FLAT型,所以没有near或far的区别。每一个窗口类必须有一个窗口过程,当Windows把属于特定窗口的消息发送给该窗口时,该窗口的窗口类负责处理所有的消息,如键盘消息或鼠标消息。由于窗口过程差不多智能地处理了所有的窗口消息循环,所以您只要在其中加入消息处理过程即可。下面我将要讲解WNDCLASSEX的每一个成员

    1

    2f88ce130b654eb5dc6788e02dbcfc90.png

    dbf989d57862681739b642d8621fe1f0.pngtypedefstructtagWNDCLASS918e8df969f9f8c8d002f25cda86cade.png{2df37983f39daa189b8c814e01a6a9011.png  UINT      style;3df37983f39daa189b8c814e01a6a9011.png  WNDPROC   lpfnWndProc;4df37983f39daa189b8c814e01a6a9011.pngintcbClsExtra;5df37983f39daa189b8c814e01a6a9011.pngintcbWndExtra;6df37983f39daa189b8c814e01a6a9011.png  HINSTANCE hInstance;7df37983f39daa189b8c814e01a6a9011.png  HICON     hIcon;8df37983f39daa189b8c814e01a6a9011.png  HCURSOR   hCursor;9df37983f39daa189b8c814e01a6a9011.png  HBRUSH    hbrBackground;10df37983f39daa189b8c814e01a6a9011.png  LPCTSTR   lpszMenuName;11df37983f39daa189b8c814e01a6a9011.png  LPCTSTR   lpszClassName;120ac3a2d53663ec01c7f7225264eeefae.png}WNDCLASS,*PWNDCLASS;13cbef093dcc044b2793832001e2365e43.png14cbef093dcc044b2793832001e2365e43.pngCreateWindow( szAppName,//window class name15cbef093dcc044b2793832001e2365e43.pngTEXT ("The Hello Program"),//window caption16cbef093dcc044b2793832001e2365e43.pngWS_OVERLAPPEDWINDOW,//window style17cbef093dcc044b2793832001e2365e43.pngCW_USEDEFAULT,//initial x position18cbef093dcc044b2793832001e2365e43.pngCW_USEDEFAULT,//initial y position19cbef093dcc044b2793832001e2365e43.pngCW_USEDEFAULT,//initial x size20cbef093dcc044b2793832001e2365e43.pngCW_USEDEFAULT,//initial y size21cbef093dcc044b2793832001e2365e43.pngNULL,//parent window handle22cbef093dcc044b2793832001e2365e43.pngNULL,//window menu handle23cbef093dcc044b2793832001e2365e43.pnghInstance,//program instance handle24cbef093dcc044b2793832001e2365e43.pngNULL) ;//creation parameters25cbef093dcc044b2793832001e2365e43.png

    注册窗口类后,我们将调用CreateWindow来产生实际的窗口。请注意该函数有11个参数。

    1

    cbef093dcc044b2793832001e2365e43.pngHWND WINAPI CreateWindow(2cbef093dcc044b2793832001e2365e43.png  __in_opt  LPCTSTR lpClassName,3cbef093dcc044b2793832001e2365e43.png  __in_opt  LPCTSTR lpWindowName,4cbef093dcc044b2793832001e2365e43.png  __in      DWORD dwStyle,5cbef093dcc044b2793832001e2365e43.png  __inintx,6cbef093dcc044b2793832001e2365e43.png  __ininty,7cbef093dcc044b2793832001e2365e43.png  __inintnWidth,8cbef093dcc044b2793832001e2365e43.png  __inintnHeight,9cbef093dcc044b2793832001e2365e43.png  __in_opt  HWND hWndParent,10cbef093dcc044b2793832001e2365e43.png  __in_opt  HMENU hMenu,11cbef093dcc044b2793832001e2365e43.png  __in_opt  HINSTANCE hInstance,12cbef093dcc044b2793832001e2365e43.png  __in_opt  LPVOID lpParam13cbef093dcc044b2793832001e2365e43.png);14cbef093dcc044b2793832001e2365e43.png

    我们来仔细看一看这些的参数:

    lpClassName:(必须)。ASCIIZ形式的窗口类名称的地址。可以是您自定义的类,也可以是预定义的类名。像上面所说,每一个应用程序必须有一个窗口类。

    lpWindowName:ASCIIZ形式的窗口名称的地址。该名称会显示在标题条上。如果该参数空白,则标题条上什么都没有。

    dwStyle:窗口的风格。在此您可以指定窗口的外观。可以指定该参数为零,但那样该窗口就没有系统菜单,也没有最大化和最小化按钮,也没有关闭按钮,那样您不得不按Alt+F4来关闭它。最为普遍的窗口类风格是WS_OVERLAPPEDWINDOW。 一种窗口风格是一种按位的掩码,这样您可以用“or”把您希望的窗口风格或起来。像WS_OVERLAPPEDWINDOW就是由几种最为不便普遍的风格或起来的。

    X,Y: 指定窗口左上角的以像素为单位的屏幕坐标位置。缺省地可指定为CW_USEDEFAULT,这样Windows会自动为窗口指定最合适的位置。

    nWidth,nHeight: 以像素为单位的窗口大小。缺省地可指定为CW_USEDEFAULT,这样Windows会自动为窗口指定最合适的大小。

    hWndParent: 父窗口的句柄(如果有的话)。这个参数告诉Windows这是一个子窗口和他的父窗口是谁。这和MDI(多文档结构)不同,此处的子窗口并不会局限在父窗口的客户区内。他只是用来告诉Windows各个窗口之间的父子关系,以便在父窗口销毁是一同把其子窗口销毁。在我们的例子程序中因为只有一个窗口,故把该参数设为NULL。

    hMenu:WINDOWS菜单的句柄。如果只用系统菜单则指定该参数为NULL。回头看一看WNDCLASSEX结构中的lpszMenuName参数,它也指定一个菜单,这是一个缺省菜单,任何从该窗口类派生的窗口若想用其他的菜单需在该参数中重新指定。其实该参数有双重意义:一方面若这是一个自定义窗口时该参数代表菜单句柄,另一方面,若这是一个预定义窗口时,该参数代表是该窗口的ID号。Windows是根据lpClassName参数来区分是自定义窗口还是预定义窗口的。

    hInstance: 产生该窗口的应用程序的实例句柄。

    lpParam: (可选)指向欲传给窗口的结构体数据类型参数的指针。如在MDI中在产生窗口时传递CLIENTCREATESTRUCT结构的参数。一般情况下,该值总为零,这表示没有参数传递给窗口。可以通过GetWindowLong函数检索该值。

    1

    cbef093dcc044b2793832001e2365e43.pngShowWindow (hwnd, iCmdShow) ;2cbef093dcc044b2793832001e2365e43.pngUpdateWindow (hwnd) ;

    调用CreateWindow成功后,会返回窗口句柄。我们必须保存该值以备后用。我们刚刚产生的窗口不会自动显示,所以必须调用ShowWindow来按照我们希望的方式来显示该窗口。接下来调用UpdateWindow来更新客户区。

    1

    cbef093dcc044b2793832001e2365e43.pngwhile(GetMessage (&msg, NULL,0,0))22f88ce130b654eb5dc6788e02dbcfc90.png

    dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{3df37983f39daa189b8c814e01a6a9011.png     TranslateMessage (&msg) ;4df37983f39daa189b8c814e01a6a9011.png     DispatchMessage (&msg) ;50ac3a2d53663ec01c7f7225264eeefae.png}

    这时候我们的窗口已显示在屏幕上了。但是它还不能从外界接收消息。所以我们必须给它提供相关的消息。我们是通过一个消息循环来完成该项工作的。每一个模块仅有一个消息循环,我们不断地调用GetMessage从Windows中获得消息。GetMessage传递一个MSG结构体给Windows,然后Windows在该函数中填充有关的消息,一直到Windows找到并填充好消息后GetMessage才会返回。在这段时间内系统控制权可能会转移给其他的应用程序。这样就构成了Win16下的多任务结构。如果GetMessage接收到WM_QUIT消息后就会返回FALSE,使循环结束并退出应用程序。TranslateMessage函数是一个是实用函数,它从键盘接受原始按键消息,然后解释成WM_CHAR,在把WM_CHAR放入消息队列,由于经过解释后的消息中含有按键的ASCII码,这比原始的扫描码好理解得多。如果您的应用程序不处理按键消息的话,可以不调用该函数。DispatchMessage会把消息发送给负责该窗口过程的函数。

    1

    cbef093dcc044b2793832001e2365e43.pngreturnmsg.wParam

    如果消息循环结束了,退出码存放在MSG中的wParam中,您可以通过把它放到eax寄存器中传给Windows目前Windows没有利用到这个结束码,但我们最好还是遵从Windows规范已防意外。

    1

    cbef093dcc044b2793832001e2365e43.pngLRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

    是我们的窗口处理函数。您可以随便给该函数命名。其中第一个参数hWnd是接收消息的窗口的句柄。message是接收的消息。注意message不是一个MSG结构,其实上只是一个DWORD类型数。Windows定义了成百上千个消息,大多数您的应用程序不会处理到。当有该窗口的消息发生时,Windows会发送一个相关消息给该窗口。其窗口过程处理函数会智能的处理这些消息。wParam和lParam只是附加参数,以方便传递更多的和该消息有关的数据。

    1

    cbef093dcc044b2793832001e2365e43.pngswitch(message)22f88ce130b654eb5dc6788e02dbcfc90.png

    dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{3df37983f39daa189b8c814e01a6a9011.pngcaseWM_PAINT:4df37983f39daa189b8c814e01a6a9011.png            hdc=BeginPaint (hwnd,&ps) ;5df37983f39daa189b8c814e01a6a9011.png            GetClientRect (hwnd,&rect) ;6df37983f39daa189b8c814e01a6a9011.png            DrawText (hdc, TEXT ("你好, 欢迎使用YM的图形学教程!"),-1,&rect,7df37983f39daa189b8c814e01a6a9011.png                   DT_SINGLELINE|DT_CENTER|DT_VCENTER) ;8df37983f39daa189b8c814e01a6a9011.png            EndPaint (hwnd,&ps) ;9df37983f39daa189b8c814e01a6a9011.pngreturn0;10df37983f39daa189b8c814e01a6a9011.pngcaseWM_DESTROY:11df37983f39daa189b8c814e01a6a9011.png            PostQuitMessage (0) ;12df37983f39daa189b8c814e01a6a9011.pngreturn0;130ac3a2d53663ec01c7f7225264eeefae.png}14cbef093dcc044b2793832001e2365e43.pngreturnDefWindowProc (hwnd, message, wParam, lParam) ;15cbef093dcc044b2793832001e2365e43.png

    上面可以说是关键部分。这也是我们写Windows程序时需要改写的主要部分。此处您的程序检查Windows传递过来的消息,如果是我们感兴趣的消息则加以处理,处理完后,在eax寄存器中传递0,否则必须调用DefWindowProc,把该窗口过程接收到的参数传递给缺省的窗口处理函数。所有消息中您必须处理的是WM_DESTROY,当您的应用程序结束时Windows把这个消息传递进来,当您的应用程序解说到该消息时它已经在屏幕上消失了,这仅是通知您的应用程序窗口已销毁,您必须自己准备返回Windows。在此消息中您可以做一些清理工作,但无法阻止退出应用程序。如果您要那样做的话,可以处理WM_CLOSE消息。在处理完清理工作后,您必须调用PostQuitMessage,该函数会把WM_QUIT消息传回您的应用程序,而该消息会使得GetMessage返回,并在将返回值设置0,然后会结束消息循环并退回WINDOWS。您可以在您的程序中调用DestroyWindow函数,它会发送一个WM_DESTROY消息给您自己的应用程序,从而迫使它退出。

    特别注意:下面讨论的是我们以后的课程的核心部分

    1

    cbef093dcc044b2793832001e2365e43.pngHDC            hdc ;2cbef093dcc044b2793832001e2365e43.png PAINTSTRUCT     ps ;3cbef093dcc044b2793832001e2365e43.png RECT          rect ;4cbef093dcc044b2793832001e2365e43.png

    这些局部变量由处理WM_PAINT消息中的GDI函数调用。hdc用来存放调用BeginPaint返回的“设备环境”句柄。ps是一个PAINTSTRUCT数据类型的变量。通常您不会用到其中的许多值,它由Windows传递给BeginPaint,在结束绘制后再原封不动的传递给EndPaint。rect是一个RECT结构体类型参数,它的定义如下:

    1

    2f88ce130b654eb5dc6788e02dbcfc90.png

    dbf989d57862681739b642d8621fe1f0.pngtypedefstruct_RECT918e8df969f9f8c8d002f25cda86cade.png{2df37983f39daa189b8c814e01a6a9011.png  LONG left;3df37983f39daa189b8c814e01a6a9011.png  LONG top;4df37983f39daa189b8c814e01a6a9011.png  LONG right;5df37983f39daa189b8c814e01a6a9011.png  LONG bottom;60ac3a2d53663ec01c7f7225264eeefae.png}RECT,*PRECT;7cbef093dcc044b2793832001e2365e43.png

    left 和top是正方形左上角的坐标。right和bottom是正方形右下角的坐标。客户区的左上角的坐标是x=0,y=0,这样对于x=0,y=10的坐标点就在它的下面。

    1

    cbef093dcc044b2793832001e2365e43.pnghdc=BeginPaint (hwnd,&ps) ;2cbef093dcc044b2793832001e2365e43.png      GetClientRect (hwnd,&rect) ;3cbef093dcc044b2793832001e2365e43.png      DrawText (hdc, TEXT ("你好, 欢迎使用YM的图形学教程!"),-1,&rect,4cbef093dcc044b2793832001e2365e43.png                   DT_SINGLELINE|DT_CENTER|DT_VCENTER) ;5cbef093dcc044b2793832001e2365e43.png       EndPaint (hwnd,&ps) ;6cbef093dcc044b2793832001e2365e43.png

    在处理WM_PAINT消息时,您调用BeginPaint函数,传给它一个窗口句柄和未初始化的PAINTSTRUCT型参数。调用成功后在eax中返回“设备环境”的句柄。下一次,调用GetClientRect以得到客户区的大小,大小放在rect中,然后把它传给DrawText。DrawText的语法如下:

    1

    cbef093dcc044b2793832001e2365e43.pngintDrawText(2cbef093dcc044b2793832001e2365e43.png  HDC hDC,3cbef093dcc044b2793832001e2365e43.png  LPCTSTR lpString,4cbef093dcc044b2793832001e2365e43.pngintnCount,5cbef093dcc044b2793832001e2365e43.png  LPRECT lpRect,6cbef093dcc044b2793832001e2365e43.png  UNIT uFormat);7cbef093dcc044b2793832001e2365e43.png

    DrawText是一个高层的调用函数。它能自动处理像换行、把文本放到客户区中间等这些杂事。所以您只管集中精力“绘制”字符串就可以了。我们会在下一课中讲解低一层的函数TextOut,该函数在一个正方形区域中格式化一个文本串。它用当前选择的字体、颜色和背景色。它处理换行以适应正方形区域。它会返回以设备逻辑单位度量的文本的高度,我们这里的度量单位是像素点。让我们来看一看该函数的参数:

    hdc:“设备环境”的句柄。

    lpString:要显示的文本串,该文本串要么以NULL结尾,要么在nCount中指出它的长短。

    nCount:要输出的文本的长度。若以NULL结尾,该参数必须是-1。

    lpRect: 指向要输出文本串的正方形区域的指针,该方形必须是一个裁剪区,也就是说超过该区域的字符将不能显示。

    uFormat:指定如何显示。我们可以用or把以下标志或到一块:

    DT_SINGLELINE:是否单行显示。

    DT_CENTER:是否水平居中。

    DT_VCENTER:是否垂直居中。

    结束绘制后,必须调用 EndPaint释放“设备环境”的句柄。好了,现在我们把“绘制”文本串的要点总结如下:

    必须在开始和结束处分别调用BeginPaint和EndPaint;

    在BeginPaint和EndPaint之间调用所有的绘制函数;

    如果在其它的消息处理中重新绘制客户区,您可以有两种选择:(1)用GetDC和ReleaseDC代替BeginPaint和EndPaint;(2)调用InvalidateRect或UpdateWindow让客户区无效,这将迫使WINDOWS把WM_PAINT放入应用程序消息队列,从而使得客户区重绘。

    posted on 2011-01-22 14:49 姚明 阅读(992) 评论(0)  编辑 收藏 引用 所属分类: 原创教程

    展开全文
  • Windows(一):窗口开发原理

    千次阅读 2020-02-08 21:20:20
    窗口开发原理 一:几个概念 API : 应用程序编程接口(Application Programming Interface),如同C语言的库函数一样,Windows中也有封装好的函数和接口用于操作Windows应用与操作系统即Windows API。头文件为:...

    窗口开发原理

    一:几个概念

    • API : 应用程序编程接口(Application Programming Interface),如同C语言的库函数一样,Windows中也有封装好的函数和接口用于操作Windows应用与操作系统即Windows API。头文件为:Windows.h(在VS2019中大概有一万个函数)。我们可以在离线或者在线MSDN中查阅这些API,离线MSDN下载:MSDNLibraryVisualStudio6.0
    • SDK : 软件开发包(Software Develoment Kit) 一个资源的集合包含API函数库、帮助手册、工具
    • 窗口 : 举个例子:比如我们的记事本这样有标题栏、菜单、系统菜单、滚动条、最大化、最小化窗口这样的就构成一个菜单:

    在这里插入图片描述
    另外菜单还可以分为客户区和非客户区:
    二者之间的关系是:客户区覆盖在非客户区之上,非客户区范围比客户区大在这里插入图片描述

    • 句柄 :句柄可以简单的理解为一个ID,如同身份证一样,它唯一的标识着一种资源。比如常见的窗口有窗口句柄,图标会有图标句柄,菜单会有菜单句柄,光标会有光标句柄等等。

    二:最简单的Win32程序

    (一): 包含头文件:#include<Windows.h>

    (二): 入口函数:

    与C/C++控制台程序的入口函数不同的是此处的入口函数是Winmain函数。
    

    main函数是 CUI (Console Uers Interface) 应用程序入口函数
    Winmain函数是GUI(Graphical User Interface)应用程序入口函数

    //最简单的Win32程序:
    //1.头文件:
    #include<Windows.h>
    //2.入口函数:
    int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    //3.函数体:
    	return 0;
    }
    

    调用约定 : 调用约定定义了函数的入栈方式,我们知道函数的参数和局部变量都存储在栈中。其入栈顺序为参数先入栈,然后局部变量按照声明的的先后顺序进行入栈。那么对于参数入栈时由右往左进行入栈还是由左往右进行入栈有着两个约定:__stdcall定义的函数参数入栈方式为由右向左,WindowsAPI函数采用__stdcall的方式,必须显式表示出来也即在WinMain前必须有__stdcall。而C/C++函数默认采用的是__cdecl,不用显式表现出来。
    函数的形参,局部变量存储在栈中
    通常我们更多的用__stdcall的宏替换:尤其用WINAPI
    WINAPI
    CALLBACK
    APIENTRY

    参数列表解析:

    • HINSTANCE:应用程序实例句柄类型
    • hInstance:当前应用程序 实例句柄(标识着这个exe,管理着exe的所有资源)
    • hPreInstance : 代表着前一个应用程序实例句柄。16为exe上面的一个参数,32位和64位已将将其废弃。现在默认为0值。
    • LPSTR : char *类型,指向一个C语言字符串。
    • lpCmdLine : 命令行参数
    • nCmdShow : 窗口的显示方式(最大化,最小化,隐藏等方式)

    深究HINSTANCE:
    我们由HINSTANCE转到定义:
    看出HINSTANCE为宏函数DECLARE_HANDLE的参数:
    在这里插入图片描述
    然后将宏函数DECLARE_HANDLE转到定义:
    得到:其中##是连接符号
    在这里插入图片描述
    我们将name替换为HINSTANCE:
    在这里插入图片描述
    然后将连接符##去掉,整理:
    在这里插入图片描述
    由此我们可以看出HINSTANCE是一个结构体指针,并且该结构体只有一个整型数据成员。Windows中会将指针类型进行封装,故Windows中很少见指针类型,通常以句柄来代替。

    三:消息提示框:MessageBox函数

    #include<Windows.h>
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    	MessageBox(NULL, L"我的第一个Win32应用程序", L"天津科技大学", MB_OK);
    	return 0;
    }
    

    效果:
    在这里插入图片描述
    MessageBox函数解析:
    参数:

    • 第一个参数:父窗口句柄,没有父窗口则为NULL。
    • 第二个参数:提示框的提示信息。L: 告诉编译器字符串要使用Unicode编码 好处:支持全世界各国语言,各国语言操作系统也可以用TEXT()代替。
    • 第三个参数:提示框标题
    • 第四个参数:按键和图标的结合。用 | 进行结合。 注意:按钮和图标进行组合,而不能按钮和按钮进行组合,图标和图标进行组合

    MSDN:
    按钮:在这里插入图片描述
    图标:
    在这里插入图片描述

    • 返回值:返回点击的按钮的值 IDOK(“确定”按钮),IDYES(“是”按钮),IDCANCEL(“取消”按钮), IDNO(“否”按钮)
    //示例:
    #include<Windows.h>
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    	//消息提示框
    	int nResult = MessageBox(NULL, TEXT("我的第一个win32应用程序"), TEXT("天津科技大学"), MB_ICONINFORMATION | MB_YESNOCANCEL);
    	if (IDYES == nResult)
    	{
    		MessageBox(NULL, L"点击的是“是(Y)”按钮", NULL, MB_OK);
    	}
    	else if (IDNO == nResult)
    	{
    		MessageBox(NULL, L"点击的是“否(N)”按钮", NULL, MB_OK);
    	}
    	else if (IDCANCEL == nResult)
    	{
    		MessageBox(NULL, L"点击的是取消按钮", NULL, MB_OK);
    	}
    	return 0;
    }
    

    四:第一个窗口程序

    (一):设计窗口类

    1. 首先定义一个窗口:
    //定义窗口wc:
    	WNDCLASS wc;   
    

    我们转到定义:
    看到WNDCLASS 是一个结构体类型,其中包含了一个窗口的属性。 在这里插入图片描述

    1. 为窗口wc的属性进行赋值
    • wc.style = CS_HREDRAW | CS_VREDRAW //窗口类的风格,水平重绘,竖直重绘。
    • wc.lpfnwndProc = WindowProc; //窗口处理函数(窗口回调函数)
    • wc.cbClsExtra = 0; //窗口类的附加内存
    • wc.cbWndExtra = 0; //窗口的附加内存
    • wc.hInstance = hInstance; //当前应用程序的实例句柄
    • wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_LOGO)); //没有图标就带NULL,可以用系统图标LoadIcon,第一个参数为NULL,图标句柄
    • wc.hCursor = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR)); //加载光标,光标句柄
    • wc.hbrBackground = CreateSolidBrush(RGB(0, 255, 0)); //红绿蓝 0-255 //背景画刷颜色
    • wc.lpszMenuName = NULL; //菜单名
    • wc.lpszClassName = szAppClassName;

    (二):注册窗口类

    //注册窗口类:
    	if (0 == RegisterClass(&wc))
    	{
    		MessageBox(NULL, L"此程序不能运行在Windows NT上", L"温馨提示", MB_OK | MB_ICONERROR);
    		return 0;
    	}
    

    (三):创建窗口

    	//创建窗口:
    	HWND hwnd = CreateWindow(
    		szAppClassName,                                       //窗口类型名
    		L"天津科技大学",                                       //窗口的标题
    		WS_BORDER | WS_CAPTION |WS_SYSMENU| WS_MAXIMIZEBOX | WS_MINIMIZEBOX,   //WS:Windows Style  窗口的风格
    		300, 200,											  //窗口左上角坐标
    		800, 600,											  //窗口的宽和高
    		NULL,												  //父窗口句柄、
    		NULL,												  //菜单句柄
    		hInstance,                                            //应用程序实例句柄
    		NULL												  //附加参数,WM_CREATE传递的信息 
    	);
    

    (四):显示以及更新窗口

    	//4.显示窗口
    	ShowWindow(hwnd, SW_SHOW);
    	//SW_SHOW:显示
    	//SW_SHOWMAXIMIZEO:最大化显示
    	//SW_SHOWMINIMIZEO:最小化显示
    

    (五):消息循环

    	UpdateWindow(hwnd);
    
    	MSG msg;
    	while (GetMessage(&msg,NULL, 0,0))//WM_QUIT:退出消息,GetMessage返回0,循环截止
    	{
    		//将虚拟键消息转化为字符消息
    		TranslateMessage(&msg);
    		//将消息分发给窗口处理函数
    		DispatchMessage(&msg);
    	}
    

    窗口处理函数:

    //窗口处理函数
    LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	switch (uMsg)
    	{
    	case WM_CLOSE://窗口关闭消息
    		DestroyWindow(hwnd);//窗口销毁函数
    		break;
    	case WM_DESTROY://窗口销毁消息
    		PostQuitMessage(0);//发送退出消息,直接退出程序:WM_QUIT
    		break;
    	}
    	return DefWindowProc(hwnd, uMsg, wParam, lParam);//操作系统处理
    }
    

    完整代码:

    #include<Windows.h>
    #include"resource.h"
    //第一个窗口程序
    //1.设计窗口类
    //2.注册窗口类
    //3.创建窗口
    //4.显示和更新窗口
    //5.消息循环
    
    //新类型的认识:
    //LRESULT     long      结果
    //HWND                 窗口句柄
    //UINT    usigned int   消息类型(编号)
    //WParam  usigned int   附加信息
    //LPSTR   long          附加信息
    //ATOM    WORD          unsigned short 
    //WORD   unsigned short 
    //LPCTSTR const wchar_t*
    //LPCTSTR =>CONST WCHAR *
    //CONST =>const
    //WCHAR =>wchar_t 
    
    
    //窗口处理函数
    LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
    
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int cCmdShow)
    {
    	//1.设计窗口类
    		//char szAppClassName[]="tust"; 不带L的字符串叫做窄字符串  窄字符:一个字符是一个字节,宽字符:一个字符占两个字节
    		//宽字符:wchar_t ch = L'A';    宽字符串: wchar_t ch = L"A";     wchar_t ch = L"ABC";
    	wchar_t szAppClassName[] = L"tust";                      //窗口类型名,任何一个窗口都有一个类型名,自己取
    	WNDCLASS wc;
    	wc.style			=	CS_HREDRAW | CS_VREDRAW;							 //窗口类的风格
    	wc.lpfnWndProc		=	WindowProc;											 //窗口处理函数(窗口回调函数)
    	wc.cbClsExtra		=	0;													 //窗口类的附加内存
    	wc.cbWndExtra		=	0;													 //窗口的附加内存
    	wc.hInstance		=	hInstance;								             //当前应用程序的实例句柄
    	wc.hIcon			=	LoadIcon(hInstance, MAKEINTRESOURCE(IDI_LOGO));		 //没有图标就带NULL,可以用系统图标LoadIcon,第一个参数为NULL,图标句柄
    	wc.hCursor			=	LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR));  //加载光标,光标句柄
    	wc.hbrBackground	=	CreateSolidBrush(RGB(0, 255, 0));				     //红绿蓝  0-255 //背景画刷颜色
    	wc.lpszMenuName		=	NULL;									             //菜单名
    	wc.lpszClassName	=	szAppClassName;
    	
    	//2.注册窗口类
    	if (0 == RegisterClass(&wc))
    	{
    		MessageBox(NULL, L"此程序不能运行在Windows NT上", L"温馨提示", MB_OK | MB_ICONERROR);
    		return 0;
    	}
    
    	//3.创建窗口
    	HWND hwnd = CreateWindow(
    		szAppClassName,                                       //窗口类型名
    		L"天津科技大学",                                       //窗口的标题
    		WS_BORDER | WS_CAPTION |WS_SYSMENU| WS_MAXIMIZEBOX | WS_MINIMIZEBOX,   //WS:Windows Style  窗口的风格
    		300, 200,											  //窗口左上角坐标
    		800, 600,											  //窗口的宽和高
    		NULL,												  //父窗口句柄、
    		NULL,												  //菜单句柄
    		hInstance,                                            //应用程序实例句柄
    		NULL												  //附加参数,WM_CREATE传递的信息 
    	);
    
    	//4.显示窗口
    	ShowWindow(hwnd, SW_SHOW);
    	//SW_SHOW:显示
    	//SW_SHOWMAXIMIZEO:最大化显示
    	//SW_SHOWMINIMIZEO:最小化显示
    
    
    	//消息循环,更新窗口,重新画一下
    	UpdateWindow(hwnd);
    
    	MSG msg;
    	while (GetMessage(&msg,NULL, 0,0))//WM_QUIT:退出消息,GetMessage返回0,循环截止
    	{
    		//将虚拟键消息转化为字符消息
    		TranslateMessage(&msg);
    		//将消息分发给窗口处理函数
    		DispatchMessage(&msg);
    	}
    	return 0;
    }
    
    //窗口处理函数
    LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	switch (uMsg)
    	{
    	case WM_CLOSE://窗口关闭消息
    		DestroyWindow(hwnd);//窗口销毁函数
    		break;
    	case WM_DESTROY://窗口销毁消息
    		PostQuitMessage(0);//发送退出消息,直接退出程序:WM_QUIT
    		break;
    	}
    	return DefWindowProc(hwnd, uMsg, wParam, lParam);//操作系统处理
    }
    

    在这里插入图片描述

    展开全文
  • 一、窗口结构体WNCLASS 这个结构体存储的是一些关于窗口类信息的结构, 成员如下: typedef struct tagWNDCLASSA { UINT style;//窗口类型 WNDPROC lpfnWndProc;//窗口处理函数(回调函数) int cbClsExtra;//...
  • Windows 窗口发送消息参数详解

    万次阅读 2020-06-24 15:32:25
    窗口发送消息参数详解 // 窗口.发送消息 函数功能: 将指定的消息发送到一个窗口,同win32 api 里面的SendMessage等同的效果 中文函数原型: 发送消息(hwnd,msg,wparam,iparam) 英文函数原型: sendmessage(hwnd,...
  • 文章目录一、前言二、使用Spy++工具分析窗口三、C#通过Windows API捕获窗口,获取窗口文本四、附录:Windows窗口消息 一、前言 项目是Unity开发的,上架了QQ游戏大厅,需要兼容XP系统。 QQ游戏大厅启动游戏的流程是...
  • word整理版 学习参考资料 Windows XP窗口组成与操作教学设计 临川十六中 蔡学顺 教学目标 认知目标 1认识windows xp窗口了解windows xp窗口组成 2掌握windows xp窗口的基本操作 3初识菜单命令滚动条 4进一步掌握鼠标...
  • 【摘要】窗口操作与应用程序管理一、窗口组成与操作windows XP的窗口有应用程序窗口和文件夹窗口,当多个窗口打开时,当前操作的窗口标题栏的颜色呈深蓝色,为活动窗口。1、窗口组成窗口主要分四个部分:上部为...
  • 教学内容 第 4 课 Windows XP 窗口操作 教学目标 1了解计算机桌面上各个组成部分的功能和 Windows XP 窗口组成学习窗 口操作的基本方法掌握桌面上图标的排序 2使学生养成爱护计算机正确使用计算机的良好习惯 教学...
  • windows 窗口样式

    千次阅读 2017-12-15 16:54:16
    1 窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用) WS_CHILDWINDOW 子窗口(不能与WS_POPUP合用) WS_MINIMIZE 创建窗口拥有最小化按钮 ...
  • 1认识Windows窗口了解窗口的组成 ? 2掌握窗口的基本操作 ? 3初识菜单命令 ? 4进一步掌握鼠标器的基本操作方法 ? 教学重点与难点1重点窗口的基础知识和基本操作 ? 2难点菜单命令 ? 教学准备1 计算机网络及辅助教学...
  • 在Dev-C++ 5.11上创建并正常运行,操作系统32位、64位Win7均可。首先在文件菜单里新建项目,选择Windows Application,命名完成后得到程序框架。最后在代码中添加上控件和对应的事件即可。
  • 第 PAGE 页码 页码页 / 总共 NUMPAGES 总页数 总页数页 其他教案认识Windows98窗口 活动课题认识Windows98窗口教学目标 1 知识与技能目标认识Windows98窗口的各组成部分掌握并熟练应用各组成部分功能操作培养学生...
  • windows的桌面包括“任务栏”和“桌面图标”两个组成部分。任务栏是指位于桌面最下方的小长条,主要由开始菜单、应用...Windows桌面主要由任务栏和桌面图标组成。任务栏在Windows系列系统中,任务栏(taskbar)就是指...
  • windows窗口组成

    千次阅读 2013-09-26 09:18:11
    对于刚刚学习MFC的同学,随着学习的进行,肯定会碰到这样的问题:windows窗口到底是哪些部分组成的呢?请看下面: (1)标题栏title bar。窗口上方的蓝条区域,标题栏左边有控制菜单图表和窗口中程序的名称。 (2...
  • 第 10 课 Windows 桌面及窗口 新桥镇博爱中学 一教学要点 1. 桌面 2. 窗口的菜单操作 3. 对话框的操作 二教学目标 1 知识目标了解桌面的组成学习窗口的菜单操作学习对话框的操作 2 能力目标掌握窗口的菜单与对话框的...
  • 从0开始学习《Windows程序设计》:窗口窗口!!!

    千次阅读 多人点赞 2019-03-10 20:48:15
    一、消息框 在之前的学习中,我们通过MessageBox创建了一个消息框程序! 消息框是什么,消息框就是我们用来跟用户交流的界面...MyWindows.c -- 基本窗口模型 《Windows 程序设计(SDK)》视频教程 ----------------...
  • windows的资源管理器窗口中,其左边窗口显示的内容是“系统的文件夹树”。在“资源管理器”窗口中,左边的文件夹窗口以树形目录的形式显示文件夹,右边的文件夹内容窗口是左边窗口中所打开的文件夹中的内容。 文件...
  • Windows应用程序是基于消息驱动的,任何线程只要注册窗口类都会有一个消息队列用于接收用户输入的消息和系统消息。 一、 窗口的创建流程 创建一个完整的窗口需要经过下面四个操作步骤: 设计一个窗口类(填写...
  • WINDOWS窗口坐标

    千次阅读 2017-02-27 10:56:00
    窗口组成】 外部边框。窗口Border属性为 Thin, Resizing时,有3个像素宽的边框。 系统区:窗口上部蓝色部分,有最大最小关闭按钮的那一个部分。 客户区:除去外部边框和系统区的部分。系统区有统一的...
  • PAGE PAGE 1 威远县第一初级中学 七 年级 上 册 信息技术 学科电子教案 主备教师 个案教师 授课班级 授课时间 年 月 日 教学内容 Windows桌面及窗口 课时序号 教学目标 1知识目标1了解桌面的组成 2学习窗口的菜单...
  • 构成了一组功能,允许人们在 Windows 上截取屏幕截图并执行一些辅助任务。 在某些 Windows 版本上,即使不可见,它也能成功截取窗口的屏幕截图。 包括以下功能: - 检索系统窗口的标题、大小、位置和 HWND - ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 126,682
精华内容 50,672
关键字:

windows窗口主要由什么组成