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);
}