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 消息。
|