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()函数来处理数据同步,使用的上面的方法更加简单。至于常用的同步函数我会在后面的文章中作一个补充。
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。