2009-11-08
1. 重载一些虚函数的按钮,消息函数oninitdialog()(注意vc6中是wm_initdialog消息映射而在vs2005中,它是oninitdialog虚函数):
2009-11-082009-11-08
2. IDC_Radio1 设置group为真
IDC_Radio2设置group为假
IDC_Radio3设置group为假
然后IDC_Radio1 设置一个变量就可以了
设置group后,发现radio按钮,有且仅有一个选项了
3. Mprop项目小结:
A
/*((CComboBox)*GetDlgItem(IDC_COMBO1))->AddString("<1000");
((CComboBox)*GetDlgItem(IDC_COMBO1))->AddString("1000-2000");
((CComboBox)*GetDlgItem(IDC_COMBO1))->AddString("2000-3000");
((CComboBox)*GetDlgItem(IDC_COMBO1))->AddString(">3000");*/
错误,改正如下:
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("1000元以下");
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("1000-2000元");
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("2000-3000元");
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("3000元以上");
除了用了propertypage和propertysheet创建多页浏览外,外加一些数据传递功能的补充:
B
界面如下:
C
void CMPropView::OnPropertysheet()
{
// TODO: Add your command handler code here
CPropSheet propsheet("属性表单");
propsheet.DoModal();
if(IDOK==propsheet.DoModal())
{
m_iOccupation=propsheet.m_prop1.m_occupation;
m_strWorkAddr=propsheet.m_prop1.m_workAddr;
m_bLike[0]=propsheet.m_prop2.m_football;
m_bLike[1]=propsheet.m_prop2.m_baseball;
m_bLike[2]=propsheet.m_prop2.m_chess;
m_bLike[3]=propsheet.m_prop2.m_swim;
m_strSalary=propsheet.m_prop3.m_strSalary;
Invalidate();
}
}
The data is passed through propsheet object which incudes class/object members such as m_prop1, and m_occupation is also the data member of m_prop1.
了解到:对象包括对象,对象包括成员的引用方便了程序的编写和调用。在这里我们只用分别在Cmpropview,cprop1,cprop2,cprop3中定义变量,最后通过view了的对象实例化,把所有的东西传递进来。这是非常好的做法
在propsheet类中定义了m_prop1。。三个数据类成员。。。很好的方法
D.
pDC->TextOut(0,0,strTemp);
strTemp="your address:";
strTemp+=m_strWorkAddr;
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
pDC->TextOut(0,tm.tmHeight,strTemp);
这两行做法都是比较的巧妙的。
E
CProp1中添加OnInitDialog()来初始化列表框
BOOL CProp1::OnInitDialog()
{
CPropertyPage::OnInitDialog();
// TODO: Add extra initialization here
// TODO: Add extra initialization here
((CListBox*)GetDlgItem(IDC_LIST2))->AddString("北京");
((CListBox*)GetDlgItem(IDC_LIST2))->AddString("天津");
((CListBox*)GetDlgItem(IDC_LIST2))->AddString("上海");
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
Cprop3中添加OnInitDialog()来初始化组合框
BOOL CProp3::OnInitDialog()
{
CPropertyPage::OnInitDialog();
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("1000元以下");
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("1000-2000元");
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("2000-3000元");
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("3000元以上");
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
F.
函数的传递,其实右击控件添加已完成。代码自动修改在一下地方:
public:
int m_occupation;
public:
CString m_workAddr;
void CProp1::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
DDX_Radio(pDX, IDC_RADIO1, m_occupation);
DDX_LBString(pDX, IDC_LIST2, m_workAddr);
}