怎樣在視圖的圖像上畫線?


基於MFC的一個視圖界面,繼承 CFormView 類的一個視圖上添加了 Picture Control 變量並顯示在此區域,

GetDlgItem(IDC_BG)->ShowWindow(SW_SHOW);//IDC_BG為圖像ID
CStatic pbg;//Picture Control 控件變量

void CPanel::OnDraw(CDC* pDC)
{
GetDlgItem(IDC_BG)->ShowWindow(SW_SHOW);//圖像能顯示出來
CDC* bgDC = pbg.GetDC();
bgDC->MoveTo(0,100);
bgDC->LineTo(0,100);//此直線不能顯示出來,?????為什么呢
}

上面的圖像顯示,但直線不顯示,如果換成按鈕響應如下
void CPanel::OnBnClickedButton1()
{
CDC* bgDC = pbg.GetDC();
bgDC->MoveTo(ORX,ORY);
bgDC->LineTo(ORX,ORY + 100);//直線 能夠 顯示出來,???為什么 OnDraw 刷新就不能顯示
}


請各位指教


謝謝啦,

19 个解决方案

#1


bgDC->MoveTo(0,100);
bgDC->LineTo(0,100);//此直線不能顯示出來,?????為什么呢
--------------------------------
你這是個點吧???起點和終點坐標一樣?

#2


回一樓,上面的代碼抄錯了。
應該是
bgDC->MoveTo(0,0);
bgDC->LineTo(100,100);//此直線不能顯示出來,?????為什么呢

#3


其實我想做個類似圓盤時鍾的程序,以圖像為背景


然后隨時變動在這個圖像上畫線。

但是現在問題是畫線不能在顯示

void CPanel::OnDraw(CDC* pDC)
{
GetDlgItem(IDC_BG)->ShowWindow(SW_SHOW);//圖像能顯示出來
CDC* bgDC = pbg.GetDC();
bgDC->MoveTo(0,0);
bgDC->LineTo(100,100);//此直線不能顯示出來,?????為什么呢
}

但是在按鈕響應函數中就能顯示圖像和線條
void CPanel::OnBnClickedButton1()
{
CDC* bgDC = pbg.GetDC();
bgDC->MoveTo(0,0);
bgDC->LineTo(100,100);//直線 能夠 顯示出來,???為什么 OnDraw 刷新就不能顯示
}

謝謝

#4


為什么不用OnDraw(CDC* pDC)中的pDC呢?

#5


引用 4 樓 hhhh63 的回復:
為什么不用OnDraw(CDC* pDC)中的pDC呢?


OnDraw() 中的 pDC 不能在這種表態圖像上畫線。

#6


樓主應該再看看背景的設置:
CBitmap    m_background ; 

void CParamGPTD::OnPaint() 
{
CRect rect;
GetClientRect(&rect);
CDC dcMem; 
dcMem.CreateCompatibleDC(&dc); 
BITMAP bitMap;
m_background.GetBitmap(&bitMap);
CBitmap *pbmpOld=dcMem.SelectObject(&m_background);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);
dc.StretchBlt(2,8,328,114,&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);
}

設置背景后,在界面上的操作應該不受影響

#7


引用 6 樓 jiuzhoulh 的回復:
樓主應該再看看背景的設置:
CBitmap    m_background ; 

void CParamGPTD::OnPaint() 
{
CRect rect;
GetClientRect(&rect);
CDC dcMem; 
dcMem.CreateCompatibleDC(&dc); 
BITMAP bitMap;
m_background.GetBitmap(&bitMap);
CBitmap *pbmpOld=dcMem.SelectObject(&m_background);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);
dc.StretchBlt(2,8,328,114,&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);
}

設置背景后,在界面上的操作應該不受影響


我的背景圖不是用代碼生成的,而是 Picture Control 類控件(Type:Bitmap),
這個我不知道怎么修改屬性

#8


在DC上先把位圖貼上來,然后再在圖上畫線,應該不受影響的

#9


可能是 你畫的 線被 控件覆蓋了

用DC貼圖 然后畫線

#10


加一些顏色看看到底問題出在哪,比如加上背景色,線條加上顏色

#11


引用 8 樓 wshcdr 的回復:
在DC上先把位圖貼上來,然后再在圖上畫線,應該不受影響的


我就是不想在DC上畫,想直接用 Picture Control 顯示圖像作為背景,然后再在它的上面畫一些動態變化的線條。但是發現線條都被遮擋住不能顯示。

#12


引用 9 樓 CS2130 的回復:
可能是 你畫的 線被 控件覆蓋了

用DC貼圖 然后畫線


就是被Picture Contro控件擋住不能顯示,怎樣解決呢。我不想用DC貼圖,因為用DC貼圖顯示的效果不能像其它控件顯示那樣會根據系統的分辨率適當調整比例。

#13


引用 10 樓 yeah2000 的回復:
加一些顏色看看到底問題出在哪,比如加上背景色,線條加上顏色


經測試,線條加上背景色也不能顯示出來

#14


getdc之后要釋放dc,否則多次之后就不響應了。
我個人懷疑DC以及坐標有問題。

#15


引用 14 樓 xuddk727 的回復:
getdc之后要釋放dc,否則多次之后就不響應了。
我個人懷疑DC以及坐標有問題。


坐標沒有問題啊,同樣的代碼,我在按鈕響應函數中調用時能顯示出線條,但在 OnDraw 函數中就不能顯示出來

#16


bgDC->MoveTo(0,100);
bgDC->LineTo(0,100);//此直線不能顯示出來,?????為什么呢

這代碼就是在原地踏步,怎么可能畫出線來?
bgDC->LineTo(0,200); //試試

#17


CDC* bgDC = pbg.GetDC();這個應該錯了,pbg是啥玩意啊?
改成
CDC* bgDC = pDC;

#18


引用 16 樓 worldy 的回復:
bgDC->MoveTo(0,100);
bgDC->LineTo(0,100);//此直線不能顯示出來,?????為什么呢

這代碼就是在原地踏步,怎么可能畫出線來?
bgDC->LineTo(0,200); //試試

一開始發貼時抄錯了,我在2樓回帖是已經補充了,
bgDC->MoveTo(0,0);
bgDC->LineTo(100,100);//此直線不能顯示出來

這時直線不能顯示(OnDraw 函數調用),

如果換成按鈕響應如下
void CPanel::OnBnClickedButton1()
{
    CDC* bgDC = pbg.GetDC();
    bgDC->MoveTo(ORX,ORY);
    bgDC->LineTo(ORX,ORY + 100);//直線 能夠 顯示出來,???為什么 OnDraw 刷新就不能顯示
}

#19


引用 17 樓 worldy 的回復:
CDC* bgDC = pbg.GetDC();這個應該錯了,pbg是啥玩意啊?
改成
CDC* bgDC = pDC;


pbg 是 CStatic pbg;//Picture Control 控件變量
如果換成 pDC 則直線顯示不出來

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: