CChooseAreas 类:MFC 中的选择区域对话框
// 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(): 退出选择区域模式,恢复主窗口的正常工作模式。
使用方法:
- 创建一个 CChooseAreas 对象,并将其显示出来。
- 使用 OnChooseNew() 函数添加新区域。
- 选择需要删除的区域,并使用 OnChooseDel() 函数删除。
- 当选择区域操作完成后,可以使用 OnClose() 或 OnChooseErase() 函数关闭对话框。
注意:
- 该代码示例中使用了 MFC 的基本机制,包括消息映射、数据交换等。
- 具体的实现细节可能根据实际情况进行调整。
- 请根据您的实际需求修改代码。
原文地址: https://www.cveoy.top/t/topic/jnwv 著作权归作者所有。请勿转载和采集!