mfc繪制動態(tài)矩形背景變成了白色 MFC動態(tài)繪制直線,圓弧段(連續(xù))如何實(shí)現(xiàn)?
MFC動態(tài)繪制直線,圓弧段(連續(xù))如何實(shí)現(xiàn)?直線使用的函數(shù)是BOOL LineTo( HDChdc,intX,intY,);參數(shù): hdc:設(shè)備場景句柄X:線段端點(diǎn)X坐標(biāo)位置,用邏輯坐標(biāo)表示。這一點(diǎn)實(shí)
MFC動態(tài)繪制直線,圓弧段(連續(xù))如何實(shí)現(xiàn)?
直線使用的函數(shù)是BOOL LineTo( HDChdc,intX,intY,);參數(shù): hdc:設(shè)備場景句柄X:線段端點(diǎn)X坐標(biāo)位置,用邏輯坐標(biāo)表示。這一點(diǎn)實(shí)際上不會畫出來;它不屬于線段的一部分。Y:線段終點(diǎn)的Y坐標(biāo)位置由邏輯坐標(biāo)表示。這一點(diǎn)實(shí)際上不會畫出來;它不 t屬于線段的一部分。返回值:返回TRU
MFC畫線與畫點(diǎn)函數(shù)?
動態(tài)繪制直線、矩形和橢圓的本質(zhì)在于消隱問題的解決和對Windows消息循環(huán)機(jī)制的理解。消隱問題:因?yàn)镸FC中有一個函數(shù)SetROP2,所以這個函數(shù)的參數(shù)設(shè)置為R2-not(當(dāng)前像素值設(shè)置為屏幕像素值的反色,單詞 "屏幕 "這里指的是你畫的圖形所占的那部分屏幕區(qū)域,也就是直線所占的屏幕區(qū)域就是直線所在的區(qū)域。
Windows的消息循環(huán)機(jī)制在MouseMove消息響應(yīng)中得到更好的體現(xiàn),因?yàn)樗w現(xiàn)在鼠標(biāo)在繪圖區(qū)域的移動來實(shí)現(xiàn)動態(tài)畫線和矩形的繪制。當(dāng)鼠標(biāo)在繪圖區(qū)域內(nèi)移動時,會產(chǎn)生動態(tài)效果,也就是說鼠標(biāo)在移動過程中一直在畫直線和矩形,這就需要在MouseMove消息響應(yīng)中調(diào)用畫線和畫矩形的對應(yīng)函數(shù)。但是,正是因?yàn)樵谑髽?biāo)移動的過程中繪制了大量的直線和矩形,我們才不得不在鼠標(biāo)移動的過程中將之前繪制的直線和矩形清空,這樣才能保證實(shí)現(xiàn)我們的功能——動態(tài)繪制直線和矩形,而不會產(chǎn)生多余的直線和矩形。
消隱和動態(tài)繪制問題的關(guān)鍵在于MouseMove消息響應(yīng)中函數(shù)調(diào)用的順序:
1.第一,最后一張圖是隱藏的。
畫一幅臨時的畫
3.消息循環(huán)的機(jī)制:循環(huán)執(zhí)行上面的代碼(這是Windows循環(huán)的機(jī)制,不需要自己的代碼實(shí)現(xiàn))。
在最后的LButtonUp消息響應(yīng)中,需要將上面MouseMove消息響應(yīng)中最后一個循環(huán)中繪制的最后一個臨時圖形留空。Drop,然后根據(jù)LButtonUp消息響應(yīng)中的point參數(shù)繪制最終圖形。綜上所述,MouseMove中的代碼和LButtonUp中隱藏臨時圖形的代碼要實(shí)現(xiàn)的功能是動態(tài)過程,圖形的最終繪制仍然是響應(yīng)LButtonUp消息及其點(diǎn)參數(shù)。