2011-02-04 6 views
3

リストボックスコントロールをIDC_LIST1というダイアログリソースに追加しました。 SendDlgItemMessage()を使用してこのコントロールとやりとりする必要がありますか、それともWTLでより良い方法がありますか?ここに私のイベントハンドラーがあります。それはまだファンシーではありません!私はSendDlgItemMessageを使用しているのでしょうか、それともWTLのラッパーがありますか?

LRESULT OnAddItem(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) 
{ 
    SendDlgItemMessage(IDC_LIST1, LB_INSERTSTRING, (WPARAM) 0, (LPARAM)_T("Hi")); 
    return 0; 
} 

LRESULT OnRemoveItem(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) 
{ 
    // Get selected item 
    int item = SendDlgItemMessage(IDC_LIST1, LB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); 
    // Remove the item at the index of the selected item 
    SendDlgItemMessage(IDC_LIST1, LB_DELETESTRING, (WPARAM) 0, (LPARAM)item); 
    return 0; 
} 

答えて

0

あなたはこのためにあなたがGetDlgItemを使用して取得することができ、リストボックスのHWNDを必要とする... Win32のリストボックスのラッパーとしてWTL :: CListBoxTを使用することができます。

CListBoxTは、InsertStringメソッドとDeleteStringメソッドを提供します。

1

WTL 方法を提案し、以下の通りである:共通およびWindowsコントロールの

class CMyDlg : public CDialogImpl<CMyDlg> 
{ 
public: 
    enum {IDD = IDD_MYDLG}; 
    CListBox m_lb1; 
// ... 
    BEGIN_MSG_MAP(CMyDlg) 
     MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) 
     COMMAND_ID_HANDLER(ID_ADDITEM, OnAddItem) 
     COMMAND_ID_HANDLER(ID_REMOVEITEM, OnRemoveItem) 
     // ... 
    END_MSG_MAP() 
// ... 
    LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) 
    { 
     m_lb1.Attach(GetDlgItem(IDC_LIST1)); 
     // ... 
    } 
    LRESULT OnAddItem(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) 
    { 
     return m_lb1.AddString(_T("Hi")); 
    } 
    LRESULT OnRemoveItem(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) 
    { 
     return m_lb1.DeleteString(m_lb1.GetCurSel()); 
    } 
// ... 
}; 

WTLのサポートクラスが atlctrls.h であり、あなたもWTL for MFC Programmers, Part IV - Dialogs and Controlsを見ていることがあります。

関連する問題