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++在两个按钮之间连直线和折线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 获取Matlab 30天在线试用版本
- 下一篇: Linux下调试器GDB的简单使用图解