// PZMedical2121ZDlg.cpp : implementation file // #include "stdafx.h" #include "PZMedical2121Z.h" #include "PZMedical2121ZDlg.h" #include "afxdialogex.h" #include "AppSettings.h" #include "AcqCtrl.h" #include "PZMedical2121ZCtrl.h" #include "EComRFMessage_i.h" #define MSG_RFOC_INFO 1001 #ifdef _DEBUG #define new DEBUG_NEW #endif extern CString strAppPath; extern CString strAppDYNHandleName; extern CString strAppMechCompHandleName; extern CString strAppRFDTHandleName; extern CString strAppDRDTHandleName; extern CString strAppHardwareHandleName; extern CString strAppRFOCHandleName; extern CString g_strHWConfFilePath; CAppSettings *g_pAcqParam; #define IMAGEWIDTH 2880 #define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } } // CGetImageDataDlg 对话框 // CAboutDlg dialog used for App About class CAboutDlg : public CDialogEx { public: CAboutDlg(); // Dialog Data enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CPZMedical2121ZDlg dialog CPZMedical2121ZDlg::CPZMedical2121ZDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CPZMedical2121ZDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_pDetectAcq = NULL; } void CPZMedical2121ZDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CPZMedical2121ZDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_MESSAGE(WM_COPYDATA, OnCOPYDATA_MSG) ON_MESSAGE(ZSKK_MSG_RFDT_WFIN, OnMSGWORKFLOW) ON_MESSAGE(ZSKK_MSG_RFDT_CALIN, OnMSGCALIBRATION) ON_MESSAGE(ZSKK_MSG_RFDT_PARAMIN, OnMSGPARAMETER) ON_WM_TIMER() ON_BN_CLICKED(IDC_BUTTON_Radacq, &CPZMedical2121ZDlg::OnBnClickedButtonRadacq) ON_BN_CLICKED(IDC_BUTTON_CfAcq, &CPZMedical2121ZDlg::OnBnClickedButtonCfacq) ON_BN_CLICKED(IDC_BUTTON_SelectCF, &CPZMedical2121ZDlg::OnBnClickedButtonSelectcf) ON_BN_CLICKED(IDC_BUTTON_Stop, &CPZMedical2121ZDlg::OnBnClickedButtonStop) ON_BN_CLICKED(IDC_BUTTON_Offset, &CPZMedical2121ZDlg::OnBnClickedButtonOffset) ON_BN_CLICKED(IDC_BUTTON_Gain, &CPZMedical2121ZDlg::OnBnClickedButtonGain) ON_BN_CLICKED(IDC_BUTTON_SelectRAD, &CPZMedical2121ZDlg::OnBnClickedButtonSelectrad) END_MESSAGE_MAP() LRESULT CPZMedical2121ZDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if (message == WM_NCPAINT) ShowWindow(SW_HIDE); return CDialog::DefWindowProc(message, wParam, lParam); } BOOL CPZMedical2121ZDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. 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); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here Initial(); return TRUE; // return TRUE unless you set the focus to a control } void CPZMedical2121ZDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CPZMedical2121ZDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } // The system calls this function to obtain the cursor to display while the user drags // the minimized window. HCURSOR CPZMedical2121ZDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } bool CPZMedical2121ZDlg::Initial() { g_pAcqParam = new CAppSettings(); bool bstate = false; if (!g_pAcqParam->Load(g_strHWConfFilePath + "\\Detector.xml")) { AfxMessageBox("Can't find file Detector.xml"); } if (1 == atoi(g_pAcqParam->GetValueByKey(_T("Connection")))) { bstate = true; } if (bstate) { m_pDetectAcq = new PZMedical2121ZCtrl(); } else { m_pDetectAcq = new PZMedical2121ZCtrl(); m_pDetectAcq->InitDETECTOR(this->GetSafeHwnd(), bstate); //生成属性文件 /*delete m_pDetectAcq; m_pDetectAcq = NULL;*/ return false; //m_pDetectAcq = new CDemoCtrl(); } if (!m_pDetectAcq->Create()) return false; m_pDetectAcq->InitDETECTOR(this->GetSafeHwnd(), bstate); return false; } bool CPZMedical2121ZDlg::MSGControl(CWnd *Wnd, int nMSGType, int nMSGwParam, int nMSGpParam, int nMSGOutMode, int nTargetPosition) { CString strHandleName = strAppHardwareHandleName; switch (nTargetPosition) { case ZSKK_MSG_TARGETHANDLE_NULL: break; case ZSKK_MSG_TARGETHANDLE_RFOC: strHandleName = strAppRFOCHandleName; break; case ZSKK_MSG_TARGETHANDLE_RFHARDWARE: strHandleName = strAppHardwareHandleName; break; case ZSKK_MSG_TARGETHANDLE_RFMECHNICAL: strHandleName = strAppMechCompHandleName; break; case ZSKK_MSG_TARGETHANDLE_RFDETECTOR: strHandleName = strAppRFDTHandleName; break; case ZSKK_MSG_TARGETHANDLE_DRDETECTOR: strHandleName = strAppDRDTHandleName; break; case ZSKK_MSG_TARGETHANDLE_RFDYN: strHandleName = strAppDYNHandleName; break; default: break; } CWnd *targetWnd = CWnd::FindWindow(NULL, strHandleName); if (targetWnd != NULL) { if (nMSGOutMode == ZSKK_MSG_TYPE_SYNC_NO) { targetWnd->PostMessage(nMSGType, nMSGwParam, nMSGpParam); } else { targetWnd->SendMessage(nMSGType, nMSGwParam, nMSGpParam); } } return true; } // WM_COPYDATA 消息处理函数 -- 数据传递 LRESULT CPZMedical2121ZDlg::OnCOPYDATA_MSG(WPARAM wParam, LPARAM lParam) { m_pDetectAcq->OnCOPYDATA_MSG_Process(wParam, lParam); return 0; } LRESULT CPZMedical2121ZDlg::OnMSGWORKFLOW(WPARAM wParam, LPARAM lParam) { m_pDetectAcq->OnMSGWORKFLOW_Process(wParam, lParam); if (wParam == ZSKK_DETECTOR_WF_EXIT) { OnCancel(); } return 0; } LRESULT CPZMedical2121ZDlg::OnMSGCALIBRATION(WPARAM wParam, LPARAM lParam) { m_pDetectAcq->OnMSGCALIBRATION_Process(wParam, lParam); return 0; } LRESULT CPZMedical2121ZDlg::OnMSGPARAMETER(WPARAM wParam, LPARAM lParam) { m_pDetectAcq->OnMSGPARAMETER_Process(wParam, lParam); return 0; } BOOL CPZMedical2121ZDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 switch (pMsg->message) { case WM_KEYDOWN: if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) { return TRUE; } break; default: break; } return CDialog::PreTranslateMessage(pMsg); } void CPZMedical2121ZDlg::OnBnClickedCancel() { // TODO: 在此添加控件通知处理程序代码 OnCancel(); } void CPZMedical2121ZDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialog::OnTimer(nIDEvent); } //单帧点片rad void CPZMedical2121ZDlg::OnBnClickedButtonRadacq() { // TODO: 在此添加控件通知处理程序代码 m_pDetectAcq->SetGrabMode(ZSKK_HARDWARE_SEQUENCE_SINGLERAD); m_pDetectAcq->StartGrab(); } //连续透视cf void CPZMedical2121ZDlg::OnBnClickedButtonCfacq() { // TODO: 在此添加控件通知处理程序代码 m_pDetectAcq->SetGrabMode(ZSKK_HARDWARE_SEQUENCE_CONTINOUSFLU); m_pDetectAcq->StartGrab(); } //SelectFLUMode() void CPZMedical2121ZDlg::OnBnClickedButtonSelectcf() { // TODO: 在此添加控件通知处理程序代码 m_pDetectAcq->SelectFLUMode(101, 0); //第二个参数目前用不到,暂记为0 m_pDetectAcq->ActiveFLUMode(); } void CPZMedical2121ZDlg::OnBnClickedButtonStop() { // TODO: 在此添加控件通知处理程序代码 m_pDetectAcq->StopGrab(); } void CPZMedical2121ZDlg::OnBnClickedButtonOffset() { // TODO: 在此添加控件通知处理程序代码 m_pDetectAcq->BeginCalibration(3, 0, 4); //CF下的offset } void CPZMedical2121ZDlg::OnBnClickedButtonGain() { // TODO: 在此添加控件通知处理程序代码 m_pDetectAcq->BeginCalibration(3, 0, 2); //CF下的gain //m_pDetectAcq->CalibNextStep(); } //SelectRADMode() void CPZMedical2121ZDlg::OnBnClickedButtonSelectrad() { // TODO: 在此添加控件通知处理程序代码 m_pDetectAcq->SelectRADMode(301, 0); //第二个参数目前用不到,暂记为0 m_pDetectAcq->ActiveRADMode(); }