资源描述:
《MFC 调整窗口大小.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、对话框的大小变化后,假若对话框上的控件大小不变化,看起来会比较难看。下面就介绍怎么让对话框上的控件随着对话框的大小的变化自动调整。首先明确的是Windows有一个WM_SIZE消息响应函数,这个函数在对话框大小发生变化的时候调用,所以我们可以记录下原来对话框的大小,还有当前对话框的大小(这个不用自己算,系统已给出),然后根据控件做出相应比例的调整。比如原来对话框大小为a,现在为b,原来控件大小为c,那么现在的控件大小应该为c*b/a;(注意a不能为0)。看实例:(黑体字为添加的代码!!)假设对话框类为CMyDlg类,那么首先设置一个变量CRectm_
2、rect;//用于保存原对话框大小那么在对话框创建的时候先获得对话框的大小BOOLCMyDlg::OnInitDialog(){.........................SetIcon(m_hIcon,TRUE);//SetbigiconSetIcon(m_hIcon,FALSE);//Setsmallicon//TODO:AddextrainitializationhereGetClientRect(&m_rect);//获取对话框的大小returnTRUE;//returnTRUEunlessyousetthefocustoacontro
3、l}然后再手动添加一个函数,用以实现具体的变化voidCMyDlg::ChangeSize(UINTnID,intx,inty)//nID为控件ID,x,y分别为对话框的当前长和宽{CWnd*pWnd;pWnd=GetDlgItem(nID);if(pWnd!=NULL)//判断是否为空,因为在窗口创建的时候也会调用OnSize函数,但是此时各个控件还没有创建,Pwnd为空{CRectrec;pWnd->GetWindowRect(&rec);//获取控件变化前的大小ScreenToClient(&rec);//将控件大小装换位在对话框中的区域坐标r
4、ec.left=rec.left*x/m_rect.Width();//按照比例调整空间的新位置rec.top=rec.top*y/m_rect.Height();rec.bottom=rec.bottom*y/m_rect.Height();rec.right=rec.right*x/m_rect.Width();pWnd->MoveWindow(rec);//伸缩控件}}最后添加windows消息响应函数OnSize:voidCMyDlg::OnSize(UINTnType,intcx,intcy)//cx,cy就是当前对话框的长和宽{CDial
5、og::OnSize(nType,cx,cy);//TODO:Addyourmessagehandlercodehereif(nType!=SIZE_MINIMIZED)//判断窗口是不是最小化了,因为窗口最小化之后,窗口的长和宽会变成0,当前一次变化的时就会出现除以0的错误操作{ChangeSize(IDC_LIST1,cx,cy);//对每一个控件依次做调整ChangeSize(IDC_LIST2,cx,cy);ChangeSize(IDC_BUTTON1,cx,cy);ChangeSize(IDC_BUTTON2,cx,cy);GetClien
6、tRect(&m_rect);//最后要更新对话框的大小,当做下一次变化的旧坐标;}}任务完成!1.单文档窗体大小的设置。在CxxxApp中的InitInstance中加入如下代码:m_pMainWnd->SetWindowPos(NULL,0,0,950,680,SWP_NOMOVE);//此句为添加代码,用于改变窗体的大小m_pMainWnd->ShowWindow(SW_SHOW);m_pMainWnd->UpdateWindow();//仅当具有后缀时才调用DragAcceptFiles//在SDI应用程序中,这应在ProcessShellC
7、ommand之后发生returnTRUE;2.对话框窗体大小的设置。jiyuan.MoveWindow(0,0,950,680);//在此jiyuan为对话框窗体类的对象。2.1举例如下:2.1.1在xxxView.h头文件当中定义窗体的对象jiyuan,代码如下:classCxxxView:publicCView{protected://仅从序列化创建CgzsjView();DECLARE_DYNCREATE(CgzsjView)//特性public:CgzsjDoc*GetDocument()const;CJiyuanjiyuan;//定义对话框
8、类的对象,在此CJiyuan为窗体的类。2.1.2在xxxView.cpp文件当中需要控制窗体的地方添加控制