2013/07/04

[MFC]多消息響應同一函式

以前的寫法都是 one message mapping one function,
但有時候其實多個消息要做的事情,都會對到同一個對象,只是做的動作不同,
例如對同一個表單做新增、刪除、修改、查詢這樣的狀況,
這時候就可以用 ON_COMMAND_RANGE囉~

舊做法:
ON_COMMAND(ID_TREEITEM_ADD, &CMyDialog::OnTreeItemAdd)
ON_COMMAND(ID_TREEITEM_DEL, &CMyDialog::OnTreeItemDel)
ON_COMMAND(ID_TREEITEM_MODIFY, &CMyDialog::OnTreeItemModify)

void CMyDialog::OnTreeItemAdd()
{
m_tree.add(hItem);
}

void CMyDialog::OnTreeItemDel()
{
m_tree.delete(hItem);
}


void CMyDialog::OnTreeItemModify()
{
m_tree.Modify(hItem);
}

改為:

ON_COMMAND_RANGE(ID_TREEITEM_ADD,ID_TREEITEM_MODIFY, &CMyDialog::OnTreeItem)

//此作法需注意:ID_TREEITEM_ADD、ID_TREEITEM_DEL、ID_TREEITEM_MODIFY在resource.h中必須為連續數,如1、2、3。

void CMyDialog::OnTreeItem(UINT nID)
{
    switch(nID)
    {
    case ID_TREEITEM_ADD:
    m_tree.add(hItem);
    break;
    case ID_TREEITEM_DEL:
        m_tree.del(hItem);
        break;
    case ID_TREEITEM_MODIFY:
        m_tree.Modify(hItem);
        break;
    default:
        break;
    }
}

//m_tree的add del modify只是示意,並非真的有此member function,詳見msdn CTreeCtrl

本篇參考:msdn ON_MESSAGE_RANGE

沒有留言:

張貼留言