讓你的軟體介面更漂亮(三)
朱一松
實現令人滿意的風格統一的軟體介面確實很難, 象網友提到的messagebox、filedialog、fontdialog、目錄選擇對話方塊等mfc內部甚至系統dll內的對話方塊,要想讓它變臉可不容易。有人說hook技術可以,hook技術確實可以,hook可以說是無孔不入,但hook的使用效率卻是令人難以滿意的,從目前大多數採hook技術的換膚軟體使用情況來看,完全可以證明這一點。今天我們將討論另外一技術來實現filedialog的變臉,這種技術叫替換視窗過程法(注:本人杜撰)。
視窗過程函式是大多視窗都有的,它處理視窗中(包括子視窗)的每乙個事件,替換視窗過程法與hook技術比起來孰強誰弱是很顯然的,因為同乙個hook只能攔截乙個事件,處理起來相當費時,hook也有它的優勢,但不是本文要討論的。這裡先讓大家眼見為實,請看下圖:
一、原理說明:
替換對話方塊的視窗過程要用到這個函式setwindowlong()其原型如下:
long setwindowlong(hwnd hwnd, int nindex , long dwlongnewproc)反回值為乙個long的數值,此值為舊的視窗過程函式位址。hwnd為指定視窗的控制代碼,
nindex 為 gwl_wndproc時才可設定新的視窗過程
dwlongnewproc 為指定新的視窗過程函式位址
如果要替換某個視窗的視窗過程函式,首先要想法弄到它的視窗的控制代碼,當然還得有視窗過程。
二、cfiledialog檔案對話方塊介面設計
a. 從cfiledialog派生類cmyfiledialog;
b. 新增protected 型虛成員函式:oninitdone();
此函是實際上是cfiledialog乙個虛函式,它在檔案對話方塊創後建後被呼叫,它給我們留下了乙個入口,因些過載現實替換其視窗過程函式;
c. 新增成員函式mywindowprocnew()
static lresult callback windowprocnew(hwnd hwnd,在這函式實現的時候你可大顯身手,處理得好不好決定你是否能變臉成功。 d. 實現**及說明如下:uint message,
wparam wparam,
lparam lparam);
wndproc m_mywndproc; //定義全域性變數儲存舊的視窗過程函式位址這個函式callwindowproc()用來恢呼叫復舊視窗過程函式,當然這並不意味取消了新的視窗過程。你也可跳過它不去執行,那為什要恢復舊的視窗過程函式?因為舊的視窗過程函式它處理了太多的事件,而新視窗過程函式只處理我們關心的事件,如果你樂意的話你完全可不要呼叫舊的視窗過程函式,那可是要付出大的代價的。具體細節請大家去實現,可參「void cmyfiledialog::oninitdone()
lresult callback cmyfiledialog::mywindowprocnew(hwnd hwnd,
uint message,
wparam wparam,
lparam lparam)
//這時要恢復呼叫舊的視窗函式,當然必時可要忽略它
return callwindowproc(m_mywndproc, hwnd, message, wparam, lparam);
}
讓你的軟體介面更漂亮(一)
」。三、cmyfiledialog的用法
我把cmyfiledialog寫成乙個dll,有debug和release兩個版,請用時分別選擇 a.先把.lib .dll .h 檔案持拷到工程目錄。在要使用處加如**:
#include "myfiledialg.h"b.顯示檔案對話方塊:#pragam comment(lib,"user.lib")
cmyfiledialog myfiledlg(true, 1, _t("對話方塊標題"));myfiledlg.domodal();
cstring filename = myfiledlg.getpathname()
filename是反回的結果
讓你的軟體介面更漂亮 三
實現令人滿意的風格統一的軟體介面確實很難,象提到的messagebox filedialog fontdialog 目錄選擇對話方塊等mfc內部甚至系統dll內的對話方塊,要想讓它變臉可不容易。有人說hook技術可以,hook技術確實可以,hook可以說是無孔不入,但hook的使用效率卻是令人難以滿...
讓你的軟體介面更漂亮 二
一 統一風格漂亮介面設計的理論與實現 a.視窗和對話方塊 windows操作系中視窗和對話方塊在我們看來是一樣的,就是乙個四邊形,有標題欄 系統按鈕,邊框等,可移動和可變大小。實際上視窗和對話方塊是有的區別的。在建立對話方塊視窗時的工作中要發生兩個主要過程 對話方塊的過程和其視窗過程。win32 s...
讓你的軟體介面更漂亮 VC
我們使用過很多的軟體,給我們留下印象很深的是那些介面漂亮且迷人的軟體,國外的軟體象qicktime,國產的象金山詞霸等,它們的軟體介面設計風格都有獨特之處。本人跟據自已的經驗和大家 一下軟體的漂亮介面實現的原理並提供demo程式。一 漂亮介面實現的原理 用圖象元素自繪視窗標題樣欄,邊框,系統按鈕 最...