对话框全屏时如何使其内部的BUTTON跟随变化??

fffei 2003-05-12 01:36:32
我试过是对话框全屏,
但我发现原来摆放在里面的那些如按扭这类控件的位置和大小都没有随着变化啊,
就缩在左上角一块。

我希望全屏的时候控件能跟随变化,就如同用放大镜一样,
特别是我要做的是一个界面:一运行就全屏,请教了!!

请给出主要代码,谢谢!!
...全文
39 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tue 2003-05-13
  • 打赏
  • 举报
回复

GetWindowpos(),返回窗口和控件的位置,然后再算算控件应该在那里,SetWindowPos不就可以了。
zjblue 2003-05-13
  • 打赏
  • 举报
回复
在OnSize中
设置SetWindowPos()
fffei 2003-05-13
  • 打赏
  • 举报
回复
谢谢各位
我明白怎么做了
我结贴了:)
fffei 2003-05-12
  • 打赏
  • 举报
回复
谢谢各位!!

响应对话框的WM_SIZE
根据对话框的大小,为每个子控件调用MoveWindow。

我想如果用这个方法的话,
我不知道怎么能得到我在资源编辑器里看到的那种布局比例,
因为我要使它一运行就全屏

maoxianwang 2003-05-12
  • 打赏
  • 举报
回复
layout
zhujianping_es 2003-05-12
  • 打赏
  • 举报
回复
下载一个类CControlPos

http://www.codeguru.com/dialog/ControlPos.shtml
---------------------------------->Agree with dizzo(CEPC)
思危 2003-05-12
  • 打赏
  • 举报
回复
响应对话框的WM_SIZE
根据对话框的大小,为每个子控件调用MoveWindow。
楼上的也可以
ocean1 2003-05-12
  • 打赏
  • 举报
回复
void CS1_Dlg::GetButtonID()
{
m_pwdBttn[0] = (CButton *)GetDlgItem(IDC_BUTTON_BIG);
m_pwdBttn[1] = (CButton *)GetDlgItem(IDC_BUTTON_SMALL);
m_pwdBttn[2] = (CButton *)GetDlgItem(IDC_BUTTON_SEND);
m_pwdBttn[3] = (CButton *)GetDlgItem(IDC_STATIC_RECEIVE);

}
void CS1_Dlg::ResetStaticButtonPosition(CDC *pDC)
{
GetButtonID();

int k;

for(k = 0; k < 4; k++)
{
if (m_m_pwdBttn[k])
{
m_pwdBttn[k]->MoveWindow(m_btnBttnNewRect[k]);
}
}

}

typedef struct FPoint2Dtag
{
float x, y;
}FPoint2D;

CRect CS1_Dlg::GetMoveRect(CRect rctOld, FPoint2D scale)
{
CRect rctNew;
rctNew.left = (int)(rctOld.left * scale.x);
rctNew.top = (int)(rctOld.top * scale.y);

int cx1, cy1;
cx1 = (int)(scale.x * rctOld.Width());
cy1 = (int)(scale.y * rctOld.Height());

rctNew.right = rctNew.left + cx1;
rctNew.bottom = rctNew.top + cy1;

return rctNew;
}

BOOL CS1_Dlg::OnInitDialog()
{
CDialog::OnInitDialog();

//original client area position
GetClientRect(&m_rctOrgnClientRect);
for (k = 0; k < 4; k++)
{
if (m_pwdBttn[k])
{
m_pwdBttn[k]->GetWindowRect(m_btnBttnRect[k]);
ScreenToClient(m_btnBttnRect[k]);
}
}
return TRUE;
}

void CS1_Dlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

m_fpt2dOrgnCrvScale.x = (float)cx / m_rctOrgnClientRect.right;
m_fpt2dOrgnCrvScale.y = (float)cy / m_rctOrgnClientRect.bottom;

//RESET STATIC CONTROL'S POSITION
int k;
for (k = 0; k < 4; k++)
{
m_btnBttnNewRect[k] = GetMoveRect(m_btnBttnRect[k], m_fpt2dOrgnCrvScale);
}

Invalidate();

}

s1dlg.h
...........

private:
void GetOriginalClientPositionPara();
void ResetStaticButtonPosition(CDC*pDC);

CRect GetMoveRect(CRect rctOld, FPoint2D scale);
void GetButtonID();

private:
CButton *m_pwdBttn[4];
FPoint2D m_fpt2dOrgnCrvScale; //損失曲線の最初比例尺
CRect m_rctOrgnClientRect;
CRect m_btnBttnRect[4], m_btnBttnNewRect[4];
dizzo 2003-05-12
  • 打赏
  • 举报
回复
下载一个类CControlPos

http://www.codeguru.com/dialog/ControlPos.shtml

很简单、实用。

BinaryPoet 2003-05-12
  • 打赏
  • 举报
回复
再对话框的OnSize中添加:

if(btn.GetSafeHWnd())
{
btn.SetWindowPos(NULL,NewX,NewY,NewCX,NewCY,SWP_NOZORDER|。。。);
}
rtdb 2003-05-12
  • 打赏
  • 举报
回复
响应对话框的WM_SIZE消息,
取得对话框的大小,然后调整对话框上的每个控件。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧