成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

解決MFC中CClientDC類(lèi)繪圖縮放圖像消失問(wèn)題的方法

很多MFC初學(xué)者在使用菜單控制CClientDC類(lèi)在客戶區(qū)進(jìn)行繪圖時(shí),可能都會(huì)遇到一個(gè)共同問(wèn)題:當(dāng)點(diǎn)擊按鈕執(zhí)行繪圖操作成功后,進(jìn)行窗口縮放操作時(shí),繪制的圖像竟然消失了。那么這種情況是如何發(fā)生的呢?如何

很多MFC初學(xué)者在使用菜單控制CClientDC類(lèi)在客戶區(qū)進(jìn)行繪圖時(shí),可能都會(huì)遇到一個(gè)共同問(wèn)題:當(dāng)點(diǎn)擊按鈕執(zhí)行繪圖操作成功后,進(jìn)行窗口縮放操作時(shí),繪制的圖像竟然消失了。那么這種情況是如何發(fā)生的呢?如何解決呢?

繪圖操作應(yīng)放在OnDraw或OnPaint函數(shù)中

如果直接在OnDraw中進(jìn)行繪制,當(dāng)窗口大小改變時(shí)會(huì)調(diào)用OnDraw函數(shù)進(jìn)行重繪,從而避免圖像消失的情況發(fā)生。但是如果是在按鈕的消息響應(yīng)函數(shù)中進(jìn)行繪制,窗口縮放時(shí)不會(huì)觸發(fā)重繪操作,導(dǎo)致圖像立即消失。因此,繪圖操作應(yīng)該放在OnDraw或OnPaint函數(shù)中執(zhí)行。

控制繪圖操作的方法

如果一定要讓按鈕來(lái)控制繪圖操作,可以設(shè)置一個(gè)bool變量,當(dāng)bool為true時(shí)執(zhí)行OnDraw函數(shù),否則不執(zhí)行。在進(jìn)行圖形縮放變換之前,需要調(diào)用Invalidate()函數(shù)使窗口無(wú)效化以清除窗口,并在修改完保存的圖形信息后再調(diào)用OnDraw()函數(shù)進(jìn)行重繪。

使用枚舉類(lèi)型多變量值控制繪圖操作

許多需要通過(guò)菜單按鈕來(lái)控制繪圖操作的場(chǎng)景都可以采取類(lèi)似的方法??梢栽O(shè)置多個(gè)選項(xiàng)來(lái)響應(yīng)不同的繪圖操作,使用枚舉類(lèi)型多變量值來(lái)控制具體的繪圖操作,從而更加靈活地實(shí)現(xiàn)繪圖功能。

示例代碼參考

```cpp

bool flag;

void Cmfc_menu_yyView::Onpushbutton(){

flag true;

Invalidate(); // 更新

}

void Cmfc_menu_yyView::OnDraw(CDC* pDC){

Cmfc_menu_yyDoc* pDoc GetDocument();

ASSERT_VALID(pDoc);

if (!pDoc) return;

if(flag){

CRect rect;

GetClientRect(rect);

CDC MemDC;

CBitmap MemBitmap;

(NULL);

(pDC, rect.right, );

CBitmap *pOldBit (MemBitmap);

(0, 0, rect.Width(), rect.Height(), RGB(255, 255, 255));

for(i 0; i < nx; i ){

for(j 0; j < nz; j ){

(i, j, RGB(250*vel[i][j]/vel_max, 0, 0));

}

}

pDC->BitBlt(0, 0, rect.right, , MemDC, 0, 0, SRCCOPY);

();

();

}

}

```

通過(guò)合理地控制繪圖操作的時(shí)機(jī)和方式,可以有效避免在MFC中使用CClientDC類(lèi)繪圖時(shí)窗口縮放導(dǎo)致圖像消失的問(wèn)題。希望以上方法和示例能夠幫助讀者更好地理解和解決相關(guān)的繪圖異常情況。

標(biāo)簽: