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

在上一篇文章《VC++开发GIS系统(40)画一个输入点的对话框》中我已经画了一个对话框,虽然不好看,但是功能还是有。有上文中我已经为这个对话框新建了一个类,本文中将继续前面的内容为这个对话框中的元素添加变量。

半径变量

上图中,半径是一个输入框,需要手动输入,需要设置一个变量和这个输入框绑定。在输入框右击,选择添加变量。

因为半径是一个数值,这里可以给它绑定一个int或者float变量,本文绑定是一个int变量。如图:

注意图中的3个红框处,因为这里输入数值,所以类型一定要先value。可以在这个界面设置变量的范围,也就是下面这个红框。如果这里没有设置,也可以用代码的方式设置输入范围,在后面文章中我也会具体介绍。

点类型变量

点类型这里使用的是一个ComboBox的控件,关于这个控件的使用方法可以参考文章《VC++开发GIS系统(41)补充知识MFC中ComboBox(下拉选择框)的使用方法》,本文给这个控件绑定了一个mComboxType变量。

点颜色变量

这里需要给点设置颜色,自然要用到调色板了,关于MFC中调色板的调用可以参考文章《VC++开发GIS系统(42)补充知识MFC中调用调色板(CColorDialog)》,给按钮添加颜色选择的响应函数。代码如下:

void CDialogPointInput::OnBnClickedButtonPointColor()
{
    // TODO:  在此添加控件通知处理程序代码
    CColorDialog MyCorDlg;
    if (MyCorDlg.DoModal() == IDOK)
    {
        mPointColor = MyCorDlg.GetColor();
    }
}

变量的数据同步

上文中只要半径变量是直接获取的,颜色和类型只是用了一个控件,下面需要把变量值和控件的选择同步起来。

变量的定义
class CDialogPointInput : public CDialog
{
    DECLARE_DYNAMIC(CDialogPointInput)

public:
    CDialogPointInput(CWnd* pParent = NULL);   // 标准构造函数
    virtual ~CDialogPointInput();

// 对话框数据
    enum { IDD = IDD_DIALOG_INPUT_POINT };

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

    DECLARE_MESSAGE_MAP()
public:
    int mPointRadio;//半径
    int mPointStyle;//类型
    int mPointLayer;//图层
    COLORREF mPointColor;//颜色
    CComboBox mComboxType;//ComboBox控件变量
    afx_msg void OnBnClickedButtonPointColor();//响应设置颜色函数
};
变量初始化

有对话框类的构造函数中初始化这些变量,虽然变量没有初始化,系统也会自动初始化一个,但是我强烈建议要初始化变量!!!!!我的教训《变量初始化—写程序必有的习惯 | 闻心阁

CDialogPointInput::CDialogPointInput(CWnd* pParent /*=NULL*/)
    : CDialog(CDialogPointInput::IDD, pParent)
    , mPointRadio(0)
{
    mPointLayer = -1;
    mPointRadio = 1;
    mPointStyle = 0;
    mPointColor = RGB(0, 0, 0);
}
变量和窗口同步

颜色变量已经在选择按键函数中处理了,其他可以通过下面的方法同步。在对话框类的DoDataExchange函数中添加下面的代码:

void CDialogPointInput::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT_POINT_RADIO, mPointRadio);//同步输入框的值到mPointRadio
    DDX_Control(pDX, IDC_COMBO_POINT_TYPE, mComboxType);
    DDX_CBIndex(pDX, IDC_COMBO_POINT_TYPE, mPointStyle);//同步mComboxType选项值到mPointStyle
    DDV_MinMaxInt(pDX, mPointRadio, 1, 20);//设置mPointRadio(半径)的最大和最小值
}

可以看见这里没没有使用updateData()函数来处理数据同步,使用的上面的方法更加简单。至于常用的同步函数我会在后面的文章中作一个补充。

VC++开发GIS系统(42)补充知识MFC中调用调色板(CColorDialog) IDL设置PLOT窗口大小

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

发表评论