建立非矩形對話方塊的簡單方法

2022-02-12 19:23:47 字數 1272 閱讀 2335

介紹 對話方塊通常是矩形的。可以採用多種方法使其在形狀上非矩形。但是,這些方法中的大多數都很複雜,適合使用**建立具有**或影象形狀的對話方塊的應用程式。如果對話方塊所需的形狀很簡單,比如圓角矩形或橢圓,那麼可以使用更簡單的方法。在這個方法中,建立多個crgn物件,然後組合(區域的聯合)來建立乙個復合區域。對話方塊然後給出復合區域的形狀。 的** 所有需要的**都在對話方塊的oninitdialog方法中 步驟1:設定對話方塊樣式 為了改變對話方塊的形狀,在對話方塊的oninitdialog中,對話方塊的標題和邊框被刪除。隱藏,複製code

...

// remove caption and border

setwindowlong(m_hwnd, gwl_style, getwindowlong(m_hwnd, gwl_style)

& (~(ws_caption | ws_border)));

...

步驟2:建立單獨的區域 然後使用對話方塊的windowhide座標建立單個的橢圓區域。複製code

//  get the rectangle

crect rect;

getwindowrect(&rect);

int w = rect.width();

int h = rect.height();

crgn rgn1;

crgn rgn2;

// create the top ellipse

rgn1.createellipticrgn(1, 1, w, h/2 + 30);

// create the bottom ellipse

rgn2.createellipticrgn(1, h/2 - 30, w, h);

步驟3:將這些區域合併為乙個區域 這些區域被組合成乙個單獨的區域。這種結合實際上是所有獨立區域的結合。複製code

//  combine the two ellipses

combinergn(rgn1, rgn1, rgn2, rgn_or);

步驟4:改變對話方塊的形狀到區域 對話方塊的形狀可以使用下面的**隱藏來更改複製code

//  set the window region

setwindowrgn(static_cast(rgn1.getsafehandle()), true);

第五步:清理 crgn物件需要與區域分離,否則當rgn物件離開scopehide時,crgn析構器會關閉hrgn控制代碼。複製code

rgn1.detach();

rgn2.detach();

建立簡單對話方塊

簡單對話方塊playgame.cpp在搞了大約乙個星期左右,終於看見想要的框了,不過還不太完善,先寫出這個星期來所學到的問題吧!1.首先要定義資源 resource dialog r dlg player name dialog dlg line 2.接下來編寫對話方塊 executeld 用於裝載...

模態對話方塊和非模態對話方塊的建立彈出

一 模態對話方塊的建立及顯示 1 windows對話方塊分為兩類 模態對話方塊和非模態對話方塊。模態對話方塊 當它彈出後,本應用程式其他視窗將不再接受使用者輸入,只有該對話方塊響應使用者輸入,在對它進行相應操作退出後,其他視窗才能繼續與使用者互動。非模態對話方塊 它彈出後,本程式其他視窗仍能響應使用...

MFC建立模態對話方塊和非模態對話方塊

以下主對話方塊類為 maindlg 一 建立模態對話方塊 1.在資源檢視裡插入dialog,對新建的對話方塊進行更改屬性新增需要的控制項等操作。2.在新建的對話方塊中右鍵新增類,新增新的對話方塊類cmodeldlg。3.在maindlg.h中包含modeldlg的標頭檔案 include cmode...