最終更新日 2021-03-21

チュートリアル⑥ 候補が1つなら…

概要

さて、チュートリアル⑤のソースにさらに1つ加えることで、完成させましょう。
最後に1つ加える内容とは、

  • リストの候補がすでに「1つだけ」なら、まだその単語候補を選んでいなくても、
    (1つしかないわけですから)対応する詳細メッセージを出せそうなら出す

というものです。

リスト候補が1つなら、詳細が出せそうなら表示してしまう

チュートリアル④やチュートリアル⑤のソースに対して、以下を加えるだけで、
選択肢が1つの時は、「詳細が出せそうなら出す」といった形へと辻褄を合わせることができることでしょう。

struct AUTOCOMPLETELIST {
  LPTSTR wstring_ptr_list[1000]; // やり取りするのは1000個まで
  size_t list_size;
};
extern "C" __declspec(dllexport) AUTOCOMPLETELIST* OnQueryListBoxCustomAdded(HWND hWnd, AUTOCOMPLETELIST *pAutoCompleteOriginalList) {
  // リストサイズが1の時
  if (pAutoCompleteOriginalList->list_size == 1) {
    int ix = 0;
    int iItemHeight = SendMessage(hWnd, LB_GETITEMHEIGHT, ix, 0); // 最初の項目のアイテムの高さ
    String^ strItemText = gcnew String(pAutoCompleteOriginalList->wstring_ptr_list[ix]); // 最初の項目のテキスト
    ACHelpForm::f->Update(hWnd, ix, strItemText, iItemHeight);
  }

  return NULL;
}

たったこれだけの追記で、下図のように「アイテムを選択していなくても、説明文が表示される」ようになります。

PICTURE