日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC++在两个按钮之间连直线和折线

發布時間:2025/4/14 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC++在两个按钮之间连直线和折线 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在兩個按鈕之間連線;按鈕大小都一樣;如果按鈕完全平行,連直線;如果按鈕不平行,連的是一條折線;

對話框工程;先設計界面;

按鈕大小做成一樣;button1和3,2和4,左端對齊; 1和2,頂端對齊;3和4,頂端錯開一個距離;

然后編寫代碼;最終效果如下;想要實現的效果是把線連到按鈕邊的中點;是按此思路寫的代碼,最終實現效果有些差距;下面來看一下代碼,并分析原因;

對話框頭文件加入如下變量;

CRect crect1;int w;int h;int top1;int top2;int top3;int top4;int left1;int left2;int left3;int left4;int wz, hz;CDC *pDC;

w,按鈕寬度;h,高度;top1-4,四個按鈕頂部距離父窗口頂邊的距離,像素;left1-4,4個按鈕的左邊距,距離父窗口;wz,連的是折線時,折線第一段的長度;折線有三段,第一段和第三段長度一樣;第二段指中間豎立的一小段;

第一條線的起點,x坐標是,left1加上w,y坐標是,top1 + h/2;看上去沒錯;x坐標,按鈕1的左邊距加上按鈕的寬度;y坐標,按鈕1的頂部邊距,加上按鈕高度的一半;其他計算類似;中間一小段折線的長度是,(top4 - top3)/2;

對話框OnInitDialog()函數做初始化;

GetDlgItem(IDC_BUTTON1)->GetWindowRect(crect1); w = crect1.Width();h = crect1.Height();top1 = crect1.top;left1 = crect1.left;GetDlgItem(IDC_BUTTON2)->GetWindowRect(crect1);top2 = crect1.top;left2 = crect1.left;GetDlgItem(IDC_BUTTON3)->GetWindowRect(crect1);top3 = crect1.top;left3 = crect1.left;GetDlgItem(IDC_BUTTON4)->GetWindowRect(crect1);top4 = crect1.top;left4 = crect1.left;pDC = GetDC();

? ? 獲取各變量的值,獲取設備描述表指針以備繪圖;

四個按鈕的單擊代碼;運行起來,單擊按鈕1,再單擊按鈕2,繪第一條線;單擊按鈕3,再單擊按鈕4,繪第二條線;

void CzhexiandemoDlg::OnBnClickedButton1() {// TODO: 在此添加控件通知處理程序代碼int x = 0,y=0;x = left1 + w;y = top1 + h / 2;pDC->MoveTo(x, y); }void CzhexiandemoDlg::OnBnClickedButton2() {// TODO: 在此添加控件通知處理程序代碼int x = 0, y = 0;x = left2;y = top2 + h / 2;pDC->LineTo(x, y); }void CzhexiandemoDlg::OnBnClickedButton3() {// TODO: 在此添加控件通知處理程序代碼int x = 0;x = left3 + w;int y = 0;y = top3 + h / 2;wz = (left4 - left3 - w) / 2;pDC->MoveTo(x, y);pDC->LineTo(x + wz, y); }void CzhexiandemoDlg::OnBnClickedButton4() {// TODO: 在此添加控件通知處理程序代碼hz = (top4 - top3) / 2;pDC->LineTo(left3 + w + wz, top3 + h / 2 + hz);pDC->LineTo(left4, top3 + h / 2 + hz); }

但是連線的起點和終點的y坐標沒有定位到按鈕邊的中點;

可能是VC++的窗體坐標系還未完全簡化,距離窗體頂部的像素大小包含窗口標題條在內;C# winform 是什么情況有時間可以看一下;

有時間再繼續;可以把連線繪制為箭頭,實現終點隨鼠標移動的動態提示線等;

總結

以上是生活随笔為你收集整理的VC++在两个按钮之间连直线和折线的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。