非模態對話方塊的建立於銷毀

2021-05-13 00:19:34 字數 1146 閱讀 3371

橡皮線的工作原理:就必須不停地在新位置畫出線段,並把以前的畫出的線段擦掉。如果背景是單一的顏色,那就好辦了,只需要構造一支背景顏色的畫筆和一支前景顏色的畫筆,然後首先用背景色畫筆擦出上次的線段,再用前景顏色的畫筆畫出新的線段,就可以實現橡皮線了。由於橡皮線的起點是不變的,而終點在不停地改變,因此,還需要記錄下前一條線段的終點位置。

但是,這種方法還有問題存在,乙個問題是假如背景色不是單一的,就不好辦了。另乙個問題就算是單一背景色,移動的橡皮線還會把已存在的圖形破壞掉。其解決辦法是採用混合模式。

如果在畫橡皮條是直接把線條混合模式設定為r2_not(反色)模式,則負負得正,畫兩次剛好回到螢幕上的圖形。也可以設定為r2_notxorpen(非異或)模式或者r2_xorpen(異或)模式。

程式設定如下:

在檢視類中新增如下成員變數:

cpoint m_begin,m_end;

//記錄線條的起點、終點

bool m_lmouseisdown;

//記錄滑鼠左鍵是否按下

bool m_lmouseisup;

//記錄滑鼠左鍵是否彈起

在檢視類成員函式中初始化這三個成員變數

m_begin.x=m_begin.y=0;

m_end.x=m_end.y=0;

m_lmouseisdown=false;       //初始時滑鼠左鍵沒有被按下

m_lmouseisup=true;             //初始時滑鼠左鍵處於彈起狀態

在你的檢視類新增一下三個訊息處理函式

void cexamplelineview::onlbuttondown(uint nflags, cpoint point)

void cexampleline3view::onmousemove(uint nflags, cpoint point)

m_mouseisup=false;

m_end=point;               //重新記錄上一次線段的終點

dc.moveto(m_begin);

dc.lineto(m_end);

}cview::onmousemove(nflags, point);

}void cexampleline3view::onlbuttonup(uint nflags, cpoint point)

非模態對話方塊的建立和銷毀過程

建立非模態對畫框的過程 見 乙個非模態的mfc視窗的銷毀過程 假設自己通過 new建立了乙個視窗物件 pwnd 然後pwnd create 則銷毀視窗的呼叫次序 1.手工呼叫 pwnd destroywindow 一般在對話方塊類中的 oncancle 函式中postmessage wm desto...

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

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

模態對話方塊與非模態對話方塊

1.對話方塊分類 按工作方式不同,可將對話方塊分成兩類 模態對話方塊 modal 在關閉模態對話方塊之前,程式不能進行其他工作 如一般的 開啟檔案 對話方塊 非模態對話方塊 modeless 非模態對話方塊開啟後,程式仍然能夠進行其他工作 如一般的 查詢與替換 對話方塊 2.對話方塊建立 模態對話方...