实验一、HelloWorld在VC上的实现.doc_第1页
实验一、HelloWorld在VC上的实现.doc_第2页
实验一、HelloWorld在VC上的实现.doc_第3页
实验一、HelloWorld在VC上的实现.doc_第4页
实验一、HelloWorld在VC上的实现.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一、HelloWorld在VC上的实现班级: 姓名: 学号:1.1实验目的l 掌握Windows程序基本的运行原理。l 学会编写简单的Windows程序。1.2实验平台l Windows XP professional操作系统。l VC6.0集成开发环境。1.3实验内容l 用Windows API(SDK)实现图形化HellowWorld程序。l 用MFC类库实现图形化HellowWorld程序。1.5实验步骤l 用Windows API(SDK)实现HellowWorld程序 打开VC6.0,从File菜单中选择New,单击Project标签,选择Win32 Application,输入项目名称和工程存放目录,点击确定后出现3中选择,在此选择创建一个空的工程,点击工程的File View,向Source Files中添加源文件,然后编写代码。 Windows程序的入口函数:我们编写过Win32控制台程序,这种程序的唯一入口为main()函数,那么对于Windows应用程序,它的入口函数为WinMain(),由操作系统调用。它的函数原型如下:int WINAPI WinMain( HINSTANCE hInstance, / handle to current instance HINSTANCE hPrevInstance, / handle to previous instance LPSTR lpCmdLine, / command line int nCmdShow / show state); 窗口的创建创建一个完整的窗口需要经过下面四个操作步骤:l 设计一个窗口类:Windows已经为程序员定义了一个窗口应该具有的基本属性,即WNDCLASS类(结构体),定义如下:typedef struct _WNDCLASS UINT style; /窗口风格 WNDPROC lpfnWndProc; /窗口过程 int cbClsExtra; /扩展空间 int cbWndExtra; /扩展空间 HINSTANCE hInstance; /实例句柄 HICON hIcon; /图标设置 HCURSOR hCursor; /光标设置 HBRUSH hbrBackground; /窗口背景颜色 LPCTSTR lpszMenuName; /窗口类菜单 LPCTSTR lpszClassName; /窗口类文本名称 WNDCLASS, *PWNDCLASS;用WNDCLASS定义一个窗口变量,然后依次初始化起它的每一个成员,注意:第二个成员变量lpfnWndProc指定了这一类型窗口的过程函数(函数名可以作为该函数的首地址),也称回调函数。每一种不同类型的窗口都有自己专用的回调函数。l 注册窗口类:调用RegisterClass()函数注册窗口,函数原型如下:ATOM RegisterClass( CONST WNDCLASS *lpWndClass );l 创建窗口:调用CreateWindow()函数创建窗口,函数原型如下:HWND CreateWindow( LPCTSTR lpClassName, / registered class name LPCTSTR lpWindowName, / window name DWORD dwStyle, / window style int x, / horizontal position of window int y, / vertical position of window int nWidth, / window width int nHeight, / window height HWND hWndParent, / handle to parent or owner window HMENU hMenu, / menu handle or child identifier HINSTANCE hInstance, / handle to application instance LPVOID lpParam / window-creation data);l 显示及更新窗口:在CreateWindow()调用返回后,Windows已经分配了一块内存,用于保存创建窗口的全部信息,然而窗口并未在显示器上显示,所以需要调用ShowWindow()函数显示窗口和UpdateWindow()更新窗口,两个函数原型分别为:BOOL ShowWindow(HWND hWnd, / handle to window int nCmdShow / show state);更新窗口函数原型:BOOL UpdateWindow( HWND hWnd / handle to window); 消息循环当窗口显示在显示器上后,程序必须准备读入用户用键盘和鼠标输入的数据。Windows为每一个应用程序维护一个“消息队列”,当发生输入事件后,Windows将事件转化成一个消息,并将消息放入程序的消息队列中。程序通过执行以下一段代码从消息队列中取出消息:while(GetMessage(&msg,NULL,0,0) /获取消息TranslateMessage(&msg);/消息翻译DispatchMessage(&msg); /发送消息给窗口过程Msg变量为MSG结构体类型,类型定义如下:typedef struct tagMSG HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; MSG, *PMSG; 头文件包含在每一个Windows程序C语言编写的Windows程序都可以看到#include。Windows.h是主要的包含文件,它包含的windows的其它头文件,这些头文件中最重要和最基本的是:1. WINDEF.H 基本类型定义2. WINNT.H 支持Unicode类型定义3. WINBASE.H 内核函数4. WINUSER.H 用户接口函数5. WINGDI.H 图形设备接口函数 上面程序使用到得Windows系统调用函数均在MSDN中平台SDK文档中说明,并在不同的头文件中声明,其中绝大多数是在WINUSER.H中声明的。l 用MFC类库实现HellowWorld程序 打开VC6.0,从File菜单中选择New,单击Project标签,选择Win32 Application,输入项目名称和工程存放目录,选择创建一个空的工程,点击工程的File View,在Head Files中添加Hello.h文件,将类的定义均放在头文件里,需要定义两个类:应用程序类CMyApp类从CWinApp类继承;窗口类CMainWindow类从CFrameWnd类继承;向Source Files中加入Hello.cpp文件,输入类的成员函数定义。选择菜单Project/settings(或AltF7),在Project Settings对话框中的General页中的Microsoft Foundation Classes:选择Use MFC in a Static Library或Use MFC in a Shared DLL,然后编译运行。1.6实验程序实现l SDK实现代码:#include #include /窗口过程函数声明:LRESULT CALLBACK WinLiuProc( HWND hwnd, / handle to window UINT uMsg, / message identifier WPARAM wParam, / first message parameter LPARAM lParam / second message parameter);int WINAPI WinMain( HINSTANCE hInstance, / handle to current instance HINSTANCE hPrevInstance, / handle to previous instance LPSTR lpCmdLine, / pointer to command line int nCmdShow / show state of window)HWND hwnd; /窗口句柄MSG msg; /消息 /声明一个窗口类WNDCLASS wndcls;/设置窗口类的属性:wndcls.cbClsExtra = 0;wndcls.cbWndExtra = 0;wndcls.hbrBackground = ( HBRUSH)GetStockObject( WHITE_BRUSH );wndcls.hCursor = LoadCursor( hInstance, IDC_ARROW );wndcls.hIcon = LoadIcon( hInstance, IDI_APPLICATION );wndcls.hInstance = hInstance;wndcls.lpfnWndProc = WinLiuProc;wndcls.lpszClassName = Windows prog test;wndcls.lpszMenuName = NULL;wndcls.style = CS_HREDRAW | CS_VREDRAW;/注册窗口类RegisterClass(&wndcls);/创建窗口hwnd = CreateWindow( Windows prog test, TEXT (The Hello Program,SDK style), WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL );/显示窗口ShowWindow( hwnd, SW_SHOWNORMAL );/更新窗口UpdateWindow(hwnd);/*消息循环*/从消息队列中循环读取有效消息,如果是有效消息,则复制到msg中,然后从队列中删除该消息while (GetMessage( &msg, NULL, 0, 0) /当接收到一个WM_QUIT消息后,退出消息循环/将一个指示字符键的键盘消息转化为容易使用的WM_CHAR消息TranslateMessage(&msg);/将消息发送给窗口过程DispatchMessage(&msg);return 0;LRESULT CALLBACK WinLiuProc( HWND hwnd, / handle to window UINT uMsg, / message identifier WPARAM wParam, / first message parameter LPARAM lParam / second message parameter) switch(uMsg)/字符输入消息case WM_CHAR:char szChar20;sprintf(szChar,键盘按键按下);MessageBox(hwnd,szChar,Title,0);break; /鼠标左键按下消息case WM_LBUTTONDOWN:MessageBox(hwnd,左键按下,Title,0);HDC hdc;/* retrieves a handle to a display device context (DC) for the client area of a specified window or for the entire screen */hdc=GetDC(hwnd);/TextOut(hdc,0,50,after mouse left button down,show this,/ strlen(after mouse left button down,show this) ); /releases a device context (DC),ReleaseDC(hwnd,hdc);break;/鼠标右键按下消息case WM_RBUTTONDOWN:MessageBox(hwnd,鼠标右键按下,Title,0);break; /输出消息case WM_PAINT:/ HDC hdc; RECT rect; PAINTSTRUCT ps; hdc=BeginPaint(hwnd, &ps) ; GetClientRect(hwnd, &rect) ; DrawText(hdc,TEXT(HelloWorld),strlen(HelloWorld), &rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER); EndPaint(hwnd, &ps) ; break;/窗口关闭消息case WM_CLOSE:/如果接收的消息为IDYESif(IDYES=MessageBox(hwnd,是否真的结束?,lhhsoft,MB_YESNO)/销毁窗口DestroyWindow(hwnd);/系统发出一个WM_DESTROY消息。break;/销毁消息case WM_DESTROY: /退出消息循环PostQuitMessage(0); /发送一个WM_QUIT消息br

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论