CBN_SELCHANGE内でテキストを入れたい

[戻る]
SH 2008/12/23(火) 15:26:18
すみません、他の記事を読んでいるところに新規で質問を書いてしまいました。
再投稿させていただきます。
おはしさん、申し訳ありません。

VC++ 2005、MFCです。

ドロップダウン形式のコンボボックスを置き、
CBN_SELCHANGEのハンドラ内で

void CTestDlg::OnSelchangeCombo()
{
    m_combo.SetWindowText(_T("SetWindowText"));
}

と、テストルーチンを入れてみたのですが、
選択した項目のほうが表示されてしまいます。

項目自体には「名字」「名前」などの一般名詞を選択肢として入れておき、
選択された項目を元に実際に表示するテキストを入れたいのですが、
CBN_SELCHANGE内ではSetWindowText()は使えないものなのでしょうか?

仲澤@失業者 2008/12/24(水) 10:51:04
> CBN_SELCHANGE内ではSetWindowText()は使えないものなのでしょうか?

そもそも、リストボックスは「選択したものを表示」するのであるので、
それ以外のものを表示するのは他のコントロールにすべき、
というのが原則です。

SPY++で見張ればすぐにわかることですが、CBN_SELCHANGEの後で、
EN_CHANGE等により、実際の表示が変更されます。
従って、表示を変更するために、CBN_SELCHANGEの段階で何をやっても
無駄なのは自明です。

EN_CHANGEは複数来るので、どれが最後であるかはわかりません。
んが、まぁ、やるだけやってみてください。
もし、ダメなら原則に戻ること。

では、がんばってください。

SH 2008/12/24(水) 20:06:56
[[解決]]
OnSelchangeCombo()の中ではSetTimer(1, 0, NULL)をコールし、
直後のOnTimer()の中でSetWindowText()を使うようにしてみたところ、
うまくセットできました。
ありがとうございます。

古いスレッドには追加発言できません。