c语言windows程序设计-第三天-属于自己的窗口资料

上传人:E**** 文档编号:107075563 上传时间:2019-10-17 格式:DOC 页数:8 大小:68.50KB
返回 下载 相关 举报
c语言windows程序设计-第三天-属于自己的窗口资料_第1页
第1页 / 共8页
c语言windows程序设计-第三天-属于自己的窗口资料_第2页
第2页 / 共8页
c语言windows程序设计-第三天-属于自己的窗口资料_第3页
第3页 / 共8页
c语言windows程序设计-第三天-属于自己的窗口资料_第4页
第4页 / 共8页
c语言windows程序设计-第三天-属于自己的窗口资料_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《c语言windows程序设计-第三天-属于自己的窗口资料》由会员分享,可在线阅读,更多相关《c语言windows程序设计-第三天-属于自己的窗口资料(8页珍藏版)》请在金锄头文库上搜索。

1、创建属于自己的窗口=创建窗口前的准备在创建窗口前我们先来熟悉几个名词,这些名词现在可以暂时不去透彻的进行理解,只需要印象中知道有这么回事就行。1.窗口窗口这个我们都已经十分熟悉了,在Windows中,一个应用程序窗口上一般会在标题栏上显示程序的名称,紧挨着标题栏的菜单栏,或许还会有状态栏、滚动条等其他装饰品。2.控件在一些应用程序中,我们经常可以在程序的界面上(窗口)看到一些按钮(PushButton)、文本框(TextBox)、列表框(ListBox)、滚动条(ScrollBar)等,这些对象通常被称为控件,在Windows程序设计一书中,还被称为子窗口、控件窗口或子窗口控件。3.窗口类在建

2、立一个窗口前,我们必须首先注册一个窗口类(WindowsClass),接触过面向对象的朋友应该会首先想到面向对象当中的类,但是,这里窗口类中的类并不是指面向对象当中的那个类。在这里我们可以把窗口类理解为一个结构体,结构体的成员就是窗口的一些属性,例如窗口的标题是什么、窗口使用什么样的小图标以及窗口的风格之类的属性,一个窗口就是一个结构体的对象,结构体成员的属性决定着窗口的属性。4.消息循环在Windows程序设计中,消息循环是个不得不提的概念,Windows操作系统是以消息驱动的,消息队列是指在一个应用程序运行时,Windows操作系统会为该应用程序建立一个消息队列,这个消息队列用来存放该程序

3、可能创建的各种窗口的消息,当用户对应用程序进行操作时,例如点击一个按钮、调整下窗口的大小等,此时Windows会立即把这一消息告诉应用程序,使应用程序能作出相应的动作。笔者觉得有比较强调一下上一段中的最后一句此时Windows会立即把这一消息告诉应用程序,使应用程序能作出相应的动作。,我们在创建一个应用程序时,不用想着什么时候才能从用户那得到指令,因为操作系统会即时告诉我们用户此时是否对程序进行了操作,对于没有接触过Windows编程的朋友们这点可能有点难以理解,简单来说就是像如何获取一个按钮是否被单击,或者如何获取用户此时是否在调整窗口大小之类的代码Windows已经帮我们完成了,我们只需要

4、等待着Windows给我们发消息就行,如何判断消息类型以及处理这些消息,在代码上通常我们用while配合一个巨大的switch来完成,。5.窗口的过程函数当一个窗口建立之后,就可以从Windows那里不断的接收到Windows发来的消息,接收到消息后我们就需要一个函数来处理这些消息,可以简单的理解为,这个用来处理接收到的消息的函数就称为窗口过程函数或者回调函数。下面我们来尝试着看一个创建一个基本窗口的代码。尝试创建自己的窗口代码如下:#include LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ) ; /声明用来处理消息的函数int

5、 WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow ) static TCHAR szAppName = TEXT(MyWindow) ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; /声明一个窗口类对象 /以下为窗口类对象wndclass的属性 wndclass.style = CS_HREDRAW | CS_VREDRAW ; /窗口样式 wndclass.lpszClassName = szAppName ; /窗口类

6、名 wndclass.lpszMenuName = NULL ; /窗口菜单:无 wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH) ; /窗口背景颜色 wndclass.lpfnWndProc = WndProc ; /窗口处理函数 wndclass.cbWndExtra = 0 ; /窗口实例扩展:无 wndclass.cbClsExtra = 0 ; /窗口类扩展:无 wndclass.hInstance = hInstance ; /窗口实例句柄 wndclass.hIcon = LoadIcon( NULL, I

7、DI_APPLICATION ) ; /窗口最小化图标:使用缺省图标 wndclass.hCursor = LoadCursor( NULL, IDC_ARROW ) ; /窗口采用箭头光标 if( !RegisterClass( &wndclass ) ) /注册窗口类, 如果注册失败弹出错误提示 MessageBox( NULL, TEXT(窗口注册失败!), TEXT(错误), MB_OK | MB_ICONERROR ) ; return 0 ; hwnd = CreateWindow( /创建窗口 szAppName, /窗口类名 TEXT(我的窗口), /窗口标题 WS_OVERL

8、APPEDWINDOW, /窗口的风格 CW_USEDEFAULT, /窗口初始显示位置x:使用缺省值 CW_USEDEFAULT, /窗口初始显示位置y:使用缺省值 CW_USEDEFAULT, /窗口的宽度:使用缺省值 CW_USEDEFAULT, /窗口的高度:使用缺省值 NULL, /父窗口:无 NULL, /子菜单:无 hInstance, /该窗口应用程序的实例句柄 NULL / ) ; ShowWindow( hwnd, iCmdShow ) ; /显示窗口 UpdateWindow( hwnd ) ; /更新窗口 while( GetMessage( &msg, NULL, 0

9、, 0 ) ) /从消息队列中获取消息 TranslateMessage( &msg ) ; /将虚拟键消息转换为字符消息 DispatchMessage( &msg ) ; /分发到回调函数(过程函数) return msg.wParam ;LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) HDC hdc ; /设备环境句柄 PAINTSTRUCT ps ; /绘制结构 RECT rect; /矩形结构 switch( message ) /处理得到的消息 case WM_CRE

10、ATE: /窗口创建完成时发来的消息 MessageBox( hwnd, TEXT(窗口已创建完成!), TEXT(我的窗口), MB_OK | MB_ICONINFORMATION ) ; return 0; case WM_PAINT: /处理窗口区域无效时发来的消息 hdc = BeginPaint( hwnd, &ps ) ; GetClientRect( hwnd, &rect ) ; DrawText( hdc, TEXT( Hello, 这是我自己的窗口! ), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER ) ; EndPa

11、int( hwnd, &ps ) ; return 0 ; case WM_LBUTTONDOWN: /处理鼠标左键被按下的消息 MessageBox( hwnd, TEXT(鼠标左键被按下。), TEXT(单击), MB_OK | MB_ICONINFORMATION ) ; return 0; case WM_DESTROY: /处理窗口关闭时的消息 MessageBox( hwnd, TEXT(关闭程序!), TEXT(结束), MB_OK | MB_ICONINFORMATION ) ; PostQuitMessage( 0 ) ; return 0; return DefWindowProc( hwnd, message, wParam, lParam ) ; /DefWindowProc处理我们自定义的消息处理函数没有处理到的消息-先简单介绍这段代码,在主函数WinMain中的窗口类对象wndclass我们定义了窗口的相关属性, 尝试注册窗口类并调用CreateWindow创建窗口, 创建完成后用ShowWindow让窗口显示出来, 我们还使用了个while用来从

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号