public/protected/private
public:可以被该类中的函数、子类的函数、友元函数访问,也可以由该类的对象访问;
protected:可以被该类中的函数、子类的函数、友元函数访问,但不可以由该类的对象访问;
private:可以被该类中的函数、友元函数访问,但不可以由子类的函数、该类的对象、访问。
创建对话框资源
生成对话框类
生成新类Setup
•修改应用菜单,处理配置信息
•选项处理函数
定义应用如何使用"配置对话框"设置应用参数
void Cdraw3View::OnSetup()
{
// TODO: 在此添加命令处理程序代码
Setup setup;
setup.m_nLineWidth = m_nLineWidth;
setup.m_nLineStyle = m_nLineStyle;
setup.m_cc = m_color;
if (IDOK == setup.DoModal())
{
m_color = setup.m_cc;
m_nLineWidth = setup.m_nLineWidth;
m_nLineStyle = setup.m_nLineStyle;
if (m_nLineStyle != PS_SOLID )
{
m_nLineWidth = 1;
}
}
}
线条宽度
CSliderCtrl 滑动条
BOOL Setup::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
// 得到滑动条对象指针
CSliderCtrl* sli = (CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
// 设置滑动条范围
sli->SetRange(1, 30);
// 设置标尺间隔
sli->SetTicFreq(1);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
•将滑动条绑定成员变量
线条类型
•设计界面,使用GroupBox 和 3个 RadioButton(单选按钮)
•将第1个RadioButton的Group属性设置为True,这一步将3个RadioButton编为一组
•将这组选项绑定到成员变量m_nLineStyle
画笔颜色
•在选项对话框中新增Button,改Button标题为"颜色"
•为Button添加点击事件响应函数
void Setup::OnBnClickedButton1()
{
// 打开颜色对话框
CColorDialog cdlg;
cdlg.m_cc.Flags |= CC_RGBINIT;
cdlg.m_cc.rgbResult = m_cc;
if (IDOK == cdlg.DoModal())
{
//获取颜色
m_cc = cdlg.m_cc.rgbResult;
}
Invalidate();
}
•在Draw3View.cpp中获取对话框中的颜色值
colDlg.m_cc.Flags 的成员是一个标志位,通过按位或运算 |= 操作,将 CC_RGBINIT 标志位设置到 colDlg.m_cc.Flags 中。这个标志位的含义是告诉颜色对话框使用 RGB 颜色模式。
示例效果
•在选项对话框上用GroupBox画一个区域,将在这个区域中画一条线展示画线效果
•分别对CSlideCtrl和RadioButton设置响应事件
void Setup::OnBnClickedRadio3()
{
Invalidate();
}
void Setup::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// 响应滑块控件的水平移动消息
Invalidate();
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
•在WM_PAINT事件中完成画线绘制工作
void Setup::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialogEx::OnPaint()
//同步控件和变量
UpdateData();
//在示例区域绘制一条线
CPen pen(m_nLineStyle,m_nLineWidth,m_color);
CPen *pOldPen=dc.SelectObject(&pen);
//获得IDC_SAMPLE控件的坐标(CRect)
CRect rect;
//将IDC_SAMPLE控件的坐标信息存放到rect变量中
GetDlgItem(IDC_SAMPLE)->GetWindowRect(&rect);
//将屏幕坐标和应用坐标进行转换
ScreenToClient(&rect);
dc.MoveTo(rect.left+20,rect.top+rect.Height()/2 );
dc.LineTo(rect.right-20,rect.top+rect.Height()/2);
dc.SelectObject(pOldPen);
}