基于mfc的局域网聊天工具内容摘要:

I 函数和 VC++类。 ( 3)故障处理 在遇到可预知的故障 与情况时,能提示用户并自动退出;在遇到不可预知的故障时能安全退出。 可行性研究 成本可行性 学习研究性开发,暂不考虑成本。 技术可行性 已有搭建好的基于 Windows 的软硬件平台,本人对 VC 开发环境有一定的了解,需继续深入学习 VC 和 Windows socket 编程。 第三章 相关开发技术的原理性说明 Win32 编程 (即 SDK 程序设计原理) 所谓的 Win32 开发,就是在 C 语言的层面上,直接使用 Win32 API( Application Programming Interface:系统开放出来,给程序员使用的接口。 ) 开发 Windows 应用程序或者系统程序。 虽 然 现在直接用 Win32 API 开发应用程序的人已经不多了,但是深入理解 Windows 系统程序设计原理,仍然是成为Windows 开发高手的良好途径。 所谓的 Win32,其实是一个 API 规范,与 UNIX系统编程接口标准 POSIX 是相对应的。 下面是进行直接的 WIN32 SDK 方式编程的基本思路或者说是一个框架。 一个 WINDOWS 程序分为程序代码和 UI(User Interface 用户接口 )资源两大部分,两部分 最后以 RC 编译 程序编译 为一个完整的 EXE 文件。 所谓 UI 资源是指功能菜单、对话框 外貌、程序图标、光标形状等等。 这些 UI 资源的实际内容(二进制代码)系借助各种工具产生,并以各种扩展名存在,如 .ico .bmp .cur等等。 程序员必须在一个所谓的资源描述档( .rc )中描述它们。 RC 编译器 8 ( )读取 RC 文件的描述后将所有 UI 资源文件集中制作出一个 .RES 文件,再与程序代码结合在一起,这才是一个完整的 Windows 可执行文件。 如下 图所示 : Windows 程序将会调用许多的函数,来实现其一定的功能, 这些函数可分为C Runtimes 以及 Windows API 两大部分,而 API 由操作系统本身来提供,包括、 、 、 、 等等,前三个为 Windows 的三大模块所对应的 import 函数库。 “以消息为基础,以事件为驱动。 ” Windows 程序依靠外部发生的事件来驱动,也就是说:程序不断的等待 消息 , 外部事件以消息的形式进入系统后放入相应的队列, 然后 程序调用 Getmessage API 取得相应的消息并 做出相应的处理。 窗口是用来接受并处理消息的,每个窗口都对应一个函数来处理消息,程序员必须设计这个窗口函数 ( windows procedure)。 如下图所示, Windows 程序与 OS之间的关系是: Dialog Editor Image Editor Font Editor .DLG .BMP .ICO .CUR .FON .C .H .RC RC Compiler C Compiler .OBJ .DEF .RES LINKER .EXE Tool Text file Binary file .LIB C runtime DLL Import 9 一、 WinMain 函数 main()函数是 C 程序的进入点,而 WinMain 函数是 Windows 程序的进入点 ,其函数原型为: int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )。 ( 1)返回值 如果执行成功则会返回 WM_QUIT 这个消息,并在消息的 wParam 中包含exit value, 如果是非正常退出则 exit value 是 零。 WINAPI 与 CALLBACK、 _stdcall 相同, 是一种函数调用习惯,关系到参数进入到堆栈的次序,以及处理堆栈的责任。 其它的函数调用习惯还有 _pascal 和_cdecl。 当调用 WinMain 执行程序后, WinMain 的四个参数将由操作系统传世进来。 ( 2) HINSTANCE hInstance hInstance 表示该程序当前运行的实例句柄,这是一个数值,程序在 Windows 10 下运行时,唯一的标识运行中的实例。 ( 3) HINSTANCE hPrevInstance, HPrevInstance 表示当前实例的前一个实例的句柄,一般为 NULL。 ( 4) LPSTR lpCmdLine lpCmdLine 是一个以空终止的字符串,指定传给应用程序的命令行参数。 ( 5) int nCmdShow nCmdShow 指定程序的窗口应该如何显示,如最大化 ( SW_MAXIMIZE) 、最小化 ( SW_MINIMIZE) 、隐藏 ( SW_HIDE) 等。 二、 MSG 结构体 MSG msg; 定义 了 一个 MSG 结构体,是 Windows 内设的一种数据格式 : Typetype struct tagMSG /*Queued message structure*/ { HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, DWORD time, POINT pt, }MSG。 ( 1) HWND hwnd 定义句柄 ,用于识别是那个窗口函数来接收信息,即识别是那个窗口产生的消息。 ( 2) UINT message 用于存放一个特定消息号。 WM_xxx, 如: WM_MOUSEMOVE。 ( 3) WPARAM wParam 和 LPARAM lParam 用于存放消息的附加信息。 ( Specifies additional information about the message. The exact meaning depends on the value of the message member.) ( 4) DWORD time 消息产生时的时间。 ( Specifies the time at which the message was posted.) ( 5) POINT pt 消息产生时光标在屏幕的位置。 ( Specifies the cursor position, in screen coordinates, when the message was posted.) 11 三、注册窗口 RegisterClass()完成注册窗口类的功能,设定窗口的属性:边框、颜色、标题、位置等等。 其函数原型为: ATOM RegisterClass( CONST WNDCLASS *lpWndClass // 指向一个 WNDCLASS结构体的指针,在调用此函数之前需要定义一个完整的 WNDCLASS 对象。 )。 WNDCLASS 结构体 typedef struct { UINT style, WNDPROC lpfnWndProc, int cbClsExtra, int cbWndExtra, HINSTANCE hInstance, HICON hIcon, HCURSOR hCursor, HBRUSH hbrBackground, LPCTSTR lpszMenuName, LPCTSTR lpszClassName } WNDCLASS, *PWNDCLASS。 ( 1) UINT style 指定的类样式,可以是多个类样式的结合。 ( 2) WNDPROC lpfnWndProc 指向 窗口过程函数 的指针, 你必须使用 CallWindowProc 功能函数调用窗口过程函数。 ( 3) int cbClsExtra Windows 为系 统中的每个窗口类管理这一个 WNDCLASS 结构,在应用程序注册窗口类时,它可以让 Windows OS 为 WNDCLASS 结构分配和追加一定的附属空间,由此类的对象共同使用,此部分空间一般初始化为 0,所以此参数一般设置为 0。 ( 4) int cbWndExtra Windows OS 为每个窗口管理着一个内部数据结构,在注册窗口类时,应用程序能够指定一定字节数的附加空间,称为窗口附加内存。 Windows OS 初始化 12 此部分内存为 0。 一般此参数设置为 0,但是 如果应用程序用 WNDCLASS 结构注册对话框,必须设置此值为 DLGWINDOWEXTRA。 ( 5) HINSTANCE hInstance 实例句柄。 ( 6) HICON hIcon 指向此类图标的句柄。 此成员变量必须指向一个图标资源,如果为空,则指向一个默认的 系统 图标 ( 7) HCURSOR hCursor 指向此类指针的句柄。 此成员变量必须指向一个指针资源,如果为空,则在光标移动入程序窗口时,程序必须明确光标的形状。 ( 8) HBRUSH hbrBackground 指向背景画刷的句柄。 此成员变量 可以是 一个 物理的画刷句柄来画出背景,也可以是一个颜色值,但颜色 值必须是系统给出的标准的系统颜色。 系统给出的类型有: COLOR_ACTIVEBORDER COLOR_ACTIVECAPTION COLOR_APPWORKSPACE COLOR_BACKGROUND COLOR_BTNFACE COLOR_BTNSHADOW COLOR_BTNTEXT COLOR_CAPTIONTEXT COLOR_GRAYTEXT COLOR_HIGHLIGHT COLOR_HIGHLIGHTTEXT COLOR_INACTIVEBORDER COLOR_INACTIVECAPTION COLOR_MENU COLOR_MENUTEXT COLOR_SCROLLBAR COLOR_WINDOW COLOR_WINDOWFRAME COLOR_WINDOWTEXT ( 9) LPCTSTR lpszMenuName 13 指定菜单资源的名字,一个以空终止的字符串。 如果设置为 NULL,那么这个窗口类的对象将没有默认菜单。 ( 10) LPCTSTR lpszClassName 指定窗口的名字,一个以空终止的字符串。 四、创建窗口 CreateWindow 函数可 以用于创建父窗口、弹出窗口以及子窗口 ,在创建窗口时 它 可以 确定窗口类、窗口标题、窗口风格、大小以及初始化位置。 其 函数原型为: HWND CreateWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam )。 ( 1)返回值 如果功能执行成功,则返回新窗口的句柄;如果不成功,则返回 NULL,可以使用 GetLastErr 来获取附加的错误信息。 常见的错误信息: an invalid parameter value(错误的参数值 ) 、 the system class was registered by a different module( 系统类已被其它 的模块注册 ) 、 The WH_CBT hook is installed and returns a failure code、 the window procedure fails for WM_CREATE or WM_NCCREATE 等。 ( 2) LPCTSTR lpClassName 指定窗口类的名称。 ( 3) LPCTSTR lpWindowName 指定窗口的名字。 ( 4) DWORD dwStyle 指定创建窗口的样式。 14 ( 5) int x 和 int y 指定窗口左上角的 x, y 坐标。 ( 6) int nWidth 和 int nHeight 指定窗口的宽度和高度。 ( 7) HWND hWndParent 指定创建窗口的父窗口句柄。 ( 8) HMENU hMenu 指定窗口菜单的句柄 ( 9) HINSTANCE hInstance 指定窗口所属应用程序实例的句柄 ( 10) LPVOID lpParam 作为 WM_CREATE 消息的附加参数 lPa。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。