VC++开发GIS系统(249)设置注释属性对话框

上文《VC++开发GIS系统(248)输入注释之类设计》设计了一个类用于实现输入注释的相关功能,其中用到了一个 getLabelPro 函数,本文将实现这个函数。

画一个对话框

切换到资源视图,在malaDialogs模块中画一个对话框用于用户设置注释的相关属性,下面是我画的。

新建类并添加变量

画完对话框,就要给这个对话框添加一个对应的类,并为其添加控件对应的变量。其中这里用到了一个下拉选择框的控件(combobox可以参考文章《VC++开发GIS系统(41)补充知识MFC中ComboBox(下拉选择框)的使用方法》),变量传值可以参考文章《VC++开发GIS系统(44)补充知识MFC中常见的DDX(数据交换)和DDV(数据验证)函数》。

本类( CDialogInputLabel )的变量有:

public:
    int mLabelHeight;
    int mLabelWidth;
    int mLabelAngle;
    int mTextAngle;
    int mTextOffset;
    CComboBox mComFont;
    CString mTextFont;
    COLORREF mTextColor;
    afx_msg void OnBnClickedButtonSetColor();
    CString mTextStr;
    int mWeight;
    

分别对应《VC++开发GIS系统(243)基本GIS系统中注释单元的结构体》中的区各属性。

其中OnBnClickedButtonSetColor 函数用于实现设置注释文字颜色,可以参考《VC++开发GIS系统(42)补充知识MFC中调用调色板(CColorDialog)》。

导出对话框

在 _malaDialogs.h中添加下面的函数

/*
* 输入注释对话框
*/
bool maladialogsdll dlgInputLabel(malaLabelPro &paramPro);

并在_malaDialogs.cpp中实现这个函数

/*
* 输入注释对话框
*/
bool maladialogsdll dlgInputLabel(malaLabelPro &paramPro)
{
    CDialogInputLabel dlg;
    if (IDOK == dlg.DoModal())
    {
        paramPro.labelHeight = dlg.mLabelHeight;
        paramPro.labelWidth = dlg.mLabelWidth;
        paramPro.labelAngle = dlg.mLabelAngle;
        paramPro.textColor = dlg.mTextColor;
        paramPro.textAngle = dlg.mTextAngle;
        paramPro.textFont = dlg.mTextFont;
        paramPro.textOff = dlg.mTextOffset;
        paramPro.textStr = dlg.mTextStr;
        paramPro.fontWeight = dlg.mWeight;
        return true;
    }
    return false;
}

这个函数的作用是传入一个 paramPro 变量,获取用户设置的注释属性。

getLabelPro函数

最后在_malaLabel.cpp中实现 getLabelPro 函数如下:

void CmalaLabelsInput::getLabelPro()
{
    //字体对话框
    if (dlgInputLabel(mLabelPro) == FALSE)
    {
        mLabelPro.labelHeight = 20;    //字体高度
        mLabelPro.labelHeight = 10;     //字体宽度
        mLabelPro.labelAngle = 0;  //字体角度
        mLabelPro.textAngle = 0; //文本角度
        mLabelPro.textColor = RGB(0, 0, 0);//字体颜色
        mLabelPro.textOff = 1;  //字体间距
        mLabelPro.textFont = L"华文楷体";  //字体类型
        mLabelPro.fontWeight = 400;
    }
}

这里调用的 dlgInputLabel 就是上面在malaDialogls中定义的函数了。

详细代码可以参考:GitHub

VC++开发GIS系统(248)输入注释之类设计 VC++开发GIS系统(250)绘制文字的函数

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

发表评论