// ToolDialog.cpp : 实现文件 // #include "stdafx.h" #include "ShowInt.h" #include "ToolDialog.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CToolDialog 对话框 IMPLEMENT_DYNAMIC(CToolDialog, CBCGPDialog) CToolDialog::CToolDialog(CWnd* pParent /*=NULL*/) : CBCGPDialog(IDD_DIALOG, pParent) , m_Value(0) , m_Value2(20) { EnableVisualManagerStyle(TRUE, TRUE); m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); //m_Value = NULL; //m_Value = new int; //*m_Value = 10; } void CToolDialog::DoDataExchange(CDataExchange* pDX) { CBCGPDialog::DoDataExchange(pDX); // DDX_Text(pDX, IDC_EDIT_VALUE, m_Value); DDX_Text(pDX, IDC_EDIT_VALUE2, m_Value2); DDX_Control(pDX, IDC_EDIT_VALUE, m_wndValue); } BEGIN_MESSAGE_MAP(CToolDialog, CBCGPDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDOK, &CToolDialog::OnBnClickedOk) ON_WM_DESTROY() END_MESSAGE_MAP() // CToolDialog 消息处理程序 BOOL CToolDialog::OnInitDialog() { CBCGPDialog::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 UpdateData(FALSE); //放在构造函数里会因为没有没有析构函数释放资源而崩溃 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CToolDialog::OnSysCommand(UINT nID, LPARAM lParam) { CBCGPDialog::OnSysCommand(nID, lParam); } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CToolDialog::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 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; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CBCGPDialog::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CToolDialog::OnQueryDragIcon() { return static_cast(m_hIcon); } void CToolDialog::OnBnClickedOk() { UpdateData(TRUE); CBCGPDialog::OnOK(); } void CToolDialog::Running(bool bRun) { } void CToolDialog::Serialize(CArchive& ar) { int v = 123; int paranum;//参数数量 if (ar.IsStoring())//保存参数流程 { // storing code paranum = 1; ar << paranum;//先保存参数数量 ar << (int)0 << v; } else//加载参数流程,参数加载顺序一定要跟保存顺序一致 { // loading code int para; ar >> paranum;//读取参数数量 for (int i = 0; i < paranum; i++) { ar >> para; switch (para) { case 0: ar >> v; break; default: { execLogCallBack(MSG_WAY::_ERROR, _T("配置文档错误!")); } break; } } } } EVEN CToolDialog::GetEvent() { m_Even.hEvenHandle = NULL; //如该工具不启用事件功能,请注释以下语句 // m_Even.hEvenHandle = CreateEventW(NULL, TRUE, FALSE, NULL); //在需要的地方用以下语句设置事件和手动复位 // SetEvent(m_Even.hEvenHandle); // ResetEvent(m_Even.hEvenHandle); return m_Even; } int CToolDialog::Execute() { m_Value3 = m_Value + m_Value2; CString str; str.Format(_T("%d + %d = %d "), m_Value, m_Value2, m_Value3); m_wndValue.SetWindowText(str); return 0; } void CToolDialog::execToolStateCallBack(int nState) { if (m_pReceToolStateFunction != NULL) { m_pReceToolStateFunction(m_strToolName, nState, m_ToolStateUserParam); } } void CToolDialog::execLogCallBack(MSG_WAY nType, CString strMassage) { if (m_pReceLogFunction != NULL) { m_pReceLogFunction(m_strToolName, nType, strMassage, m_LogUserParam); } } void CToolDialog::execOnExecuteCallBack(CString strToolName) { if (m_pReceOnExecuteFunction != NULL) { m_pReceOnExecuteFunction(strToolName, m_OnExecuteUserParam); } } void CToolDialog::execToolBusyCallBack(int nState, CString strMassage) { if (m_pReceToolBusyFunction != NULL) { m_pReceToolBusyFunction(m_strToolName, nState, strMassage, m_OnExecuteUserParam); } } void CToolDialog::OnDestroy() { CBCGPDialog::OnDestroy(); // TODO: 在此处添加消息处理程序代码 //if (p != NULL) //{ // delete p; //} }