Как отличить индекс в обратном вызове для массива CButton? - PullRequest
0 голосов
/ 27 марта 2012

Как отличить индекс в обратном вызове для массива Button? ТНХ

Возвращает блок сообщений для всех индексов, но не может различить, какие из них были нажаты.

ON_BN_CLICKED(100, ClickMe)

CButton *btnDelay = new CButton[4];

for(int i = 0; i < 4; i++){
    (btnDelay+i)  -> Create("0", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(350, 80+i*20, 450, 100+i*20), this,100);
}

void CCatsGenBDlg::ClickMe()
{
    //How do I know which button was pressed ?
    MessageBox("ClickMe");
}

1 Ответ

1 голос
/ 27 марта 2012

Во-первых, при создании кнопки присвойте каждому уникальный идентификатор, например

Create("0", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(350, 80+i*20, 450, 100+i*20), this,100+i);

Это даст вам идентификаторы от 100 до 103

Тогда ...

BEGIN_MESSAGE_MAP(CtomDlg, CDialog)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_COMMAND_RANGE(100, 103, OnButtonPressed)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CtomDlg::OnButtonPressed(UINT nID)
{
   //Show message box   
}

Сообщение ON_COMMAND_RANGE будет обрабатывать идентификаторы в диапазоне ваших кнопок и предоставляет способ получения их конкретного идентификатора в обработчике событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...