コンボボックスのタイプについて – プログラミング – Home

コンボボックスのタイプについて
 
通知
すべてクリア

コンボボックスのタイプについて


hekeheke
 hekeheke
(@hekeheke)
ゲスト
結合: 14年前
投稿: 1
Topic starter  

コンボボックスのドロップダウンとドロップダウンリストについて質問させてくださ
い。

現在eMbedded Visual C++ 4.0で開発を行っております。

キー処理を独自で行う為に、ディスパッチ前メッセージPreTranslateMessage()にて
GetFocus()を行い、
コントロールIDテーブルのどのコントロールにフォーカスが当たっているかを判定し
ています。

処理は以下のようにしています。

// 現在のフォーカスインデックスを取得(内部テーブル)
int CKeyEventChange::GetFocusIndx(CWnd* pWnd, LONG* tblCtrlID)
{
  for(int nIndx = 0; ;nIndx++){

     // 最後まで該当しない場合は検索終了
     if(tblCtrlID[nIndx] == EOF) return 0;

      (※)if(pWnd->GetFocus() == pWnd->GetDlgItem(tblCtrlID[nIndx])){
      // 現在フォーカスのコントロールIDインデックス
       break;
     }
    }
  return nIndx;
}
注)抜粋なので間違っている箇所があるかもしれません

そこで質問なのですが、コンボボックスのスタイルがドロップダウンの場合は(※)箇所
の条件でヒットするのですが、ドロップダウンリストの場合はヒットしません。

ドロップダウンではなく、ドロップダウンリストを使用する必要があります。
何が原因か分かる方いらっしゃいませんでしょうか?

よろしくお願い致します。


引用解決済
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 14年前
投稿: 40
 

下記参照。
http://okwave.jp/qa/q6693545.html


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

マルチポストはマナー違反です。
MFCのオブジェクトではなく生のHWNDで比較した場合はどうなりますか。
if( ::GetFocus() == ::GetDlgItem( hWndDlg, tblCtrlID[ nIndx])){
}


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

うーーん、
 30分も経っていないのにこちらに質問を掲示するのはまずいですね。
せめて一週間ぐらいたって意見がもらえないときに向こうに一言断りを入れてから
他のところ(たとえばここ)に掲示したほうがいいですね。

 仲澤さんのご意られなくて見もごもっともですが、まず、最初の解答者のご意見を先
に見ていますか?
サブクラス化もいい方法だと思いますし、もちろん仲澤さんのHWNDを使ってSDK
で記述する方法もいいと思います。
ぼくは、MFCでうまくいかないときは大抵SDKに直します。
#SDKにして原因が分かるときも多いですね。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

すみません。コンプライアンスの関係で
あっちには発言できないもんで・・・m(__)m。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

まず、ヒットしない理由が分かっていますか。
そこが分からないと前に進まないのでは?

要は、GetDlgItem()でとれるのはコントロールのメインウィンドウ
であり、フォーカスをもつのはコントロールのメインウィンドウとは
限らないと言うことです。


返信引用
hirocco
 hirocco
(@hirocco)
ゲスト
結合: 14年前
投稿: 138
 

複数のコントロールが集まって一つのコントロールを作ってる場合があるのでは?

だとすると,フォーカスは誰が持っているのか?

ダトスルト,一つのコントロールの中の複数のコントロールにもそれぞれIDがあるので
は?

datosuruto,押さえてあるIDは誰のIDなのか?

オヤオヤ?どうでしょう?
そんなとこでしょうかねぇ


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

> すみません。コンプライアンスの関係で
> あっちには発言できないもんで・・・m(__)m。
いえいえ、
こちらに質問してきたのですから、ここで解答するのは間違いでないと思います。
わざわざOKWAVEのほうに解答しなくてもいいと思います。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

コントロールID基準で動きたいなら、
if(pWnd->GetDlgCtrlID() == tblCtrlID[nIndx])
を利用するのも一つの手。

今回の場合、このコードでも引っかからないはずですが、
少なくともウィンドウハンドルうんうん、
CWndオブジェクトうんぬんの話には惑わされないで、
デバッグ作業ができるはずです。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

うーーん、
hekeheke03のハンドル名で検索するとすごい量のマルチポストですね。
多分返事来ないですね。


返信引用
ツ青」ツ戸ゑソス・ス
 ツ青」ツ戸ゑソス・ス
(@ツ青」ツ戸ゑソス・ス)
ゲスト
結合: 18年前
投稿: 178
 

OKWaveの提携サイトがいろいろ検索に引っかかっている…なんてことないですかね?
# こういうときに不便…ですな。
# 私は別の名前で教えてgooで見てますが。

まぁ、いずれにしろ、現状で放置されていることに変わりはないのですが。
# WindowsCE系でコントロールの親子関係まで確認していないので…本題には回答できず。


返信引用
ツ青」ツ戸ゑソス・ス
 ツ青」ツ戸ゑソス・ス
(@ツ青」ツ戸ゑソス・ス)
ゲスト
結合: 18年前
投稿: 178
 

あれ?名前がヘンになってる??


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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