VC 2005的一些細節問題

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元以上");

 

除了用了propertypagepropertysheet創建多頁瀏覽外,外加一些數據傳遞功能的補充: 

 

 

 

 

 

 

 

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

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章