Pergunta

Eu preciso atualizar um combobox com um novo valor de forma a que as alterações refletidas texto.A maneira mais para fazer isso é depois que o comboboxtem sido inicializado e com uma mensagem.

Então, eu estou tentando criar uma postmessage para o hwnd que contém o combobox.

Portanto, se eu quiser enviar uma mensagem a ele, alterar o item atualmente selecionado para o n-ésimo item, que seria o postmessage se parece?

Eu estou supondo que isso envolveria ON_CBN_SELCHANGE, mas eu não posso fazê-lo funcionar direito.

Foi útil?

Solução

Você quer ComboBox_SetCurSel:

ComboBox_SetCurSel(hWndCombo, n);

ou se for um MFC CComboBox controle, você pode provavelmente fazer:

m_combo.SetCurSel(2);

Eu imagino se você está fazendo isso manualmente, você também quer SendMessage, ao invés de incluir PostMessage.CBN_SELCHANGE é a notificação de que o controle envia de volta para você quando a selecção é alterada.

Finalmente, você pode querer adicionar o c++ tag para esta pergunta.

Outras dicas

Uma versão concisa:

const int index = 0;
m_comboBox.PostMessage(CBN_SELCHANGE, index);

O que pode estar acontecendo de errado é a seleção está sendo alterado dentro da seleção alterar o manipulador de mensagem, que resultam em uma outra seleção de alterar a mensagem.

Uma forma de contornar esta indesejados de feedback loop é para adicionar uma sentinela para a escolha alterar manipulador de mensagem como mostrado abaixo:

void onSelectChangeHandler(HWND hwnd)
{
  static bool fInsideSelectChange = 0;

  //-- ignore the change message if this function generated it
  if (fInsideSelectChange == 0)
  {
    //-- turn on the sentinel
    fInsideSelectChange = 1;

    //-- make the selection changes as required
    .....

    //-- we are done so turn off the sentinel
    fInsideSelectChange = 0;
  }
}

se você fx deseja alterar o título - que é a linha mostrada quando a caixa de combinação está fechado, então você pode fazer o seguinte:

m_ComboBox.DeleteString(0);// primeiro excluir anteriores, se houver, 0 = visual cadeia m_ComboBox.AddString(_T("Olá"));

coloque isso no fx.em OnCloseupCombo - quando o evento de fechar um dropdownbox incêndios

ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo)

Esta mudança é uma nova seqüência de caracteres não uma seleção dos já atribuídos a caixa de combinação de elementos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top