CScrollView に CComboBoxをCreateで作成したあと、再配置したいのですが
単純に、MoveWindowやSetWindowPos ではうまく動作できませんでした。
CComboBox をCButton に変更すると、同一のコードで再配置は可能でした。
CComboBoxの場合は、別の方法があるのでしょうか。
どなたか、お教えください。
以下は 右クリックした場所にコンボボックスを再配置するサンプルプログラムの抜粋です。
参考にして下さい。
==========================================================
#define IDC_COMBOBOX 101
class CCombTestView : public CScrollView
{
public:
CComboBox m_CombBox;
//---省略---
}
void CCombTestView::OnInitialUpdate()
{
//---省略---
CRect rc(10,10,110,160);
m_CombBox.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_BORDER |
CBS_DROPDOWNLIST, rc, this, IDC_COMBOBOX);
m_CombBox.AddString(item0);
m_CombBox.AddString(item1);
m_CombBox.AddString(item2);
m_CombBox.SetCurSel(0);
}
void CCombTestView::OnRButtonDown(UINT nFlags, CPoint point)
{
CRect rc;
m_CombBox.GetWindowRect(&rc);
CRect new_rc(point, rc.Size());
m_CombBox.MoveWindow(&new_rc);
CScrollView::OnRButtonDown(nFlags, point);
}
=======================================================================
それから、開発環境(VCのバージョン、MFC利用の有無)、OS環境など必ず書いてください。
また、このような質問の場合は、Createと再配置の部分のソースを実際に載せると回答しやす
いと思います。
ご回答ありがとうございました。
開発環境は、OS Win2K VC++6.0 です。
次のような記述では再配置ができませんでした。
-----------------------------------------------------------
m_Comb.Create(
CBS_DROPDOWNLIST | WS_VISIBLE | WS_CHILD | WS_VSCROLL | WS_TABSTOP,
CRect( 0, 0, 50, 50),
this,
IDS_VIB_COMB_X
);
m_Comb.MoveWindow(CRect(200, 200, 50, 50));
-----------------------------------------------------------
この記述だと正常に動作するので、変更します。
CRect rc = CRect(200, 200, 50, 50);
m_CombXrange.MoveWindow(&rc);
CRectのintを4つ指定するコンストラクタの引数は、
それぞれ(左辺、上辺、右辺、下辺)の座標を指定するはずですが、
上記でうまくいくのですか?
おっしゃる通りでした。
CRect のコンストラクタの理解不足でした。
ありがとうございました。