コンボボックスのエディットボックスについて – プログラミング – Home

コンボボックスのエディットボックスにつ...
 
通知
すべてクリア

[解決済] コンボボックスのエディットボックスについて


Aquarium
 Aquarium
(@Aquarium)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

お世話になっております。

今、ダイアログにコンボボックスを
Createして描画しています。
そのコンボボックスのエディットボックス部分を
CEditから派生した自作クラスのコントロールに
したいのですが、それは可能なのでしょうか。

やりたいことはドロップダウンのコンボボックスでの
IMEのメッセージ判定なのですが、コンボボックスの
WindowProc()にはIMEのメッセージである
WM_IME_COMPOSITIONメッセージが来ません。

しかし、コントロールがコンボボックスではなく
エディットボックスの場合には
WindowProc()にはWM_IME_COMPOSITIONメッセージが
きて、IMEのメッセージ判定ができるため、IMEの
メッセージ判定処理を追加したエディットボックスを
コンボボックスのエディット部分に使えないかと
思ったのですが・・・

開発環境はWinXp Pro VC6.0 SP5 MFC(exe) ダイアログベースです。
よろしくお願いいたします。


引用未解決
トピックタグ
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

そのものズバリの回答ではないので申し訳ないのですが、

CEdit* pEdit=(CEdit*)wndCombo.GetWindow(GW_CHILD);

(ただし、CComboBox wndCombo;)
とすることで、コンボボックスのエディット部分が参照できるみたいですよ。
もしかしたら、利用できるかも・・・


返信引用
Aquarium
 Aquarium
(@Aquarium)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

sugerさん、回答ありがとうございます。

教えていただいたやり方を参考にさせていただいて、
コンボボックスをCreateした後に
CEdit派生の自作クラス、CImeEditのSubclassWindow()
で取得したコンボボックスのエディットを
結びつけることで実現することができました。
コードは下の様な感じです。

BOOL CMyDialog::OnInitDialog()
{
     ・
     ・(中略)
     ・
  if(m_ComboBox.Create(CBS_DROPDOWN | WS_VISIBLE | WS_CHILD | WS_TABSTOP |  
      WS_VSCROLL, rect, this, IDC_USERCOMBO) == TRUE)
  {
    CEdit * pEdit = (CEdit *)m_ComboBox.GetWindow(GW_CHILD);
    if(pEdit)
    {
      m_ImeEdit.SubclassWindow(pEdit->m_hWnd);
    }
  }
     ・
     ・(中略)
     ・
}

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました