想實作點擊兩個信號燈后回應改變信號燈和軌道顏色
使用L_ButtonDown陳述句不回應
中間部分畫圖代碼刪掉了 但是圖是正常出的 放不下了
// 王思嘉Dlg.cpp : 實作檔案
//
#pragma comment(lib,"User64.lib")
#pragma comment(lib,"ole64.lib")
#include "stdafx.h"
#include "王思嘉.h"
#include "王思嘉Dlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
int m_LMouseDownStep=1;//滑鼠點次數
#endif
// 用于應用程式“關于”選單項的 CAboutDlg 對話框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
void Searchroute();
// 對話框資料
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 實作
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void On32772();
afx_msg void On32775();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
};
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
ON_COMMAND(ID_32772, &CAboutDlg::On32772)
ON_COMMAND(ID_32775, &CAboutDlg::On32775)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
// C王思嘉Dlg 對話框
C王思嘉Dlg::C王思嘉Dlg(CWnd* pParent /*=NULL*/)
: CDialogEx(C王思嘉Dlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void C王思嘉Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST7, m_ListBox);
}
BEGIN_MESSAGE_MAP(C王思嘉Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOK, &C王思嘉Dlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON1, &C王思嘉Dlg::OnBnClickedButton1)
ON_EN_CHANGE(IDC_EDIT1, &C王思嘉Dlg::OnEnChangeEdit1)
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
// C王思嘉Dlg 訊息處理程式
BOOL C王思嘉Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 將“關于...”選單項添加到系統選單中。
// IDM_ABOUTBOX 必須在系統命令范圍內。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu!= NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 設定此對話框的圖示。當應用程式主視窗不是對話框時,框架將自動
// 執行此操作
SetIcon(m_hIcon, TRUE); // 設定大圖示
SetIcon(m_hIcon, FALSE); // 設定小圖示
// TODO: 在此添加額外的初始化代碼
int m_LMouseDownStep=1;//滑鼠點次數
m_ListBox.AddString(_T("沈陽站"));
m_ListBox.AddString(_T("沈陽北站"));
m_ListBox.AddString(_T("沈陽南站"));
return TRUE; // 除非將焦點設定到控制元件,否則回傳 TRUE
}
void C王思嘉Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
// 如果向對話框添加最小化按鈕,則需要下面的代碼
// 來繪制該圖示。對于使用檔案/視圖模型的 MFC 應用程式,
// 這將由框架自動完成。
void C王思嘉Dlg::OnPaint()
{
CPaintDC dc(this); // 用于繪制的設備背景關系
//畫灰色直線
//創建寬度為3的灰色畫筆
CPen penSolid(PS_SOLID,3,RGB(100,100,100));
CPen*pOldPen=NULL;
dc.SelectObject(&penSolid);
//畫股道
dc.MoveTo(30,200);
dc.LineTo(470,200);
dc.MoveTo(480,200);
dc.LineTo(840,200);
dc.MoveTo(850,200);
dc.LineTo(1240,200);//2股道
dc.MoveTo(30,250);
dc.LineTo(465,250);
dc.MoveTo(475,250);
dc.LineTo(840,250);
dc.MoveTo(850,250);
dc.LineTo(1240,250);//1股道
dc.MoveTo(210,300);
dc.LineTo(355,300);
dc.MoveTo(365,300);
dc.LineTo(500,300);
dc.MoveTo(510,300);
dc.LineTo(540,300);
dc.MoveTo(550,300);
dc.LineTo(825,300);//3股道
dc.MoveTo(495,150);
dc.LineTo(825,150);//4股道
dc.MoveTo(550,350);
dc.LineTo(800,350);
dc.MoveTo(540,300);
dc.LineTo(550,350);
dc.MoveTo(800,350);
dc.LineTo(820,310);//5股道
dc.MoveTo(520,100);
dc.LineTo(800,100);
dc.MoveTo(500,140);
dc.LineTo(520,100);
dc.MoveTo(800,100);
dc.LineTo(820,140);//6股道
//安全線
dc.MoveTo(355,300);
dc.LineTo(400,350);
dc.MoveTo(400,350);
dc.LineTo(455,350);
//畫道岔
dc.MoveTo(850,200);
dc.LineTo(825,150);//5-7
dc.MoveTo(900,240);
dc.LineTo(930,210);//1-3
dc.MoveTo(850,250);
dc.LineTo(825,300);//9-11
dc.MoveTo(385,210);
dc.LineTo(415,240);//8-10
dc.MoveTo(495,150);
dc.LineTo(470,200);//16-18
dc.MoveTo(465,250);
dc.LineTo(510,300);//12-14
dc.MoveTo(335,290);
dc.LineTo(365,260);//2-4
//畫圓
//畫紅色圓(信號機)
penSolid.DeleteObject();//洗掉畫筆
penSolid.CreatePen(PS_SOLID,1,RGB(255,0,0));
dc.SelectObject(&penSolid);//新建寬度為1紅色畫筆
CBrush brush(RGB(255,0,0));//新建紅色刷子
CBrush *pOldBrush=(CBrush*)dc.SelectObject(&brush);
dc.Ellipse(290,180,310,200);//S
dc.Ellipse(290,250,310,270);//SN
dc.Ellipse(965,250,985,270);//X
dc.Ellipse(515,250,535,270);//X1
dc.Ellipse(515,200,535,220);//X2
dc.Ellipse(580,300,600,320);//X3
dc.Ellipse(550,150,570,170);//X4
dc.Ellipse(590,350,610,370);//X5
dc.Ellipse(560,100,580,120);//X6
dc.Ellipse(965,180,985,200);//XN
dc.Ellipse(780,230,800,250);//S1
dc.Ellipse(780,180,800,200);//S2
dc.Ellipse(745,280,765,300);//S3
dc.Ellipse(755,130,775,150);//S4
dc.Ellipse(730,330,750,350);//S5
dc.Ellipse(745,80,765,100);//S6
dc.Ellipse(140,230,160,250);//XD
dc.SelectObject(pOldBrush);
dc.SelectObject(pOldPen);
//畫藍色圓(信號機)
penSolid.DeleteObject();//洗掉畫筆
penSolid.CreatePen(PS_SOLID,1,RGB(0,0,255));
dc.SelectObject(&penSolid);//新建寬度為1藍色畫筆
brush.DeleteObject();//洗掉刷子
brush.CreateSolidBrush(RGB(0,0,255));//新建藍色刷子
CBrush *pOldbrush=(CBrush*)dc.SelectObject(&brush);
dc.Ellipse(855,250,875,270);//D1
dc.Ellipse(260,280,280,300);//D2
dc.Ellipse(380,300,400,320);//D4
dc.Ellipse(470,280,490,300);//D6
dc.SelectObject(pOldBrush);
dc.SelectObject(pOldPen);
//標示信號燈
dc.SetTextColor(RGB(100,100,100));
dc.SetBkColor(RGB(0,0,0));//設定標示為黃色,背景為黑色
dc.TextOut(285,165,_T("S"));
dc.TextOut(285,230,_T("SN"));
dc.TextOut(775,210,_T("SI"));
dc.TextOut(775,165,_T("SII"));
dc.TextOut(740,265,_T("S3"));
dc.TextOut(750,115,_T("S4"));
dc.TextOut(725,315,_T("S5"));
dc.TextOut(740,65,_T("S6"));
dc.TextOut(985,270,_T("X"));
dc.TextOut(975,205,_T("XN"));
dc.TextOut(530,275,_T("XI"));
dc.TextOut(530,220,_T("XII"));
dc.TextOut(595,320,_T("X3"));
dc.TextOut(565,170,_T("X4"));
dc.TextOut(605,370,_T("X5"));
dc.TextOut(575,120,_T("X6"));
dc.TextOut(865,275,_T("D1"));
dc.TextOut(255,265,_T("D2"));
dc.TextOut(400,320,_T("D4"));
dc.TextOut(450,270,_T("D6"));
dc.TextOut(150,210,_T("XD"));
//標示股道
dc.TextOut(635,255,_T("IG"));
dc.TextOut(635,205,_T("IIG"));
dc.TextOut(635,305,_T("3G"));
dc.TextOut(635,155,_T("4G"));
dc.TextOut(635,355,_T("5G"));
dc.TextOut(635,105,_T("6G"));
dc.TextOut(220,305,_T("D2G"));
dc.TextOut(420,305,_T("6/14G"));
//標示道岔
dc.TextOut(930,180,_T("1"));
dc.TextOut(330,305,_T("2"));
dc.TextOut(900,260,_T("3"));
dc.TextOut(365,230,_T("4"));
dc.TextOut(845,205,_T("5"));
dc.TextOut(365,280,_T("6"));
dc.TextOut(810,155,_T("7"));
dc.TextOut(380,180,_T("8"));
dc.TextOut(845,230,_T("9"));
dc.TextOut(815,270,_T("11"));
dc.TextOut(470,230,_T("12"));
dc.TextOut(500,305,_T("14"));
dc.TextOut(470,205,_T("16"));
dc.TextOut(500,155,_T("18"));
dc.TextOut(555,280,_T("20"));
dc.TextOut(415,255,_T("10"));
dc.SetTextColor(RGB(255,255,0));//設定標示為黃色
//標示漢字
dc.TextOut(55,215,_T("沈陽北方向"));
dc.TextOut(1140,215,_T("秦皇島方向"));
dc.SetTextColor(RGB(255,255,255));//設定標示為白色
dc.TextOut(460,345,_T("安全線"));
CDialogEx::OnPaint();
}
//當用戶拖動最小化視窗時系統呼叫此函式取得游標
//顯示。
HCURSOR C王思嘉Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CAboutDlg::OnLButtonDown(UINT nFlags, CPoint point)
{ CPaintDC dc(this); // 用于繪制的設備背景關系
//畫灰色直線
//創建寬度為3的灰色畫筆
CPen penSolid(PS_SOLID,2,RGB(100,100,100));
CPen*pOldPen=NULL;
dc.SelectObject(&penSolid);
//選擇進路:東郊方向到ⅠG
//改變道岔
switch(m_LMouseDownStep)
{
case 1 :
if((point.x>140)&&(point.x<160)&&(point.y>230)&&(point.y<250))
{
dc.MoveTo(140,230);//140,230,160,255
dc.LineTo(160,230);
dc.LineTo(160,250);
dc.LineTo(140,250);
dc.LineTo(140,230);
//draw rectangle-XD
m_LMouseDownStep++;
}
break;
case 2:
if((point.x>855)&&(point.x<875)&&(point.y>250)&&(point.y<270))
{
dc.MoveTo(855,250);//855,250,875,270
dc.LineTo(875,250);
dc.LineTo(875,270);
dc.LineTo(855,270);
dc.LineTo(855,250);
//draw rectangle-D1
m_LMouseDownStep--;
Searchroute();
break;
}
}
}
void CAboutDlg::Searchroute()
{
CPaintDC dc(this); // 用于繪制的設備背景關系//畫灰色直線//創建寬度為3的灰色畫筆
CPen penSolid(PS_SOLID,3,RGB(100,100,100));
CPen*pOldPen=NULL;
dc.SelectObject(&penSolid);
penSolid.DeleteObject();//洗掉畫筆
penSolid.CreatePen(PS_SOLID,2,RGB(0,0,0));
dc.SelectObject(&penSolid);//新建寬度為2黑色畫筆
dc.MoveTo(140,230);//140,230,160,270
dc.LineTo(160,230);
dc.LineTo(160,270);
dc.LineTo(140,270);
dc.LineTo(140,230);
//draw rectangle-XD
dc.MoveTo(855,250);//855,250,875,270
dc.LineTo(875,250);
dc.LineTo(875,270);
dc.LineTo(855,270);
dc.LineTo(855,250);
//draw rectangle-D1
//改變信號燈
//改變XD
penSolid.DeleteObject();//洗掉畫筆
penSolid.CreatePen(PS_SOLID,1,RGB(255,255,0));
dc.SelectObject(&penSolid);//新建寬度為1黃色畫筆
CBrush brush(RGB(255,255,0));//新建黃色刷子
dc.SelectObject(&brush);
dc.Ellipse(140,230,160,250);
dc.Ellipse(161,230,181,250);//XD
//改變軌道
penSolid.DeleteObject();//洗掉畫筆
penSolid.CreatePen(PS_SOLID,3,RGB(0,255,0));
dc.SelectObject(&penSolid);//新建寬度為3綠畫筆
dc.MoveTo(135,250);
dc.LineTo(465,250);//7DG
dc.MoveTo(475,250);
dc.LineTo(840,250);//11-13DG
dc.MoveTo(850,250);
dc.LineTo(1240,250);//13-15
dc.SelectObject(pOldPen);
penSolid.DeleteObject();//洗掉畫筆
penSolid.CreatePen(PS_SOLID,3,RGB(0,0,0));
dc.SelectObject(&penSolid);//新建寬度為3黑色畫筆
dc.MoveTo(135,250);
dc.LineTo(465,250);
dc.MoveTo(475,320);
dc.LineTo(1240,320);
penSolid.DeleteObject();//洗掉畫筆
penSolid.CreatePen(PS_SOLID,2,RGB(0,0,255));
dc.SelectObject(&penSolid);//新建寬度為2藍色畫筆
dc.MoveTo(875,250);
dc.LineTo(875,270);//D17
}
uj5u.com熱心網友回復:
確定是要CAboutDlg執行OnLButtonDown?uj5u.com熱心網友回復:
你的操作是在About對話框中進行的?訊息處理的宣告和物體放到資源對應的視窗類中
uj5u.com熱心網友回復:
ON_COMMAND(ID_32772, &CAboutDlg::On32772)ON_COMMAND(ID_32775, &CAboutDlg::On32775)
void CAboutDlg::OnLButtonDown(UINT nFlags, CPoint point)
你這幾個問題都是類向導里面添加訊息回應函式的時候 你上面沒有選你的dlg
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/99747.html
標籤:界面
上一篇:mfc,opencv,通過socket向android端傳輸實時圖片
下一篇:用vc如何讀取頁面內容
