简单问题.....初学者傻傻的问. 我在视中加入了一个CRichEdit.发现它不支持CTR+C,CTR+V,.....BCB 中的TRichEdit类是支持这些操作的,并且还可以自动生成右键菜单(拷贝.粘贴..)请问在VC中如何实现.////////////一定结贴. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 做一个单文档的程序,基于CRichEditView所有功能全部有了(查找、拷贝……)如果要用控件的话,去查MSDN吧。里面有。 CRichEditView支持ctrl+C,ctrl+V等操作呀,右键弹出菜单,自己写一个不就行了 ???我在工程里加了RICHEDIT控件以后怎么就………………对话框打不开了!!BUG吧? 我的工程中的CRichEditCtrl(不是CRichEditView)中可以输入,但是全选了然后Ctrl+C没有效果...Ctrl+V也没有反映...不知为何.? // EidtViewView.cpp : implementation of the CEidtViewView class//#include "stdafx.h"#include "EidtView.h"#include "EidtViewDoc.h"#include "EidtViewView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CEidtViewViewIMPLEMENT_DYNCREATE(CEidtViewView, CView)BEGIN_MESSAGE_MAP(CEidtViewView, CView) //{{AFX_MSG_MAP(CEidtViewView) ON_COMMAND(ID_GETDATA, OnGetdata) ON_COMMAND(ID_SETDATA, OnSetdata) ON_UPDATE_COMMAND_UI(ID_SETDATA, OnUpdateSetdata) ON_WM_CREATE() ON_WM_SIZE() //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CEidtViewView construction/destructionCEidtViewView::CEidtViewView(){ // TODO: add construction code here}CEidtViewView::~CEidtViewView(){}BOOL CEidtViewView::PreCreateWindow(CREATESTRUCT& cs){ // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////////////////// CEidtViewView drawingvoid CEidtViewView::OnDraw(CDC* pDC){ CEidtViewDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here}/////////////////////////////////////////////////////////////////////////////// CEidtViewView diagnostics#ifdef _DEBUGvoid CEidtViewView::AssertValid() const{ CView::AssertValid();}void CEidtViewView::Dump(CDumpContext& dc) const{ CView::Dump(dc);}CEidtViewDoc* CEidtViewView::GetDocument() // non-debug version is inline{ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEidtViewDoc))); return (CEidtViewDoc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CEidtViewView message handlersvoid CEidtViewView::OnGetdata() { CEidtViewDoc*pDoc=GetDocument(); m_rich.SetWindowText(pDoc->m_strText); m_rich.SetModify(false); }void CEidtViewView::OnSetdata() { CEidtViewDoc*pDoc=GetDocument(); m_rich.GetWindowText(pDoc->m_strText); m_rich.SetModify(false); }void CEidtViewView::OnUpdateSetdata(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(m_rich.GetModify());}/*void CEidtViewView::OnEditClearAll() { // TODO: Add your command handler code here }void CEidtViewView::OnUpdateEditClearAll(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here }*/int CEidtViewView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; CRect rect(0,0,0,0); m_rich.Create(ES_AUTOHSCROLL |ES_LEFT |ES_MULTILINE |ES_WANTRETURN|WS_CHILD|WS_VSCROLL|WS_VISIBLE|WS_HSCROLL,rect,this,1); return 0;}void CEidtViewView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); CRect rect; GetClientRect(&rect); m_rich.SetWindowPos(&wndBottom,0,0,rect.right-rect.left,rect.bottom-rect.top,SWP_SHOWWINDOW);}这是我的代码..<V C++技术内幕上面的> 在stdafx.h中包含#include "afxole.h"支持剪贴板,在程序的app的OnInitialize()中加上AfxOleInitalize()否则不起作用。 to hanwg() :我照着你说的做,编译提示没有定义AfxOleInitalize();我在msdn中查找了一下,根本没有这个函数,而只要AfxOleInit();而且它在 afxdisp 头文件中,不在afxole.h知那个啊. 而且我把afxdisp.h加入,并且调用afxOleInit()根本没有作用啊...请大哥们帮忙啊..我是菜鸟,但我一定会结贴的. 对不起,应该为加AfxInitRichEdit()在程序的app的OnInitialize();#include "afxcmn.h",你可以看一下msdn中的CRichEditCtrl 关于保存位图 VC MFC中操作SQL Server opengl动画可否用显示列表? 分页机制的问题 VC6.0++怎么对进行IE操作! WSASend投送的数据是全部完成之后GetQueuedCompletionStatus才返回吗? ActiveX中的mediaPlayer怎么使用啊? vc6.0有很多的工具,请问哪里有它们的一些中文使用说明!!! 如何在datagrid上显示数据,好着急!!!!!!!! 消息循环问题 一个网络编程的疑问 Happy new year everyone!
所有功能全部有了(查找、拷贝……)如果要用控件的话,去查MSDN吧。里面有。
//#include "stdafx.h"
#include "EidtView.h"#include "EidtViewDoc.h"
#include "EidtViewView.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CEidtViewViewIMPLEMENT_DYNCREATE(CEidtViewView, CView)BEGIN_MESSAGE_MAP(CEidtViewView, CView)
//{{AFX_MSG_MAP(CEidtViewView)
ON_COMMAND(ID_GETDATA, OnGetdata)
ON_COMMAND(ID_SETDATA, OnSetdata)
ON_UPDATE_COMMAND_UI(ID_SETDATA, OnUpdateSetdata)
ON_WM_CREATE()
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CEidtViewView construction/destructionCEidtViewView::CEidtViewView()
{
// TODO: add construction code here}CEidtViewView::~CEidtViewView()
{
}BOOL CEidtViewView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs return CView::PreCreateWindow(cs);
}/////////////////////////////////////////////////////////////////////////////
// CEidtViewView drawingvoid CEidtViewView::OnDraw(CDC* pDC)
{
CEidtViewDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}/////////////////////////////////////////////////////////////////////////////
// CEidtViewView diagnostics#ifdef _DEBUG
void CEidtViewView::AssertValid() const
{
CView::AssertValid();
}void CEidtViewView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}CEidtViewDoc* CEidtViewView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEidtViewDoc)));
return (CEidtViewDoc*)m_pDocument;
}
#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////
// CEidtViewView message handlersvoid CEidtViewView::OnGetdata()
{
CEidtViewDoc*pDoc=GetDocument();
m_rich.SetWindowText(pDoc->m_strText);
m_rich.SetModify(false);
}void CEidtViewView::OnSetdata()
{
CEidtViewDoc*pDoc=GetDocument();
m_rich.GetWindowText(pDoc->m_strText);
m_rich.SetModify(false);
}void CEidtViewView::OnUpdateSetdata(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(m_rich.GetModify());
}/*void CEidtViewView::OnEditClearAll()
{
// TODO: Add your command handler code here
}void CEidtViewView::OnUpdateEditClearAll(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
*/
int CEidtViewView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CRect rect(0,0,0,0);
m_rich.Create(ES_AUTOHSCROLL |ES_LEFT |ES_MULTILINE
|ES_WANTRETURN|WS_CHILD|WS_VSCROLL|WS_VISIBLE|WS_HSCROLL,rect,this,1);
return 0;
}void CEidtViewView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
CRect rect;
GetClientRect(&rect);
m_rich.SetWindowPos(&wndBottom,0,0,rect.right-rect.left,rect.bottom-rect.top,SWP_SHOWWINDOW);
}
这是我的代码..<V C++技术内幕上面的>
在程序的app的OnInitialize()中加上AfxOleInitalize()
否则不起作用。
我照着你说的做,编译提示没有定义AfxOleInitalize();
我在msdn中查找了一下,根本没有这个函数,而只要AfxOleInit();
而且它在 afxdisp 头文件中,不在afxole.h知那个啊.
#include "afxcmn.h",你可以看一下msdn中的CRichEditCtrl