掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
コンボボックスのドロップダウンリストの位置変更をするには? (ID:72692)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
GetComboBoxInfo() でドロップダウンリストのウィンドウハンドル取得して サブクラス化 + WM_WINDOWPOSCHANGING をhook、としてやれば可能かと。 以下部分抜粋ソースサンプル // .h class ComboL : public CWnd { protected: HWND owner_; bool autorelease_; public: ComboL() : autorelease_(false) {} static bool SubclassWithAutorelease(HWND combo); bool Subclass(HWND combo); : } // .cpp bool ComboL::SubclassWithAutorelease(HWND combo) { ComboL *list = new ComboL; if (!list->Subclass(combo)) { delete list; return false; } list->autorelease_ = true; return true; } bool ComboL::Subclass(HWND combo) { ::COMBOBOXINFO info = { sizeof(::COMBOBOXINFO) }; return ((owner_ = combo) != NULL && ::GetComboBoxInfo(combo, &info) && SubclassWindow(info.hwndList)); } void ComboL::OnWindowPosChanging(WINDOWPOS* lpwndpos) { // WM_WINDOWPOSCHANGING CWnd::OnWindowPosChanging(lpwndpos); RECT rect; ::GetWindowRect(owner_, &rect); ::MapWindowPoints(NULL, ::GetParent(m_hWnd), LPPOINT(&rect) + 1, 1); lpwndpos->x = (rect.right - lpwndpos->cx); // 右端揃え } void ComboL::PostNcDestroy() { // CWnd::PostNcDestroy() オーバーライド CWnd::PostNcDestroy(); if (autorelease_) { delete this; } } // 例 xxxx::OnInitDialog() { ComboL::SubclassWithAutorelease(::GetDlgItem(m_hWnd, IDC_COMBO1)); }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.