コンボボックスの再配置

[戻る]
312 2002/03/27(水) 22:09:59
CScrollView に CComboBoxをCreateで作成したあと、再配置したいのですが
単純に、MoveWindowやSetWindowPos ではうまく動作できませんでした。
CComboBox をCButton に変更すると、同一のコードで再配置は可能でした。
CComboBoxの場合は、別の方法があるのでしょうか。
どなたか、お教えください。

sara 2002/03/28(木) 08:40:51
以下は 右クリックした場所にコンボボックスを再配置するサンプルプログラムの抜粋です。
参考にして下さい。
==========================================================
#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と再配置の部分のソースを実際に載せると回答しやす
いと思います。

312 2002/03/28(木) 11:37:55
[[解決]]
ご回答ありがとうございました。

開発環境は、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);

dairygoods 2002/03/28(木) 12:49:53
CRectのintを4つ指定するコンストラクタの引数は、
それぞれ(左辺、上辺、右辺、下辺)の座標を指定するはずですが、
上記でうまくいくのですか?

312 2002/03/28(木) 13:38:21
おっしゃる通りでした。
CRect のコンストラクタの理解不足でした。
ありがとうございました。

古いスレッドには追加発言できません。