.m_hWndに格納されている値って
そのコントロールのハンドルではないのでしょうか?
ここの過去ログに
"コンボボックスのハンドルは(CComboBoxクラス).m_hWnd"
って書いてあったのですが、
GetDlgItem()で取得したハンドルと一致しないので・・・
そもそも .m_hWnd って何が入っているんでしょうか?
初歩的な質問ですみません。
ちなみに環境はVC2003です。
> GetDlgItem()で取得したハンドルと一致しないので・・・
どうやって調べました?
# 見た感じ、MFC不使用、かな?
SDK+WTLで、
CComboBox m_cmb;
m_cmb = GetDlgItem(IDC_COMBO1);
ATLASSERT( m_cmb.m_hWnd == GetDlgItem(IDC_COMBO1) );
ってな感じ?
SDKでもMFCでもやってみました。
MFCの場合はこんな感じで
CString tes1;
CString tes2;
tes1.Format("GetDlgItem = %d",GetDlgItem(IDC_COMBO1));
tes2.Format("m_hWnd = %d",m_cbo_main.m_hWnd);
AfxMessageBox(tes1);
AfxMessageBox(tes2);
ぜんぜん違う値なんですよねぇ。
なんなんでしょうか・・・
そのGetDlgItem()がCWndから(直接/間接的に)導出されたクラスのメソッド内で呼ばれたものなら違って当然です。
CWnd::GetDlgItem()は CWnd* を返します。 HANDLEではありません。
そう、だから、環境が重要。VC++6/ATL3.0の場合、
ATL::CWindow::GetDlgItem() は HWND 型ですし。
MFCの場合、CWnd::GetSafeHwnd() を調べてみてください。
なるほど!
理解が浅すぎました。
ありがとうございました!
ツイート | ![]() |