如何建立乙個模態對話方塊
我們建立的視窗類從cbkdialogimpl繼承而來,這個視窗就是乙個模態的視窗,我們需要呼叫其domodal方法,但是在介面庫裡面是如何實現的乙個模態的對話方塊呢。
核心就在這個類中的_modalmessageloop方法,我們來研究一下。
void _modalmessageloop()
if(m_bexitmodalloop || null == m_hwnd || !::iswindow(m_hwnd))
break;
bret= ::getmessage(&msg,null, 0, 0);
if(bret == -1)
elseif (!bret)
::translatemessage(&msg);
::dispatchmessage(&msg);
}}
在這個函式裡面建立了乙個訊息處理迴圈。
首先進行wm_quit訊息的檢測,並且採用pm_noremove的方式,如果獲得了這個訊息,那麼退出訊息迴圈,在之後的domodal函式中模態視窗就被銷毀了。
void enddialog(uint uretcode)
可見就是設定m_bexitmodalloop這個標誌位,使視窗退出。
之後就是getmessage,translatemessage和dispatchmessage了,就完成了常見的訊息處理。當我們建立視窗並執行在modalmessageloop函式當中時就形成了模態視窗的效果,也就是接管了訊息的分發和處理,其他的視窗就被模住了。
金山介面庫分析 3
真實視窗的封裝以及實視窗到虛視窗的轉化 所謂的dui庫,windowless都是在乙個視窗體系內虛擬出來虛視窗概念,並且通過接管介面布局 訊息傳遞和分發以及介面繪製來完成更優秀的介面效果。不過這些的根基卻又都要落到真實的視窗上,所以在介面庫中需要對真實視窗進行封裝,並將真實視窗納入到我們建立的控制項...
金山介面庫分析 9
渲染層的封裝和隔離 bkskin 控制項的繪製工作基本都封裝到了skin裡面,如果控制項對應的skin存在的話,那麼會按照skin的描述進行繪製,在cbkwindow的drawbkgnd方法中,使用skin進行了繪製 cbkskinbase pskin bkskin getskin m style....
金山介面庫
介面庫 是bkwin 相關的資源處理庫 是bkres 處理xml使用了 tinyxml bkwin是基於wtl實現的,所以要加上wtl 和wtlhelper pragma once pragma warning disable 4995 pragma warning disable 4996 pra...