MFC开发——点击页面生成图标功能
由于一直在弄Qt,MFC基本沒接觸過,加上上課不認真聽講,沒想到老師布置的一項簡單作業就使我焦頭爛額,最后通過各種百度,查MSDN,終于做完了作業,但覺得里面很多內容百度上都沒有,很多都是自己一遍一遍嘗試出來的,所以就寫了博文,以便大家分享與指點
題目:鼠標處點擊生成一張圖標,圖標中點為鼠標點擊位置
第一步:導入bitmap圖片
1、新建一個MFC單文檔工程
2、導入bmp圖片,vc6.0只支持bmp格式的圖片,而且必須在24位及以下才顯示得出來,這里推薦大家用電腦自帶畫圖工具,導出時選擇如下:
3、將導出的圖片放到項目文件夾中,在vc6.0中選擇insert>>資源>>bitmap>>引入,選擇所有文件類型,導入剛才的圖片,id名默認為IDB_BITMAP1
第二步:實現鼠標點擊響應函數
第三步:代碼實現
在view類頭文件中添加bitmap成員變量,防止局部變量被釋放
在鼠標事件中添加代碼:
void CDrawIconView::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);//實例繪畫工具bitmap.LoadBitmap(IDB_BITMAP1);//加載圖片CBrush brush(&bitmap);//創建畫刷CPoint point1(point);CPoint point2(point.x+80,point.y+80);CRect xRect(point1,point2);//定義要畫的矩形,矩形左上頂點為point1,右下頂點為point2dc.FillRect(&xRect,&brush);//用畫刷出一個矩形CView::OnLButtonDown(nFlags, point); }
發現繪制幾次之后并不是我們想要的效果,沒有實例化出一個一個圖標,反而圖標是連在一起的,而且圖標大小也不對
解決方法
在構造函數加上
通過SetBrushOrg函數我們可以改變筆刷起點位置,每次鼠標事件均改變一次,則圖案不連在一起,默認參數為(0,0),改為變量point,鼠標事件代碼改為:
void CDrawIconView::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);//實例繪畫工具CBrush brush(&bitmap);//創建畫刷dc.SetBrushOrg(point);//改變筆刷起點CPoint point2(point.x+80,point.y+80);CRect xRect(point,point2);//定義要畫的矩形,矩形左上頂點為point1,右下頂點為point2dc.FillRect(&xRect,&brush);//用畫刷出一個矩形CView::OnLButtonDown(nFlags, point); }效果為:
圖標已經不連在一起了,但是大小不對,而且每次實例化的位置也不對,找到圖標,點擊屬性,我們可以看到,圖標的寬與高
則我們通過代碼 dc.SetBrushOrg(point.x-88,point.y-84);可以實現每次都在鼠標點擊處實例化一個圖標,并且圖標不連在一起,
然后通過創建兩個點作為矩形的左上角與右下角點參數,我們可以實現鼠標點擊處生成圖標,并且圖標大小與原圖標一致
所以鼠標事件代碼如下:
void CDrawIconView::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);//實例繪畫工具CBrush brush(&bitmap);//創建畫刷dc.SetBrushOrg(point.x-88,point.y-84);//改變筆刷起點CPoint point1(point.x-88,point.y-84);CPoint point2(point.x+88,point.y+84);CRect xRect(point1,point2);//定義要畫的矩形,矩形左上頂點為point1,右下頂點為point2dc.FillRect(&xRect,&brush);//用畫刷出一個矩形CView::OnLButtonDown(nFlags, point); }我們發現效果是這樣的,明顯已經達到了要求
補充:
雖然效果實現了,但并不是最好的,在上面我們是通過數字使得圖標有效果,但是如果換了個圖標,那么是不是又要改變數字。如果能夠訪問到圖標的寬與高,就可以解決這個問題
代碼如下:
效果依然不變
雖然只是一個很簡單的繪圖事件的學習,但如果一個人做的話,在過程中尋找各種方法也可以學到許多內容
總結
以上是生活随笔為你收集整理的MFC开发——点击页面生成图标功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Canvas Scaler
- 下一篇: 建议64:为循环增加Tester-Doe