讓你的軟體介面更漂亮 二

2021-06-05 04:55:53 字數 1702 閱讀 9628

一、統一風格漂亮介面設計的理論與實現

a.視窗和對話方塊

windows操作系中視窗和對話方塊在我們看來是一樣的,就是乙個四邊形,有標題欄、系統按鈕,邊框等,可移動和可變大小。實際上視窗和對話方塊是有的區別的。在建立對話方塊視窗時的工作中要發生兩個主要過程:對話方塊的過程和其視窗過程。win32 sdk對話方塊使用了系統提供的對話方塊視窗的視窗過程和對話方塊過程,對話方塊過程將被視窗過程呼叫。在mfc下,所有的視窗類都使用了同乙個視窗過程,對話方塊類也一樣。mfc對話方塊過程只處理wm_initdialog訊息,其餘都讓視窗過程處理,我們只能在函式oninitdialog()中有唯一機會處理我們的對話方塊的初始化工作。因而我們設計介面時要在視窗過程處理中相關訊息實現我們的介面。

b. 幾個有關對話方塊視窗訊息的處理

1.wm_ncpaint:重畫非客戶區訊息

過載此消函式,可以標題欄上為所欲為。

2. wm_nclbuttondown:在非客戶區上按下滑鼠左鍵訊息

要想在標題欄相應滑鼠左鍵,可過載此消函式

3.wm_ncmousemove:在非客戶區上移動滑鼠會產生此訊息

4.wm_size:在視窗改變大小後產生此訊息。

為了使軟體更專業,調整對放框大小時,裡面的各控制項也應合理調整位置和大小,

過載此消函式可實現目的。還有很幾個,其它的不介紹了。

c. 統一的介面風格實現

如何運用上述知識請參考我的前一文《讓你的軟體介面更漂亮(一)》中有介紹並有源程式。漂亮介面的統一風格是如何實現的將是本文要討論主要內容。

我們知道windows作業系統視窗風格基本上是一致的,微軟的應用軟體程式也和作業系統風格基本是統一的。所以使我們的cdialog 也跟其一樣,要改變它的介面風格很困難。除非你對mfc瞭如指掌,甚至要了解作業系統核心。本人在摸索過程中經過無數次碰壁後,終於找到了希望。

請看下面兩幅圖:

圖二看了上面兩圖你是不是對vc有信心了?visual c++ 可實現你想要的統一風格介面。請看如何實現:

1.首先要建立漂亮介面主視窗。它也是乙個對話方塊,方法前文有介紹。

2.處理漂亮介面主視窗的oninitdialog()函式。很重要!

bool ctitlebardlg::oninitdialog()

return true;

}

3.建立你的對話方塊和對話方塊類。

用對話方塊資源編輯器完成對話方塊模板。用classwizard生成cyourdlg類此時基類只能為cdialog.

4.修改基類cdialog為漂亮介面類(ctitlebardlg)

yourdlg.h yourdlg.cpp 內的cdialog都要改,用edit/replace功能快些且安全。

在yourdlg.h還要包括titlebardlg.h

注意:對話方塊建構函式第乙個引數ctitlebardlg nid 要刪除。否則通build通不過。

5. 顯示你的視窗

//顯示**

cyoudlg *pmydlg;

pmydlg = new cyoudlg;

pmydlg->create(idd_your_dlg);

pmydlg->showwindow(sw_show);

這種**要在適當的時候delete pmydlg,防記憶體洩露。由於 pmydlg沒有定義為全域性,處理它有一定難度。如果是用domodal()顯示就好了,大家可以去試一下。解決了告訴我!

6. 完成編譯執行。你的對話方塊的風格是不是和主視窗一樣,有沒顯示出來?

讓你的軟體介面更漂亮 三

讓你的軟體介面更漂亮 三 朱一松 實現令人滿意的風格統一的軟體介面確實很難,象提到的messagebox filedialog fontdialog 目錄選擇對話方塊等mfc內部甚至系統dll內的對話方塊,要想讓它變臉可不容易。有人說hook技術可以,hook技術確實可以,hook可以說是無孔不入,...

讓你的軟體介面更漂亮 VC

我們使用過很多的軟體,給我們留下印象很深的是那些介面漂亮且迷人的軟體,國外的軟體象qicktime,國產的象金山詞霸等,它們的軟體介面設計風格都有獨特之處。本人跟據自已的經驗和大家 一下軟體的漂亮介面實現的原理並提供demo程式。一 漂亮介面實現的原理 用圖象元素自繪視窗標題樣欄,邊框,系統按鈕 最...

讓你的軟體介面更漂亮 三

實現令人滿意的風格統一的軟體介面確實很難,象提到的messagebox filedialog fontdialog 目錄選擇對話方塊等mfc內部甚至系統dll內的對話方塊,要想讓它變臉可不容易。有人說hook技術可以,hook技術確實可以,hook可以說是無孔不入,但hook的使用效率卻是令人難以滿...