- ベストアンサー
コンボボックスのドロップダウンリストが表示されない
MFCでアプリを作成、アプリの画面上にコンボボックスのリソースを貼り付け、アプリ起動直後は、コンボボックスのドロップダウンリストを表示できています。 しかし、アプリ画面のサイズを変更すると、▼ボタンを押下しても、ドロップダウンリストが表示されなくなってしまいます。 アプリ画面のサイズを変更後も、コンボボックスのドロップダウンリストを表示できるようにする方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
もし、コンボボックスのサイズ変更をMoveWindowでやっているなら、これで表示されるのは、リスト部分を含むサイズです。 たとえば、 m_combobox1.MoveWindow(20,20,200,300); の300は、リスト部分を含みます。 エディット部分の高さを変更させる場合は、 m_combobox1.SetItemHeight( -1, 100); というようにします。 普段、意識していないので、コンボボックスを貼り付けてみましたが、マウスでは、エディット部分の高さは変えられないようです。 ダイアログエディタ(リソースビューのコントロールを貼り付けるフォーム)で、▼ボタンを押下させると、点線と四角で囲まれた部分が表示されます。 (コンボボックスの絵とは違う部分が囲まれるはず) その下辺をウニ~とドラッグすると、リスト部分の高さが変わります。 MDI・SDI・ダイアログベースいずれでも同じです。
その他の回答 (1)
- machongola
- ベストアンサー率60% (434/720)
こんにちは。以下確認させて頂きます。 >>MFCでアプリを作成 MDI・SDI・ダイアログベースのうちどれでしょうか? >>アプリ画面のサイズを変更すると サイズ変更は「マウス操作」によってでしょうか、「API側」からでしょうか? VCのバージョンは幾つでしょうか? 私はVC++60なのでその範囲内なら回答できるかもしれません。
補足
説明は不十分ですみません。補足いたします。 ●MFCアプリは、ダイアログベースです。 ●アプリ画面のサイズ変更は、マウス操作でドラッグし、これに連動して、以下のコードの実装により、コンボボックスを含む子ウィンドウのサイズを変えるようにしています。 --------------------------------------------------------------- CSize m_szDefault; // 元のアプリ画面サイズ BOOL CMailDemoDlg::OnInitDialog() { CRect rect; CDialog::OnInitDialog(); // 元のアプリ画面サイズの取得 GetWindowRect(&rect); m_szDefault = rect.Size(); } void CAppDlg::OnSize(UINT nType,int cx,int cy) { CRect rect; // アプリ画面の現在サイズの取得 GetWindowRect(&rect); CSize sz = rect.Size(); // コンボボックスの画面の取得 CWnd *wnd = GetDlgItem(IDC_COMBOBOX); wnd->GetWindowRect(&rect); // コンボボックスの画面サイズの再設定 rect.left *= ((double)sz.cy / (double)m_szDefault.cy); rect.top *= ((double)sz.cy / (double)m_szDefault.cy); rect.right *= ((double)sz.cy / (double)m_szDefault.cy); rect.bottom *= ((double)sz.cy / (double)m_szDefault.cy); wnd->SetWindowPos(NULL,rect.left,rect.top, rect.Width(),rect.Height(),SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOCOPYBITS); } --------------------------------------------------------------- ●Visual Studio 2005 を使用しています。
お礼
回答の中でコンボボックスのサイズ変更の際に、リスト部分を含むサイズを含むということでヒントになりました。 コンボボックスの領域を、GetWindowRect()等で取得すると、リスト部分のサイズが含まれないですが、 m_combobox1.GetDroppedControlRect(&Rect) とすれば、リスト部分も含めて取得できるので、これを基にサイズ変更することで、うまく動作することができました。 どうもありがとうございました。