チュートリアル⑥ 候補が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;
    }
    

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