金山介面庫分析 4

2021-06-10 01:32:09 字數 869 閱讀 5149

如何建立乙個模態對話方塊

我們建立的視窗類從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...