mfc picture 控制元件畫圖問題

時間 2021-12-28 23:28:49

1樓:匿名使用者

crect rect;

cwnd* pwnd = getdlgitem(idc_pic1);

pwnd->getclientrect(&rect);

cclientdc pdc(this);

pdc.setpixel(point,rgb(0,0,0));

pwnd->invalidaterect(&rect);

這樣寫就對了。原因在於cdc* pdc = pwnd->getdc();

這一句得到的pdc是以你的**控制元件的左上角為(0,0)座標而畫點的,而 cdialog::onlbuttondown(nflags, point);裡帶給我們的是以視窗客戶區的左上角為(0,0)座標的,所以當你滑鼠點到picture控制元件的左上角時,point的值不會是(0,0),而是(55,66)之類的別的座標,然後pdc就以picture控制元件的左上角為(0,0)座標,畫一個點。故我們點到是picture控制元件的左上角,而pdc畫出的點卻偏離了。

給分吧!呵呵

2樓:

你獲得的是當前對話方塊的座標point,在控制元件的wnd裡的左上角座標是從0算起,但是在對話方塊裡控制元件的左上角座標就不是0了,需要轉換成同一空間的座標才可以。

crect rect;

cwnd* pwnd = getdlgitem(idc_pic1);

pwnd->getwindowrect(&rect); // 獲取控制元件螢幕座標

把滑鼠座標轉化為螢幕座標

cdc* pdc = pwnd->getdc();

point.x -= rect.left; // 同一類座標可運算,轉化為控制元件內座標

point.y -= rect.top;

pdc->setpixel(point,rgb(0,255,0));

pdc->ellipse(point.x - 5,point.y - 5,point.x + 5,point.y + 5); // 畫圓更明顯哦

3樓:匿名使用者

存滑鼠的位置;

再在mfc對話方塊裡捕獲滑鼠移動的訊息,一旦發現滑鼠在mfc對話筐上移動就把滑鼠放到 剛才儲存的滑鼠位置,也就是出界前的最後位置.這樣滑鼠就移不出去了,

另外好象還有個可以把滑鼠限制在指定矩形內移動的函式,那函式叫什麼我忘記了......

另外,團idc網上有許多產品**,便宜有口碑

4樓:

上面的**可能是無法覆蓋控制元件自己的繪製機制;像pwnd->invalidaterect(&rect),大概會觸發picture自身原定的重繪機制。

估計你需要自定義cpicture的自繪函式,如之類的onerasebackground,onctrlcolor......

上面你還有一個bug,getdc之後,最好要releasedc。

mfc怎麼增加picture control控制元件?

5樓:望穿秋水待伊人

首先在資源檢視下開啟dialog窗體,然後開啟工具箱,找到picture控制元件,拖到dialog視窗上面,就可以了,picture本身就是個static text 控制元件,所以要把id改成其他的,預設的id是不能進行**控制的。有什麼不明白的可以給我發私信。

VB控制元件PictureBox畫實時曲線不顯示

1 cishu datate必須是全域性變數 2 picture1的autoredaw屬性必須設為true 暫時只能說這兩點,因為你的 沒有貼完整,尤其是沒有顯示draw的呼叫 設定一下屬性試試 form1.autoredraw truepicture1.autoredraw true另,你的pic...

android 動態生成控制元件,怎麼設定控制元件的大小

一 方法。使用getlayoutparams 和setlayoutparams 方法。二 示例 linearparams 取控制元件aaa當前的佈局引數。365 當控制元件的高強制設成365象素。使設定好的佈局引數應用到控制元件aaa 三 原理。a getlayoutparams 和setlayou...

有關c樹形控制元件,c 列表和樹形控制元件

private void form1 load object sender,eventargs e 繼續加就是了哈,但是你這樣寫的話,有些難的了,你可以寫成treenode node new treenode 武漢 node.nodes.add 武昌 這樣不就是了麼 如果你這個是靜態的,直接去tre...