// CChooseAreas.cpp : implementation file
//

#include "stdafx.h"
#include "BsqView.h"
#include "ChooseAreas.h"
#include "MainFrm.h"
#include "BsqViewView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CChooseAreas dialog


CChooseAreas::CChooseAreas(CWnd* pParent /*=NULL*/)
	: CDialog(CChooseAreas::IDD, pParent)
{
	//{{AFX_DATA_INIT(CChooseAreas)
	//}}AFX_DATA_INIT
}


void CChooseAreas::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CChooseAreas)
	DDX_Control(pDX, IDC_LIST1, m_list);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CChooseAreas, CDialog)
	//{{AFX_MSG_MAP(CChooseAreas)
	ON_BN_CLICKED(IDC_CHOOSE_NEW, OnChooseNew)
	ON_BN_CLICKED(IDC_CHOOSE_DEL, OnChooseDel)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_CHOOSE_ERASE, OnChooseErase)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChooseAreas message handlers

void CChooseAreas::OnChooseNew() 
{
    // 添加新区域
    Areas++; // 区域数加1
	CString str;
	str.Format('区域 #%d [%s]    0个点',Areas,ColorString[Areas]); // 格式化字符串
	m_list.AddString(str); // 添加到列表框中
}

void CChooseAreas::OnChooseDel() 
{
    // 删除选中的区域
   int nIndex;
   nIndex=m_list.GetCurSel(); // 获取当前选中项的索引
   
   CString string;
   m_list.GetText(nIndex,string); // 获取选中项的文本内容
   CString str='123456789';
   CString str1='';
   int n=string.FindOneOf(str);
   while(string.GetAt(n)!='[')
   {     
	    str1+=string.GetAt(n);
		string.Delete(n,1);
   }
  	
   CMainFrame* pframe = (CMainFrame *)AfxGetApp()->GetMainWnd(); // 获取主窗口指针
   CMDIChildWnd* pChildWnd = pframe->MDIGetActive(); // 获取当前活动的子窗口
   CBsqViewView* pView = (CBsqViewView *) pChildWnd->GetActiveView(); // 获取当前活动的视图

   pView->bigdlg->DelAreas=atoi(str1); // 将要删除的区域编号存储到对话框的成员变量中
   pView->bigdlg->AreasBool[pView->bigdlg->DelAreas]=false; // 将要删除的区域的标记设置为false
   m_list.DeleteString(nIndex); // 从列表框中删除选中项
   pView->bigdlg->Invalidate(); // 重绘大图
}


void CChooseAreas::OnClose() 
{
    // 关闭对话框
    CMainFrame* pframe = (CMainFrame *)AfxGetApp()->GetMainWnd(); // 获取主窗口指针
   CMDIChildWnd* pChildWnd = pframe->MDIGetActive(); // 获取当前活动的子窗口
   CBsqViewView* pView = (CBsqViewView *) pChildWnd->GetActiveView(); // 获取当前活动的视图

   pView->bigdlg->bChooseAreas = false; // 将选择区域模式标记设置为false
   pView->bigdlg->workmode= pView->bigdlg->CommonMode; // 将工作模式设置为常规模式
   pView->bigdlg->Invalidate(); // 重绘大图
   CDialog::OnClose(); // 关闭对话框
}

void CChooseAreas::PostNcDestroy() 
{
    // 销毁对话框
	delete this; // 释放对话框内存
	CDialog::PostNcDestroy(); // 调用基类函数
}

void CChooseAreas::OnChooseErase() 
{
    // 退出选择区域模式
	CMainFrame* pframe = (CMainFrame *)AfxGetApp()->GetMainWnd(); // 获取主窗口指针
   CMDIChildWnd* pChildWnd = pframe->MDIGetActive(); // 获取当前活动的子窗口
   CBsqViewView* pView = (CBsqViewView *) pChildWnd->GetActiveView(); // 获取当前活动的视图
   
   pView->bigdlg->bChooseAreas = false; // 将选择区域模式标记设置为false
   pView->bigdlg->Invalidate(); // 重绘大图
}

CChooseAreas 类成员函数说明:

  • OnChooseNew(): 添加新区域,将新区域信息添加到列表框中。
  • OnChooseDel(): 删除选中的区域,从列表框中删除选中项,并更新相关数据。
  • OnClose(): 关闭选择区域对话框,并恢复主窗口的正常工作模式。
  • PostNcDestroy(): 销毁对话框,释放内存。
  • OnChooseErase(): 退出选择区域模式,恢复主窗口的正常工作模式。

使用方法:

  1. 创建一个 CChooseAreas 对象,并将其显示出来。
  2. 使用 OnChooseNew() 函数添加新区域。
  3. 选择需要删除的区域,并使用 OnChooseDel() 函数删除。
  4. 当选择区域操作完成后,可以使用 OnClose() 或 OnChooseErase() 函数关闭对话框。

注意:

  • 该代码示例中使用了 MFC 的基本机制,包括消息映射、数据交换等。
  • 具体的实现细节可能根据实际情况进行调整。
  • 请根据您的实际需求修改代码。
CChooseAreas 类:MFC 中的选择区域对话框

原文地址: https://www.cveoy.top/t/topic/jnwv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录