让控件随着DIALOG而动,需要响应什么事件? 我想让CStatusBar,CTreeCtrl,CListCtrl跟着对话框的拉伸一起变动,是要响应什么事件吗?代码在哪里添加呢?没有头绪,想请教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般是响应对话框的OnSize(WM_SIZE),然后计算好控件在对话框上的位置比例,重新对控件MoveWindow 我这一个基于对话框的程序,下有一个子对话框,ChildDialog,Style为child,上面有个CListCtrl,view为report,想让它跟着子对话框位伸,响应OnSize,在这个函数里面,我用GetWindowRect获取不到控件的区域,后来,我在头文件中增加一个CRect变量,在OnInitDialog里面获取了控件的大小,但转到OnSize后,数据又丢失了,所以现在的情况是编绎通过了,但只要一打开对话框,就被中断,得不到控件的大小,连对话框都打不开了,请问应该如何解决总题呢? OnWindowPosChanged,在这里面写,dialog添加window消息 onsizegetclientwindow movewindow http://blog.csdn.net/zyrr159487/article/details/7011081 直接提供示例:http://www.codeproject.com/KB/dialog/easysize.aspx注册帐号后可以下载。 WM_SIZING/WM_SIZE消息中MoveWindow/SetWindowPos()子控件 BCG中有实现好的: CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();pLayout->AddAnchor(IDC_RECENT_FILES, CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth); 我这里用了两套方法,第一个是研究楼上各位推荐的中文网站上最大化窗口之后,控件放大的方法,代码如下:在OnInitDialog中添加 CRect rect; ::GetWindowRect(m_hWnd,rect); ScreenToClient(rect); m_nDlgWidth=rect.right-rect.left; m_nDlgHeight=rect.bottom-rect.top; m_nWidth=GetSystemMetrics(SM_CXSCREEN); m_nHeight=GetSystemMetrics(SM_CYSCREEN); m_Multiple_width=float(m_nWidth)/float(m_nDlgWidth); m_Multiple_height=float(m_nHeight)/float(m_nDlgHeight);然后在OnSize中实现:CWnd *pwd=GetDlgItem(IDC_LIST1); if(!pwd) return; CRect rect,recttemp; GetClientRect(&recttemp); rect.left=recttemp.Width()*ListRect.left/ChildRect.Width(); rect.right=recttemp.Width()*ListRect.right/ChildRect.Width(); rect.top=recttemp.Height()*ListRect.top/ChildRect.Height(); rect.bottom=recttemp.Height()*ListRect.bottom/ChildRect.Height(); pwd->MoveWindow(rect,true);(以上是根据分辨率计算新的高度,编绎运行没有问题,但控件不见了)第二种方法跟上面原理一样,只是取POINT的方法,结果也是一样 怎样删除 发送到 的子菜单 求界面设计思路!必给分 这个错误提示是什么意思? 关于隐藏程序的问题 新手请教:为何VC2005按Ctrl+F7不能编译*.h类型的文件? 急! 关于换行 两个头文件互相包含的问题 CFile类中READ()函数的使用问题 -->>50分大抢分!请问在COM的按钮里可以加入位图吗?如何实现?谢谢 请问,大家能帮我解释一下,如下程序的各个函数的意思吗?谢谢~ 跪求!!用VC6.0开发的软件,MFC框架界面不怎么好看,大牛们有什么可以美化的好办法吗? 如何对动态的区域显示tips信息
注册帐号后可以下载。
在OnInitDialog中添加
CRect rect;
::GetWindowRect(m_hWnd,rect);
ScreenToClient(rect);
m_nDlgWidth=rect.right-rect.left;
m_nDlgHeight=rect.bottom-rect.top; m_nWidth=GetSystemMetrics(SM_CXSCREEN);
m_nHeight=GetSystemMetrics(SM_CYSCREEN); m_Multiple_width=float(m_nWidth)/float(m_nDlgWidth);
m_Multiple_height=float(m_nHeight)/float(m_nDlgHeight);
然后在OnSize中实现:CWnd *pwd=GetDlgItem(IDC_LIST1);
if(!pwd)
return;
CRect rect,recttemp;
GetClientRect(&recttemp); rect.left=recttemp.Width()*ListRect.left/ChildRect.Width();
rect.right=recttemp.Width()*ListRect.right/ChildRect.Width();
rect.top=recttemp.Height()*ListRect.top/ChildRect.Height();
rect.bottom=recttemp.Height()*ListRect.bottom/ChildRect.Height(); pwd->MoveWindow(rect,true);(以上是根据分辨率计算新的高度,编绎运行没有问题,但控件不见了)第二种方法跟上面原理一样,只是取POINT的方法,结果也是一样