用習慣了
delphi、vb
、windows form
(visual c#
)等稱之為
rad(
)的開發工具進行專案開發的都會很滿足這些工具和平台提供的快速介面開發的功效:你可以很容易就可以實現乙個
mis系統的管理介面,提供乙個主框架,點選主框架上的某乙個選單項就開啟乙個處理事務的視窗,這些視窗可以重疊,可以最大
/小化,一切看起來都像那麼回事。但是當你在
vc中進行開發的時候,發現整個世界都變了,雖然
vc提供了
mdi支援多文件檢視的框架,但是每次你點選「開啟」
/「新建」選單項的時候,你會發現新開啟的視窗千孔一面,都是同乙個樣式,根本就不能滿足專案的開發。這就需要你能夠為不同的業務邏輯提供不同的顯示
/step 1:使用
vc 6.0
新建乙個
project
,命名為:
mis。除選擇單文件屬性外,一切使用「預設」方式。於是你可以獲得五個類:cmainframe
,,cmisdoc,cmisview,和caboutdlg;
step 2:新建一套新的
:新增新類
cnewdoc
,基類為
cdocument
(方法:
insert
——>new class
(class type
:mfc class
),基類選擇
cdocument
)。新增新的框架類
cnewchildframe
,基類為
cmdichildwnd
,新增方法同上。新增新的檢視類
cnewview
,方法:
insert
——>new form
,對話方塊中的文件類選擇為
cnewdoc
(預設也是)。
step 3:將選單資源
idr_mainframe
中新增選單項「功能」,並新增選單子項「功能1」
和「功能2」
,分別對應專案開發中的不同的業務邏輯。為了保證整個過程中選單項的一致性,在
idr_mainframe
上ctrl + c
,然後ctrl +v
兩次生成和
idr_mainframe
一樣的選單兩個,然後將這兩個選單分別改名為
idr_mistype
和idr_view2_tmpl
(注意:先將後兩個選單名字
copy
再刪除它們,然後再改名,這裡選單的名字可以換,但是為了簡單就直接使用系統生成的預設選單名字,如果改變了名字要在
new cmultidoctemplate
時刻修改相應項)。
step 4:在
中新增變數記錄這兩個框架類,為簡單起見就宣告為
public
(方便後面的訪問,也就懶得管物件導向的設計原則了,因為僅僅是示例而已):
public:並將函式中由cmultidoctemplate* m_pdoctemplate1;
cmultidoctemplate* m_pdoctemplate2;
vc自動生成的**作如下改變:
/**************以及:改為:1)(注意將cmultidoctemplate*去掉,否則你是新建了乙個cmultidoctemplate*的對
象)2)如果不是選用new form 則沒有生成以上**,則直接新增以下**。
***************/
m_pdoctemplate2 = new cmultidoctemplate(
idr_view2_tmpl,
runtime_class(cnewdoc), // document class
runtime_class(cnewchildframe), // frame class
runtime_class(cnewview)); // view class
adddoctemplate(m_pdoctemplate2);
cmultidoctemplate* pdoctemplate;step 5:在pdoctemplate = new cmultidoctemplate(
idr_mistype,
runtime_class(cmisdoc),
runtime_class(cchildframe), // custom mdi child frame
runtime_class(cmisview));
adddoctemplate(pdoctemplate);
/***************
改為:(注意將cmultidoctemplate*去掉,否則你是新建了乙個cmultidoctemplate*的物件)
**********************/
m_pdoctemplate1 = new cmultidoctemplate(
idr_mistype,
runtime_class(cmisdoc),
runtime_class(cchildframe), // custom mdi child frame
runtime_class(cmisview));
adddoctemplate(m_pdoctemplate1);
mainfrm.h
中新增兩個文件類變數記錄這裡的兩個不同的
document
,為簡單起見就宣告為
public
:
public:注意:在cmainframecmisdoc* m_pdoc1;
cnewdoc* m_pdoc2
建構函式中將上面兩個變數置為
null
(否則:))。並響應
idr_mainframe
的兩個選單專案「功能
1」和「功能
2」訊息,在各自的響應選單中分別新增響應函式:
// todo: add your command handler code here和:if (m_pdoc1 != null) //已經開啟則啟用
else
// todo: add your command handler code here至此就完成了整個工作,需要說明的是:if (m_pdoc2 != null)
else
1)實現中由於使用到相關的類,因此在必要的地方要
include
2)這裡給出的是乙個示例**,實際開發中可以通過參考實現獲得自己想要實現的具體應用情況(例如檢視類的不同、數量不同,更重要的還有業務邏輯的不同實現等);
3)執行的結果為:
但是呢,到目前為止,
程式有點bug,當點選功能1,再關閉,再開啟,出現記憶體錯誤。這是由於功能1視窗關閉後,m_pdoc1並沒有相應地置為null。解決方法就是在view類中新增ondestroy訊息響應:
void cmisview::ondestroy()
VC 多文件使用者介面設計及各個文件之間的切換
step 2 新建一套新的doc view frame 新增新類cnewdoc,基類為cdocument 方法 insert new class class type mfc class 基類選擇cdocument 新增新的框架類cnewchildframe,基類為cmdichildwnd,新增方法...
《 使用者介面設計 》
在人和機器的互動過程 human machine interaction 中,有乙個層面,即我們所說的介面 inte ce 從心理學意義來分,介面可分為感覺 視覺 觸覺 聽覺等 和情感兩個層次。使用者介面設計是螢幕產品的重要組成部分。介面設計是乙個複雜的有不同學科參與的工程,認知心理學 設計學 語言...
介面設計文件 介面設計的五點建議!
介面是目前 前後端互動 rest 系統互動 rpc 最普遍的一種方式。乙個好的介面,應該清晰易懂,職責明確,易於維護。反之,則會造成很多困擾。特別是open api,誰做誰知道。基於這樣的前提以及自己之前踩過的坑,就成了這篇文章的由來。文件與程式設計師之間有著一種非常奇妙的關係。一句話概括就是 寫之...