sfLib类库指南
你是否厌烦了mfc 的过度封装,想修改增加功能很繁琐。可是直接用winapi 编程,只能使用c语言,而且要熟悉winapi 的底层函数,消息封装等等。selfLib 类库恰好解决了你的烦恼,sfLib 类库直接简单的用c++封装了winapi 。
用sfCracker.h文件提供windows消息的参数 转换成c++数据的类型。
在sfWnd.h文件中,CWnd 类把全局的windows消息处理函数移到 你派生的 CWnd子类。
在窗口消息处理函数 sfWndMsgProc 中把消息处理 转移到CWnd 类的 OnWndMsg函数,你需要在OnWndMsg函数中由自己决定,把哪些消息传送给你的CWnd子类。传送消息时,可以根据 sfCracker.h 中的宏定义,转换函数参数。
sfWndMsgProc 窗口消息处理函数的工作过程如下:
在函数中,定义了一个映射表 CSimpleMap,函数正在处理的窗口句柄与CWnd 类指针的映射表。 还定义了 static CWnd* s_pCWndRcv 保存当前处理的 CWnd 类。
使用CWnd 类的 Create 函数时,先把CWnd 的this 指针传给 sfWndMsgProc 函数中的静态变量s_pCWndRcv, 然后在接受到第一个窗口句柄(hWnd)不是null的消息时,以hWnd 为关键字 加入s_HWNDMap 映射表,在接收到后续的窗口消息都用该消息的窗口句柄(hWnd),在s_HWNDMap 映射表中查询,得到 CWnd 类指针 pWnd,再调用 pWnd->OnWndMsg(),完成在 CWnd 子类中处理窗口消息。
使用sfLib 类库的CWnd 创建窗口,首先建立你的窗口类(如 CMainWnd),派生于 CWnd 类,添加你需要的变量、函数,比如在 Create 函数在定义自己窗口的类型,标题,样式等等,然后在OnWndMsg 函数在接受窗口消息,并且分发到各自的处理函数。
vs2008 (及以上版本 )中使用sfLib
一,创建一个 hello world 程序
1.启动 vs2008,新建 clr 空项目
2,项目名 helloworld,保存在 d:\mydoc\vs28proj\hellwd 文件夹
3,复制 sfLib\sample\helloworld 文件夹的 mainWnd.h 和 main.cpp 两个文件,
粘贴到 项目文件夹 d:\mydoc\vs28proj\hellwd。
4.项目中添加文件,vs 菜单 项目-> 添加现有项,
弹出的浏览窗口,选择刚才粘贴的 mainWnd.h 和 main.cpp 两个文件,点击 添加。
5,项目 设置 附加包含目录,点击vs菜单 项目->属性,在属性页 左边 点击 配置属性,
在右边的 附加包含目录 设置成 sfLib 所在的目录,如 d:\sfLib
6, 生成 exe 文件,运行 则可出现一个 窗口,中央有 hello world! 文字。
vs 中 查看mainWnd.h, 可以看到 从 sfLib 的CWnd 类,派生了 CMainWnd 类,类内
Create 方法,调用 create 可以 注册创建一个窗口,标题 是 mainwnd,
OnWndMsg 函数 接收 windows 消息,但是只 分发了 WM_PAINT WM_CREATE 两个消息,分别 由 OnPaint OnCreate 方法处理。你可以 添加分发windows 消息, 形式 CASE_MSG( WM_XXXX,函数名)
mainWnd.h 中 OnCreate 方法 什么都没做,直接返回 1,你可以在OnCreate 中创建窗口。
在 OnPaint中 画 hello world! 文字。
查看main.cpp ,在 程序一启动就执行的主函数 wWinMain ,定义了一个 CMainWnd 类的
实例,并调用 Create 方法,还用 windows 标准做法,接收分发 windows 消息。
|