对话框中添加一个CEditView,如何改变大小的问题

cr945211 2015-06-17 10:01:33
添加一个对话框(ProgramDlg),将ProgramWin(基于EditView类)放在该对话框中,如下代码

BOOL CProgramDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CRect clientRect;
GetClientRect(&clientRect);
CView* pNewView;
pNewView = new CProgramWin;//ProgramWin为编辑区EditView
// Creation of the view window
afxTraceEnabled=FALSE;
if(! pNewView->Create(NULL, NULL, WS_VISIBLE | WS_CHILD, CRect(clientRect.left,clientRect.top,clientRect.right-180,clientRect.bottom+90), this, 1000))//编辑区的大小
{
TRACE0( "Failed view creation\n" );
}
afxTraceEnabled=TRUE;

pNewView->OnInitialUpdate();

return TRUE; // return TRUE unless you set the focus to a control

}

其中Create函数第四个参数决定了该编辑区的大小,而且是在对话框初始OnInitDialog()的时候创建的。现在的问题是我把改对话框放在悬浮框中,如下代码
int CWinProPane::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDockablePane::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
CRect rectDummy;
rectDummy.SetRectEmpty();
//创建选项卡窗口:
if (!m_ProDlg.Create(IDD_PROGRAM,this))
{
TRACE0("未能创建输出选项卡窗口/n");
return -1;//未能创建
}
m_ProDlg.ShowWindow(SW_SHOW);
return 0;
}
void CWinProPane::OnSize(UINT nType, int cx, int cy)
{
CDockablePane::OnSize(nType, cx, cy);

// TODO: 在此处添加消息处理程序代码
//选项卡控件应覆盖整个工作区
m_ProDlg.SetWindowPos(this,-1,-1,cx,cy,SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
m_ProDlg.ShowWindow(SW_SHOW);
}

IDD_PROGRAM是ProgramDlg对话框的ID。当悬浮框大小改变,由于对话框中的编辑区不是个控件,所以没办法用OnSize()来改变大小,所以悬浮框中有一部分没有被对话框或者说CEditView覆盖,看着很不好看。如果我改变创建的对话框的大小或者改变!pNewView->Create(NULL, NULL, WS_VISIBLE | WS_CHILD, CRect(clientRect.left,clientRect.top,clientRect.right-180,clientRect.bottom+90), this, 1000)中CRect时可以改变,但是不能随着悬浮框大小的改变而变化。
我的问题是,如何使对话框中的EditView可随着悬浮框改变大小啊??
...全文
159 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2015-06-22
  • 打赏
  • 举报
回复
加ES_WANTRETURN风格
cr945211 2015-06-22
  • 打赏
  • 举报
回复
引用 7 楼 worldy 的回复:
	CRect rx(10,10,300,200);
	TxEdit.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_AUTOVSCROLL|ES_MULTILINE|WS_BORDER,rx,this,10082);
	rx.MoveToY(310);

	if(!TxEdView) TxEdView=new CEditView;
	TxEdView->Create(NULL,NULL,WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_MULTILINE|WS_BORDER,rx,this,10083);
CEdit TxEdit CEditView TxEdView* View类应该使用指针,否则..........................................
为什么enter后不能换行呢??
cr945211 2015-06-22
  • 打赏
  • 举报
回复
引用 9 楼 worldy 的回复:
加ES_WANTRETURN风格
谢谢
cr945211 2015-06-17
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
MoveWindow等来调整大小
之前不可以改变大小的时候有滚动条,现在根据你说的方法
if(pNewView1)
	{
         CRect rect;  //获取控件变化前大小
         pNewView1->GetWindowRect(&rect);
         ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
         // cx/m_rect.Width()为对话框在横向的变化比例
        rect.left=rect.left*cx/m_rect.Width();//调整控件大小
        rect.right=rect.right*cx/m_rect.Width();
        rect.top=rect.top*cy/m_rect.Height();
        rect.bottom=rect.bottom*cy/m_rect.Height();
       pNewView1->MoveWindow(rect);//设置控件大小
	}
	  GetClientRect(&m_rect);//将变化后的对话框大小设为旧大小
,可以改变大小,但是没有滚动条了,在pNewView->Create函数中添加滚动条样式,程序只显示一行。是不是要自行添加OnVScroll()函数和OnHScroll()函数啊??
cr945211 2015-06-17
  • 打赏
  • 举报
回复
引用 2 楼 worldy 的回复:
CProgramDlg::onsize中,调用 pNewView->MoveWindow或者SetWindowPos
if(pNewView1)
	{
         CRect rect;  //获取控件变化前大小
         pNewView1->GetWindowRect(&rect);
         ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
         // cx/m_rect.Width()为对话框在横向的变化比例
        rect.left=rect.left*cx/m_rect.Width();//调整控件大小
        rect.right=rect.right*cx/m_rect.Width();
        rect.top=rect.top*cy/m_rect.Height();
        rect.bottom=rect.bottom*cy/m_rect.Height();
       pNewView1->MoveWindow(rect);//设置控件大小
	}
	  GetClientRect(&m_rect);//将变化后的对话框大小设为旧大小
用这种方法可以改变大小,但是没有滚动轴,是不是要在函数里面加OnVScroll()函数和OnHScroll()函数啊??
worldy 2015-06-17
  • 打赏
  • 举报
回复
CProgramDlg::onsize中,调用 pNewView->MoveWindow或者SetWindowPos
oyljerry 2015-06-17
  • 打赏
  • 举报
回复
MoveWindow等来调整大小
worldy 2015-06-17
  • 打赏
  • 举报
回复
	CRect rx(10,10,300,200);
	TxEdit.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_AUTOVSCROLL|ES_MULTILINE|WS_BORDER,rx,this,10082);
	rx.MoveToY(310);

	if(!TxEdView) TxEdView=new CEditView;
	TxEdView->Create(NULL,NULL,WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_MULTILINE|WS_BORDER,rx,this,10083);
CEdit TxEdit CEditView TxEdView* View类应该使用指针,否则..........................................
cr945211 2015-06-17
  • 打赏
  • 举报
回复
引用 5 楼 worldy 的回复:
CEditView创建的时候加ES_AUTOVSCROLL 及ES_MULTILINE 风格
pNewView1->Create(NULL, NULL, WS_VISIBLE | WS_CHILD |ES_AUTOVSCROLL|ES_MULTILINE 但是还是不可以,不能输入换行键也没有滚动条
worldy 2015-06-17
  • 打赏
  • 举报
回复
CEditView创建的时候加ES_AUTOVSCROLL 及ES_MULTILINE 风格

15,978

社区成员

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

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