vc combobox控件不见下拉框
我的程序实现:界面所有控件是随窗体的大小而改变,但改变窗体后,combobox控件却看不见下拉框(再窗体没改变前,可以看见),请问各位,怎么修改程序能使combobox控件也能正常改变?(我界面控件很多)
程序如下:
void CMy320WHOLETESTDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
CListRect listRect;
if(listRect.GetCount()>0)
{
CRect rectDlgNow;
GetWindowRect(&rectDlgNow);
POSITION mP = listRect.GetHeadPosition();
CRect rectDlgSaved;
rectDlgSaved = listRect.GetNext(mP);
ScreenToClient(rectDlgSaved);
ScreenToClient(rectDlgNow);
float fRateScaleX = (float)(rectDlgNow.right-rectDlgNow.left)/(rectDlgSaved.right-rectDlgSaved.left);
float fRateScaleY = (float)(rectDlgNow.bottom-rectDlgNow.top)/(rectDlgSaved.bottom-rectDlgSaved.top);
ClientToScreen(rectDlgSaved);
ClientToScreen(rectDlgNow);
CRect rectChildSaved;
CWnd *pWndChild = GetWindow(GW_CHILD);
while(pWndChild)
{
rectChildSaved = listRect.GetNext(mP);
rectChildSaved.left = rectDlgNow.left+(int)((rectChildSaved.left-rectDlgSaved.left)* fRateScaleX);
rectChildSaved.top = rectDlgNow.top+(int)((rectChildSaved.top-rectDlgSaved.top)*fRateScaleY);
rectChildSaved.right = rectDlgNow.right+(int)((rectChildSaved.right-rectDlgSaved.right)* fRateScaleX);
rectChildSaved.bottom = rectDlgNow.bottom+(int)((rectChildSaved.bottom-rectDlgSaved.bottom)* fRateScaleY);
ScreenToClient(rectChildSaved);
pWndChild->MoveWindow(rectChildSaved);
pWndChild = pWndChild->GetNextWindow();
}
}
Invalidate();
}
[解决办法]
combobox控件的大小是比较特殊的,GetWindowRect的时候,获取的高度是下拉框收起后的高度,但是MoveWindow的时候,高度是要指定为下拉框展开后的高度,因此你需要检测如果是combobox控件,调整尺寸时设定高度为加起下拉框尺寸的高度。
[解决办法]
combobox控件的高度有两种,一个combobox控件本身高度,还有一个就是下拉列表高度,而你用MoveWindow只能改变前者的高度。
你最好把后者高度设定的大一点,可以在资源视图中,找到该控件,点一下它右边的小三角,会出现一个虚线框,然后把这个框拉长一些
[解决办法]
[解决办法]
那在我原程序中,到底怎样检测combobox控件呢?
//GetWindowRect,只能得到下拉框收起后的高度
//lz是否是需要得到当前combobox的下拉框的高度?其实看你的需求,并不需要得到下拉框的高度。
//分别设置combobox的编辑框和下拉框的rect就可以了。
[解决办法]
既然你只是变变位置 下拉列表的高度不需要改变 既然你不知道系统是怎样分配的那就
先getwindowrect 然后在在movewindow改变其中的x,y即可
[解决办法]