2

CListCtrlカスタムの高さで配置したグループ ボックスがあります。

m_FeatureList.GetClientRect(&rect);
nColInterval = rect.Width()/2;

m_FeatureList.InsertColumn(0, _T("ID"), LVCFMT_LEFT, nColInterval);
m_FeatureList.InsertColumn(1, _T("Class"), LVCFMT_RIGHT, nColInterval);
m_FeatureList.ModifyStyle( LVS_OWNERDRAWFIXED, 0, 0 );
m_FeatureList.SetExtendedStyle(m_CoilList.GetExtendedStyle() | LVS_EX_GRIDLINES);
...
int a, b;
m_FeatureList.GetItemSpacing(true, &a, &b);

// data is a vector containing item text
m_FeatureList.MoveWindow(listRect.left, listRect.top, listRect.Width(), b*data.size()+4);

int i = 0;
std::for_each(data.begin(), data.end(), [&](CString& p) { AddDefectListItem(i++,p); });      

今私は画像コントロールを の下に配置したいのですCListCtrlが、すべての機能がCRect私を混乱させます。それらはすべてコントロールをどこかに配置しますが、私が望む場所には配置しません。

//m_FeatureList.GetClientRect(&listRect);
//m_FeatureList.ClientToScreen(&listRect);
m_FeatureList.ScreenToClient(&listRect);

// Oh my god, which coordinates do I need???
m_image.MoveWindow(listRect.left, listRect.bottom+3,listRect.Width(), 20);

誰かがこのクレイジーな mfc のことで私を助けてくれませんか?

4

1 に答える 1

6

GetClientRect によって返される左と上のメンバーは常にゼロです。したがって、m_FeatureList.GetClientRect を呼び出しても、コントロールの場所については何もわかりません。m_FeatureList.GetWindowRect を呼び出してから、結果を変換して、親ダイアログに対する相対的な位置を取得する必要があります。

CRect listRect;
m_FeatureList.GetWindowRect(&listRect);
ScreenToClient(&listRect);
listRect.top = listRect.bottom +3;
listRect.bottom = listRect.top + 20;
m_image.MoveWindow(&listRect);
于 2013-11-12T14:46:47.330 に答える