子窗口大小可随父窗口改变了 但怎么使子窗口中的控件也改变? 子对话框控件调整大小控件尺寸 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://download.csdn.net/detail/RobertBaker/3229976 首先呀,得明确了,子窗口的大小用CreateRoundRectRgn函数确定,控件的位置及大小使用SetWindowPos确定,每个函数的关乎大小,位置的参数都是int型,就是说得需要一个明确的值。楼主想根据尺寸控件发生变化,就需要楼主在OnInitDialog里计算出具体值呀。自适应变化也是需要自适应算法的呀,微软的Windows到现在也没有做出楼主想要的,可见这不是一个简单的事。楼主看看360、金山等出的客户端程序、再到各个银行的网银助手客户端,不管哪个大小都是一定了。 真的那么复杂吗 mfc我刚接触 莫非我想多了 我不明白你的子父窗口有啥交互,但是子窗口的大小跟其控件的位置大小都是根据API函数自行设定的吧,那就需要你输入具体值呀,兄弟……就算托拉拽,也是MFC背后帮你做了这事,如果你想改动,就要自己来设。 在子窗口的OnSize中按照子窗口的尺寸调整其中控件的位置和尺寸 我还没做交互 我以为 主窗口发生变化 onsize能捕捉到并是子窗口做出程序规定的变化 那既然子窗口发生变化 那子窗口不是也应该响应其本身类中的onsize函数 从而使其控件像二楼的程序一样随之变化吗 下图是二楼的程序拖拽前后 我的子窗口的类中onsize就没调用我专门在子窗口的onsize中添加了 MessageBox(L"oo"); 结果拖拽父窗口 子窗口变化时就没显示任何消息 在父窗口的OnSize中调整子窗口的大小傻鸟,子窗口的OnSize有俅用啊 我想调节子窗口控件的位置 你有何高见再说一遍在父窗口的OnSize中用子窗口的MoveWindow调整子窗口的大小和位置 void CTest3View::OnSize(UINT nType, int cx, int cy)//父窗口改变尺寸,CTest3View为父窗口{ CView::OnSize(nType, cx, cy); CRect r; GetClientRect(&r); r.DeflateRect(10,10,10,10); TxGroup.MoveWindow(&r,TRUE);//调整子窗口位置尺寸}void CxTestGroup::OnSize(UINT nType, int cx, int cy)//子窗口发生了尺寸改变//上述的TxGroup.MoveWindow(&r,TRUE)会自动引发本事件;{ CWnd::OnSize(nType, cx, cy); CRect r; CRect r1; GetClientRect(&r); TxEd1.GetWindowRect(&r1);//调整各个控件位置尺寸 ScreenToClient(&r1); r1.right=r.right-10; TxEd1.MoveWindow(r1,TRUE); TxEd2.GetWindowRect(&r1); ScreenToClient(&r1); r1.right=r.right-10; TxEd2.MoveWindow(r1,TRUE); // TODO: 在此处添加消息处理程序代码} 主对话框onsizevoid CMDialogDlg::OnSize(UINT nType, int cx, int cy){ CDialog::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 // CWnd *pWnd; pWnd = GetDlgItem(IDD_DLG_SUB_TOP); //获取控件句柄 GetClientRect(&m_rect);//获取父对话框尺寸 m_DlgTop.DestroyWindow();// 子对话框top m_DlgCenter.DestroyWindow();//子对话框center m_DlgBottom.DestroyWindow();//子对话框bottom m_DlgTop.Create(IDD_DLG_SUB_TOP,this); m_DlgCenter.Create(IDD_DLG_SUB_CENTER,this); m_DlgBottom.Create(IDD_DLG_SUB_BOTM,this); m_DlgTop.SetWindowPos(pWnd,m_rect.left,m_rect.top,m_rect.Width(),m_rect.Height()*0.2,SWP_SHOWWINDOW);//看看与movewindow的区别 //m_DlgTop.MoveWindow(m_rect.left,m_rect.top,cx,cy*0.2); m_DlgCenter.MoveWindow(m_rect.left,0.2*cy,cx,cy*0.8); m_DlgBottom.MoveWindow(m_rect.left,cy*0.8,cx,cy); m_DlgTop.ShowWindow(SW_SHOW); m_DlgCenter.ShowWindow(SW_SHOW); m_DlgBottom.ShowWindow(SW_SHOW);}这段代码能实现子窗口随父窗口调整大小 可子对话框m_DlgTop中的控件如何调整初学mfc 代码质量不高 见笑了 额 刚看到 感觉有效果 去试试 我的主对话框中会不会因为差了这句 而使子窗口onsize无反应TxGroup.MoveWindow(&r,TRUE);//调整子窗口位置尺寸 额 刚看到 感觉有效果 去试试 我的主对话框中会不会因为差了这句 而使子窗口onsize无反应TxGroup.MoveWindow(&r,TRUE);//调整子窗口位置尺寸你都不让子窗口改变,子窗口怎么可能有OnSize? worldy 弱弱问一句 你代码中的 void 子窗口::onsize() 是放在子窗口类还是主窗口类中的? 我无论放哪里都不好使在void 子窗口::onsize()中加了个messagebox 提示信息 都没执行 好像子窗口onsize还是没被引发 跟你们这种撮撮讲话真的很累这个范例专门写给你看如果不要缩放功能,只需要位置随动,就把scx,和scy直接=1http://download.csdn.net/detail/gz_qmc/6978801 哎,父窗口的onsize中按比例调整子控件大小呗 感谢各位 问题已经解决了 我把m_DlgTop定义为CDialog了 应该是CDlgTop来着 唉 基础不牢 回去翻书去了 如何设置消息 cvs 命令是什么意思? debug时,waitforsignal 检测线程handle 请问 求救!! 求助:谁用过微星的ms1 845 uitra-c------------(100) 关于串口的几个问题 一个关于子窗体的问题~~~~~ 谁能介绍几本比较好的API书籍?电子版的? 分数不多,请教高手(局域网) 控件焦点的问题 请问下,mfc里面如何画坐标呢
真的那么复杂吗 mfc我刚接触 莫非我想多了
就算托拉拽,也是MFC背后帮你做了这事,如果你想改动,就要自己来设。
那既然子窗口发生变化 那子窗口不是也应该响应其本身类中的onsize函数 从而使其控件像二楼的程序一样随之变化吗 下图是二楼的程序拖拽前后
我专门在子窗口的onsize中添加了 MessageBox(L"oo"); 结果拖拽父窗口 子窗口变化时就没显示任何消息
傻鸟,子窗口的OnSize有俅用啊
在父窗口的OnSize中
用子窗口的MoveWindow调整子窗口的大小和位置
{
CView::OnSize(nType, cx, cy); CRect r;
GetClientRect(&r);
r.DeflateRect(10,10,10,10);
TxGroup.MoveWindow(&r,TRUE);//调整子窗口位置尺寸
}void CxTestGroup::OnSize(UINT nType, int cx, int cy)//子窗口发生了尺寸改变//上述的TxGroup.MoveWindow(&r,TRUE)会自动引发本事件;
{
CWnd::OnSize(nType, cx, cy); CRect r;
CRect r1;
GetClientRect(&r);
TxEd1.GetWindowRect(&r1);//调整各个控件位置尺寸
ScreenToClient(&r1);
r1.right=r.right-10;
TxEd1.MoveWindow(r1,TRUE); TxEd2.GetWindowRect(&r1);
ScreenToClient(&r1); r1.right=r.right-10;
TxEd2.MoveWindow(r1,TRUE);
// TODO: 在此处添加消息处理程序代码
}
void CMDialogDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码
//
CWnd *pWnd;
pWnd = GetDlgItem(IDD_DLG_SUB_TOP); //获取控件句柄
GetClientRect(&m_rect);//获取父对话框尺寸
m_DlgTop.DestroyWindow();// 子对话框top
m_DlgCenter.DestroyWindow();//子对话框center
m_DlgBottom.DestroyWindow();//子对话框bottom
m_DlgTop.Create(IDD_DLG_SUB_TOP,this);
m_DlgCenter.Create(IDD_DLG_SUB_CENTER,this);
m_DlgBottom.Create(IDD_DLG_SUB_BOTM,this);
m_DlgTop.SetWindowPos(pWnd,m_rect.left,m_rect.top,m_rect.Width(),m_rect.Height()*0.2,SWP_SHOWWINDOW);//看看与movewindow的区别
//m_DlgTop.MoveWindow(m_rect.left,m_rect.top,cx,cy*0.2);
m_DlgCenter.MoveWindow(m_rect.left,0.2*cy,cx,cy*0.8);
m_DlgBottom.MoveWindow(m_rect.left,cy*0.8,cx,cy);
m_DlgTop.ShowWindow(SW_SHOW);
m_DlgCenter.ShowWindow(SW_SHOW);
m_DlgBottom.ShowWindow(SW_SHOW);
}
这段代码能实现子窗口随父窗口调整大小 可子对话框m_DlgTop中的控件如何调整
初学mfc 代码质量不高 见笑了
我的主对话框中会不会因为差了这句 而使子窗口onsize无反应
TxGroup.MoveWindow(&r,TRUE);//调整子窗口位置尺寸
我的主对话框中会不会因为差了这句 而使子窗口onsize无反应
TxGroup.MoveWindow(&r,TRUE);//调整子窗口位置尺寸你都不让子窗口改变,子窗口怎么可能有OnSize?
我无论放哪里都不好使
在void 子窗口::onsize()中加了个messagebox 提示信息 都没执行 好像子窗口onsize还是没被引发
这个范例专门写给你看
如果不要缩放功能,只需要位置随动,就把scx,和scy直接=1http://download.csdn.net/detail/gz_qmc/6978801
我把m_DlgTop定义为CDialog了 应该是CDlgTop来着
唉 基础不牢 回去翻书去了