VC++开发GIS系统(45)导出输入点对话框并调用

先梳理一下思路,在文章《VC++开发GIS系统(38)添加响应输入点消息》中我们已经完成了输入点的简单消息响应。下面的工作便是完善这个消息响应,比如点击了输入点菜单,逻辑上应该弹出设置点属性的对话框。因为这个对话框,所以我们新建一个对话框的模块见《VC++开发GIS系统(39)对话框模块的建立》。那怎样导出一个对话框呢?为此我写了下面教程:

VC++开发GIS系统(40)画一个输入点的对话框

VC++开发GIS系统(41)补充知识MFC中ComboBox(下拉选择框)的使用方法

VC++开发GIS系统(42)补充知识MFC中调用调色板(CColorDialog)

VC++开发GIS系统(43)输入点对话框变量的响应

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

效果

VC++开发GIS系统(44)补充知识MFC中常见的DDX(数据交换)和DDV(数据验证)函数 VC++开发GIS系统(46)自定义一个CDC绘图类

作者:,GIS爱好者。
分享本文,请您带上本文链接
分享到:

发表评论