对Pen对话框来说,要把选中的线宽存储在CPenDialog类的数据成员m_PenWidth中。
可以通过右击CPenDialog类名,并从上下文菜单中选择适当菜单项的方法添加该数据成员,也可以直接把他添加到类定义。
class CPenDialog:public CDialog
{
//construction
public:
CPenDialog(CWnd* pParent=NULL);//standard constructor
//Dialog Data
public:
int m_PenWidth;//Record the pen width
//Plus the rest of the class definition...
};
使用m_PenWidth数据成员把对应于文档中当前线宽的单选按钮设置为选中状态,还要把对话框中的线宽存储在该成员中,以便在对话框关闭时也可以获取用户的选择。
以便在对话框关闭时也可以获取用户的选择。此刻,可以在类的构造函数中把m_PenWidth初始化为0.
1.初始化控件
可以通过重写在基类CDialog中定义的OnInitDialog()函数来初始化按钮。OnInitDialog()函数是在响应WM_INITDIALOG消息时被调用的,该消息是在执行DoModal()的过中,正好在显示对话框之前发送的。
2.处理按钮消息
可以给CPenDialog类添加BN_CLICKED消息的处理程序。
void CPenDialog::OnPenwidth0()
{
m_PenWidth=0;
}
3.完成对话框的操作
必须修改CSketcherDoc类中的OnPenwidth()处理程序,才能使对话框有效。
//handler for the pen width menu item
void CSketcherDoc::OnPenwidth()
{
CPenDialog aDlg;
//set the pen width in the dialog to that stored in the document
aDlg.m_PenWidth=m_PenWidth;
//DIsplay the dialog as modal
//when closed with OK,get the pen width
if(aDlg.DoModal()==IDOK)
m_PenWidth=aDlg.m_PenWidth;
}
首先把在文档的m_PenWidth成员中存储的线宽传递给aDlg对象的m_PenWidth成员;还需要给CSketcherDoc类添加m_PenWidth成员。
注意:即使用DoModal()函数返回某个值时对话框关闭,aDlg对象也仍然存在,因此可以放心地调用该对象的成员函数。aDlg对象是在从OnPenwidth()函数返回时自动销毁。