VC 2005的一些细节问题

本文总结了一个名为MProp的项目的开发经验,重点介绍了属性页(Property Page)和属性表单(Property Sheet)的应用,包括如何初始化控件如列表框(ListBox)和组合框(ComboBox),以及如何在不同页面间传递数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lgrself2004

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值