VC++开发GIS系统(45)导出输入点对话框并调用
先梳理一下思路,在文章《VC++开发GIS系统(38)添加响应输入点消息》中我们已经完成了输入点的简单消息响应。下面的工作便是完善这个消息响应,比如点击了输入点菜单,逻辑上应该弹出设置点属性的对话框。因为这个对话框,所以我们新建一个对话框的模块见《VC++开发GIS系统(39)对话框模块的建立》。那怎样导出一个对话框呢?为此我写了下面教程:
VC++开发GIS系统(41)补充知识MFC中ComboBox(下拉选择框)的使用方法
VC++开发GIS系统(42)补充知识MFC中调用调色板(CColorDialog)
VC++开发GIS系统(44)补充知识MFC中常见的DDX(数据交换)和DDV(数据验证)函数
分别介绍了导出一个对话框的具体工作,之所以写的这么细致,是因为后面也会用到,但到时就不会写的这么详细了。既然我们把这个对话框画出来了,也对内部的变量做了绑定,下面的工作就是要导出这个对话框,并在外面调用。
函数导出
在_malaDialogs.cpp文件中完善导出的函数,代码如下:
/*
* 输入点的对话框实现
*/
bool maladialogsdll dlgInputPoint(malaPointPro& paramPointPro)
{
CDialogPointInput dlg;
if (IDOK==dlg.DoModal())
{
paramPointPro.pointStyle = dlg.mPointStyle;
paramPointPro.pointLayer = dlg.mPointLayer;
paramPointPro.pointRadio = dlg.mPointRadio;
paramPointPro.pointColor = dlg.mPointColor;
return true;
}
return false;
}
这里使用我们在文章《VC++开发GIS系统(40)画一个输入点的对话框》中建立的对话框类CDialogPointInput建立一个对象dlg,并调用DoModal函数弹出这个对话框。
调用函数
既然我们是点击菜单中的输入点按钮就要设置参数,而我们是这样调用的如下:
void CmalagisView::OnButtonPointsInput()
{
// TODO: 在此添加命令处理程序代码
mBaseOper = new CmalaPointsInput(this);
}
所以需要在CmalaPointsInput的构造函数中就要调用这个对话框。CmalaPointsInput是在malaPoints模块中定义的,所以在文件_malaPoints.h中,先包含头文件_mallaDialogs.h
#include "_malaBase.h"
然后定义一个函数GetPointPro用来获取点的属性:
class malapointsdll CmalaPointsInput : public CmalaMouseAction
{
public:
CmalaPointsInput(CView* mView);
~CmalaPointsInput();
void LButtonDown(UINT nFlags, malaPoint point);
void GetPointPro();//获取点的参数(这就用来获取点属性的函数)
private:
malaPoint mPont;
malaPointPro mPointPro;
};
然后在_mallaDialogs.cpp中构造函数中调用GetPointPro函数
CmalaPointsInput::CmalaPointsInput(CView* mView)
{
mBaseView = mView;
GetPointPro();
}
最后在_mallaDialogs.cpp实现GetPointPro函数的具体逻辑
void CmalaPointsInput::GetPointPro()
{
if (dlgInputPoint(mPointPro)==false)
{
mPointPro.pointStyle = 0;
mPointPro.pointLayer = -1;
mPointPro.pointRadio = 1;
mPointPro.pointColor = RGB(0,0,0);
}
//==========debug-info=====
CString a;
a.Format(_T("%d"), mPointPro.pointRadio);
MessageBox(NULL, a, _T("半径"), MB_OK);
a.Format(_T("%d"), mPointPro.pointStyle);
MessageBox(NULL, a, _T("类型"), MB_OK);
a.Format(_T("%d"), mPointPro.pointLayer);
MessageBox(NULL, a, _T("图层"), MB_OK);
a.Format(_T("%d"), GetGValue(mPointPro.pointColor));
MessageBox(NULL, a, _T("颜色"), MB_OK);
}
这样调用的dlgInputPoint函数就是在_malaDialogs.h中定义的弹出对话框的函数,并将用户设置的值传给mPointPro。本文中==false里面的内容是批用户没有设置的话,系统会给的默认设置。
编译并运行
现在系统有现在几个模块:
因为malaPoints依赖malaDialogs模块,所以编译顺序应该是:
malaBase--malaDialogs--malaPoints--malagis
效果
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。