hur.cn - 华软网

 热门搜索

MFC中的CEdit控件使用问题

  作者:未知    来源:网络    更新时间:2010/12/7
最近在试着用MFC,有个问题讨教?
我想做个记事本,但为了解控制运用,不想用CEditView类,而直接运用CView类,然后在CView类中增加个CEdit对象,在OnSize中调整CEdit控件巨细顺应CClient巨细。程序编译能通过但总是报错。
我很奇怪是我的思绪的问题吗?是否是不应该直接运用CEdit控制而应该从CEdit派生新的子类?
---华软 网友回答---
onsize内代码放出来看看。
---华软网友回复---
引用 1 楼 jacklzw88 的回复:
onsize内代码放出来看看。

对头
---华软网友回复---
在OnSize里先判断Edit是否是已经创建了

if(!IsWindow(GetDlgItem(IDC_EDIT1)))
    return;
---华软网友回复---
void CMfcAppOneView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);

CRect ClientRect;
GetClientRect(&ClientRect);
mEditControl.MoveWindow(ClientRect);// TODO: 在此处增加消息措置惩罚程序代码
}
---华软网友回复---
我在我程序CView派生类中直接声明:
public:
CEdit mEditControl;
然后在CView派生类的构造函数中用:
mEditControl.Create(ES_MULTILINE|WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,1);
初始化。
然后再在CView派生类中编辑OnSzie消息:
void CMfcAppOneView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);

CRect ClientRect;
GetClientRect(&ClientRect);
mEditControl.MoveWindow(ClientRect,1);// TODO: 在此处增加消息措置惩罚程序代码
}
---华软网友回复---
问题是我想直接在CView派生类中挂CEdit控件,没有标识ID?
---华软网友回复---
3楼说了
在OnSize里先判断Edit是否是已经创建了

if(!IsWindow(GetDlgItem(IDC_EDIT1)))
  return;

问题是我想直接在CView派生类中挂CEdit控件,没有标识ID?
这和ID有什么关系
if(!IsWindow(mEditControl.GetSafeHwnd())) return;
---华软网友回复---
你的ID在创建时已经指定(为“1”)
不应该在OnSize里判断是否创建成功,你创建之后就应立即判断,这里无非判断是否IsWindowVisible
——其实只需你的View可视,则CEdit也可视

IDC_EDIT1 对话框中运用的标志符,值是不一定的,你这个程序是这个值,到下一个程序可能就是另外值,怎么你会以为IDC_EDIT1就表示“第一个CEdit”呢?
---华软网友回复---
说句真话,系统所带的记事本,没有那么简单,不是一个EDITVIEW能够解决问题的。
系统的记事本能够打开所有类型的资料,EDITVIEW却不行,而且能够支持多种编码格式!
---华软网友回复---
我觉得楼上说的有事理,记事本看起来不起眼,确实有很多东西的。

---华软网友回复---
引用楼主 seclie 的回复:
最近在试着用MFC,有个问题讨教?
我想做个记事本,但为了解控制运用,不想用CEditView类,而直接运用CView类,然后在CView类中增加个CEdit对象,在OnSize中调整CEdit控件巨细顺应CClient巨细。程序编译能通过但总是报错。
我很奇怪是我的思绪的问题吗?是否是不应该直接运用CEdit控制而应该从CEdit派生新的子类?

OnSize中的问题吧。。
---华软网友回复---
我在一个人的博客中找到了解决方法,看来是要给CEidt对象分配标识ID的。详细信息以下:
怎样在主界面中做成记事本一样的样式,能够由用户输入字符。
要在主界面中做成记事本,首先要将CEdit控件增加进主界面中去。
首先,在CAppView类中增加一个CEdit m_wndEdit变量。在Resource.h中增加一个
IDC_EDIT 102的资源
然后,在CAppView::OnCreate函数中将CEdit控件Create出来。
CAppView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if(CWnd::OnCreate(..)==-1)
......
m_wndEdit.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_MULTILINE|ES_AUTOVSCROLL,CRect(0,0,0,0),this,IDC_EDIT);
}
由于在OnCreate函数中没法用GetClientRect得知客户端界面的巨细。所以,暂时
让其巨细为CRect(0,0,0,0), 撑大Edit控件的事情在OnPaint函数中实现
CAppView::OnPaint()
{
CRect rect;
GetClientRect(&rect);
m_wndEdit.MoveWindow(rect.left,rect.top,rect.right,rect.bottom); //让
Edit控件占据整个客户端界面。
}
这里主要用到了如何动态创建控件的知识。CEdit类另有许多举措,能够用来实现
更多的功能。如:
m_wndEdit.SetFocus()
m_wndEdit.Cut()
m_wndEdit.Copy()
m_wndEdit.Paste()
m_wndEdit.Clear()
m_wndEdit.Undo()
m_wndEdit.GetSel(nStart,nEnd)      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。