简单问题:多文档中 FormView 显示时,总是不能按照我设计的大小显示,要么有滚动条,要么右边空出一大块

suv3389 2012-04-01 11:39:19
简单问题:多文档中 FormView 显示时,总是不能按照我设计的大小显示,要么有滚动条,要么右边空出一大块

目标:初始显示时,跟我在编辑窗口的大小一样,无滚动条
...全文
115 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
suv3389 2012-06-09
  • 打赏
  • 举报
回复
问题还是没有解决,不过还是多谢各位
zkymky 2012-04-02
  • 打赏
  • 举报
回复
楼上的代码值得一试,应该可以解决楼主的问题。
EIT王子 2012-04-01
  • 打赏
  • 举报
回复
你说的是像素的大小不一致引的?
一,view是窗口,getwindowrect就能得到它的大小 二,你重载onsize,其参数cx,cy就是窗口的大小
具体方法:

1、禁止出现滚动条:采用重载
void CformView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);

SetScrollSizes(MM_TEXT,CSize(cx,cy));
}
2、设置最小可拉伸尺寸:
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) //sdi的情况
如果是多文档,在formview对应的子框架中设置:
lpMMI->ptMinTrackSize
suv3389 2012-04-01
  • 打赏
  • 举报
回复
多谢你的回复

我记得应该是需要得到屏幕相素然后怎样转换下,再显示,具体的函数我忘记了
hdg3707 2012-04-01
  • 打赏
  • 举报
回复
好象可以修改窗口属性来初始化窗口大小,你试试,属性好象是:WM_MAXSIZE什么的
hdg3707 2012-04-01
  • 打赏
  • 举报
回复
1.
在 OnInitialUpdate
::GetClientRect(m_hwnd,&rectPre);
::MoveWindow(m_hwnd,0,0,Width,Hight,TRUE);
是这是这两个函数,这才两行
2.
在OnInitialUpdate()函数中添加如下代码:
CFrameWnd *pFrame=NULL;
pFrame=this->GetParentFrame();
if(pFrame)
{
pFrame->SetWindowPos(NULL,0,0,1200,800,SWP_NOACTIVATE|SWP_DRAWFRAME);
}
3.
http://www.360doc.com/content/11/0318/12/6332251_102231835.shtml

suv3389 2012-04-01
  • 打赏
  • 举报
回复
天啊,也不是这个

我以前应该是放在 OnInitialUpdate 中的啊

也许有一个 GetWindowRect ,可是还有其他的呢,饿的神啊
hdg3707 2012-04-01
  • 打赏
  • 举报
回复
CSize sizeScreen (GetSystemMetrics (SM_CXSCREEN),GetSystemMetrics (SM_CYSCREEN));
cs.cx=sizeScreen.cx;
cs.cy=sizeScreen.cy;

就是三行代码,楼主好记性,我都忘了是几行代码了
hdg3707 2012-04-01
  • 打赏
  • 举报
回复
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
BOOL ret;
CSize sizeScreen (GetSystemMetrics (SM_CXSCREEN),
GetSystemMetrics (SM_CYSCREEN));
cs.x=cs.y=0;
cs.cx=sizeScreen.cx;
cs.cy=sizeScreen.cy;
// cs.style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
// | WS_MINIMIZEBOX;
cs.style = WS_OVERLAPPED | WS_CAPTION
| WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE | WS_SYSMENU;

cs.style &= ~FWS_ADDTOTITLE;
cs.lpszName=_T("72V300A");

ret=CFrameWnd::PreCreateWindow(cs);
// if( !CFrameWnd::PreCreateWindow(cs) )
// return FALSE;
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式

return ret;
}
是这样的,我也忘了,现找以前的程序
suv3389 2012-04-01
  • 打赏
  • 举报
回复
多谢回复

你说的这两个方法我都试过了,效果不理想

我以前的代码找不到了,我记得有三行代码放在 初始化 的函数里就可以了

15,979

社区成员

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

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