VC_Edit_Control_VC中Edit Control控件的用法

资料:

一:直接看Rich Edit2.0的属性。

二:查看MSDN

三:网络资料。

 

回答者

 

 

VC_Edit_Control_VCEdit Control控件的用法

    简介摘要:; } 1.设置edit只读属性方法一:m_edit1.SetReadOnly(TRUE); 方法二:::SendMessage(m_edit1.m_hWnd, EM_SETREADONLY, TRUE, 0);2.判断edit中光标状态并得到选中内容(richedit同样适用)

; } 

1.设置[she zhi]edit只读[zhi du]属性[shu xing][zhi du shu xing]

      方法[fang fa]一:m_edit1.SetReadOnly(TRUE);
     
方法[fang fa]二:::SendMessage(m_edit1.m_hWnd,EM_SETREADONLY, TRUE, 0);

2.
判断edit中光标[guangbiao]状态[zhuangtai]并得到选中内容(richedit同样适用)

             int nStart, nEnd;
              CString strTemp;

             m_edit1.GetSel(nStart, nEnd);
              if(nStart == nEnd)
             

                     strTemp.Format(_T("
光标[guang biao]%d" ), nStart);
                     AfxMessageBox(strTemp);
             

              else
             

                      //
得到edit选中的内容      
                     m_edit1.GetWindowText(strTemp);
                     strTemp = strTemp.Mid(nStart) - strTemp.Mid(nEnd);
                     AfxMessageBox(strTemp);
             

     
注:GetSel后,如果nStartnEnd,表明光标[guang biao]处于某个位置[wei zhi](直观来看就是光标[guang biao]在闪动);
                      
如果nStartnEnd不相等,表明用户[yonghu]edit中选中了一段内容。

3.
edit最后添加字符[zifu][zi fuchuan]

             CString str;
              m_edit1.SetSel(-1, -1);
              m_edit1.ReplaceSel(str);

4.
随输入[shuru]自动滚动到最后一行(richedit同样适用)

      方法[fang fa]一:(摘自msdn
              // The pointer to my edit.
              extern CEdit* pmyEdit;
              int nFirstVisible =pmyEdit-> GetFirstVisibleLine();

             // Scroll the edit control so that the first visible line
              // is the first line of text.
              if (nFirstVisible > 0)
             

                     pmyEdit-> LineScroll(-nFirstVisible, 0);
             

     
方法[fang fa]二:m_richedit.PostMessage(WM_VSCROLL,SB_BOTTOM, 0);

5.
如何限制edit输入[shu ru]指定字符[zifu]

    可以从CEdit派生[paisheng]一个类,添加WM_CHAR消息[xiao xi]映射[yingshe]。下面一个例子实现了限定输入[shuru]16进制字符[zifu]的功能。

    void CMyHexEdit::OnChar(UINTnChar, UINT nRepCnt, UINT nFlags)
   

              if ( (nChar > = 0&& nChar < = 9) ||
                       (nChar > = a & & nChar < = f) ||
                       (nChar > = A && nChar < = F) ||
                         nChar == VK_BACK ||
                         nChar == VK_DELETE)      //msdn
virtualkey
           

                     CEdit::OnChar(nChar, nRepCnt, nFlags);
             
       
   


6.
如何使用richedit

      添加AfxInitRichEdit();
            CxxxApp::InitInstance()
             

                       AfxInitRichEdit();
                  .............
           

    AfxInitRichEdit()功能:装载RichEdit 1.0 Control (RICHED32.DLL).

7.
如何使用richedit2.0or richedit3.0

      使用原因:由于RichEdit2.0A自动为宽字符[zi fu]WideChar),所以它可以解决中文[zhong wen]乱码以及一些汉字问题[wen ti]

      方法[fang fa]一:(msdn上的做法,适用于[yongyu]vc.NET及以后版本创建的工程)
                      Toupdate rich edit controls in existing Visual C++ applications to version 2.0,
                     open the .RC file as text, change the class name of each rich edit controlfrom    " RICHEDIT" to " RichEdit20a" .
                     Then replace the call to AfxInitRichEdit with AfxInitRichEdit2.
     
方法[fang fa]二:以对话框[dui hua kuang]为例:
            (1)     
增加一全局变量[bianliang][quan ju bian liang] HMODULE hMod;
            (2)     
CxxxApp::InitInstance()中添加一句hMod= LoadLibrary(_T(" riched20.dll" ));
                        
CxxxApp::ExitInstance()中添加一句FreeLibrary(hMod);
            (3)         
在对话框[duihua kuang]上放一个richedit,文本[wen ben]方式打开.rc文件[wen jian]修改[xiu gai]richedit控件的类名" RICHEDIT" to " RichEdit20a" .
            (4)         
在对话框[duihua kuang]头文件[wen jian]添加 CRichEditCtrl m_richedit;
                        
OnInitDialog中添加 m_richedit.SubclassDlgItem(IDC_RICHEDIT1,this);

8.
改变richedit指定区域[quyu]的颜色及字体[ziti]

             CHARFORMAT cf;
              ZeroMemory(&cf,sizeof(CHARFORMAT));
              cf.cbSize =sizeof(CHARFORMAT);
              cf.dwMask = CFM_BOLD |CFM_COLOR | CFM_FACE |
                                                    CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
              cf.dwEffects = 0;
              cf.yHeight = 12*12; //
文字[wen zi]高度
              cf.crTextColor = RGB(200, 100,255); //
文字[wen zi]颜色
              strcpy(cf.szFaceName,_T("
隶书" )); //设置[she zhi]字体[zi ti]
       
              m_richedit1.SetSel(1, 5); //
设置[she zhi]处理区域[quyu]
             m_richedit1.SetSelectionCharFormat(cf);

9.
设置[she zhi]行间距(只适用于[yongyu]richedit2.0

             PARAFORMAT2 pf;
              pf2.cbSize =sizeof(PARAFORMAT2);
              pf2.dwMask = PFM_LINESPACING |PFM_SPACEAFTER;
              pf2.dyLineSpacing = 200;
              pf2.bLineSpacingRule = 4;
              m_richedit.SetParaFormat(pf2);

10.richedit
插入位图[wei tu]

Q220844How to insert a bitmap into an RTF documentusing the RichEdit control in Visual C++ 6.0
  http://support.microsoft.com/default.aspx?scid=kb; en-us; 220844  
  http://www.codeguru.com/Cpp/controls/richedit/article.PHP/c2417/  
  http://www.codeguru.com/Cpp/controls/richedit/article.php/c5383/  

11.richedit
插入gif动画[dong hua]

  http://www.codeproject.com/richedit/AnimatedEmoticon.asp  

12.richedit
嵌入ole对象[dui xiang]

  http://support.microsoft.com/kb/141549/en-us  

13.
使richedit选中内容只读[zhidu]

  http://www.codeguru.com/cpp/controls/richedit/article.php/c2401/  

14.
打印richedit

  http://www.protext.com/MFC/RichEdit3.htm  


15.richeidt
用于[yong yu]聊天[liao tian]消息[xiao xi]窗口[chuang kou]

  http://www.vckbase.com/document/viewdoc/?id=1087  
  http://www.codeproject.com/richedit/chatrichedit.asp  
  http://www.codeguru.com/Cpp/controls/richedit/article.php/c2395/  

16.
解决richeditEN_SETFOCUSEN_KILLFOCUS无响应[xiangying]的问题[wenti]

  http://support.microsoft.com/kb/181664/en-us  

17.richedit
拼写检查

  http://www.codeproject.com/com/AutoSpellCheck.asp  

18.
改变edit背景色[beijing se]

Q117778How to change the background color of anMFC edit control
  http://support.microsoft.com/kb/117778/en-us  

19.
edit控件的父窗口[chuangkou]属性[shuxing]是带标题栏WS_CAPTION和子窗口[chuangkou][zi chuang kou]WS_CHILD时,不能设置[she zhi]焦点SetFocus

Q230587PRB: Cant Set Focus to an Edit Control Whenits Parent Is an Inactive Captioned Child Window
  http://support.microsoft.com/kb/230587/en-us  


20.
Edit中回车时,会退出[tuichu]对话框[duihua kuang]

选中Edit的风格WantReturn

MSDN的解释[jie shi]如下:
ES_WANTRETURN    Specifies that a carriage return be inserted whenthe user presses the ENTER key while entering text into a multiple-line editcontrol in a dialog box. Without this style, pressing the ENTER key has thesame effect as pressing the dialog boxs default pushbutton. This style has noeffect on a single-line edit control.

21.
动态[dongtai]创建的edit没有边框[biankuang]的问题[wenti]

      m_edit.Create(....);
      m_edit.ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_DRAWFRAME);

22.
一个能显示[xianshi]RTFole(包括gif wmvexcel ppt)的例子

  http://www.codeproject.com/richedit/COleRichEditCtrl.asp  

 

如何在RichEdit中实现上标下标

 

正文:

近来有好多朋友问如何在RichEdit中实现上标下标,查了好多资料都没找到。今天无意间在Delphi区闲逛,看到一份实现上下标的文章,于是整理成CB语言的贴出来。

以下代码已测试通过。在Form中放置一个RichEdit,两个Button,完整代码如下:

 

//---------------------------------------------------------------------------

typedef enum
{
   CFM_Superscript, // 上标
   CFM_Subscript,  // 下标
   CFM_Normal    // 普通文本
}TCharacterFormat;

void MySetCharFormat(TRichEdit *RichEdit, TCharacterFormat CharacterFormat)
{
   // ccrun(老妖)根据Delphi超级猛料中的资料修改而成

   // 欢迎光临 C++ Builder 研究 http://www.ccrun.com
   TCharFormat Format;
   Format.cbSize = sizeof(Format);
   Format.dwMask = CFM_OFFSET;
   // Character offset, in twips, from the baseline.
   // If the value of this member is positive,
   // the character is a superscript;
   // if it is negative, the character is a subscript.
   switch(CharacterFormat)
   {
     case CFM_Superscript:
       Format.yOffset = 60;
       break;
     case CFM_Subscript:
       Format.yOffset = -60;
       break;
     case CFM_Normal:
       Format.yOffset = 0;
       break;
     default:
       break;
   }
   // The EM_SETCHARFORMAT message sets character formatting in a rich edit control.
   // SCF_SELECTION: Applies the formatting to the current selection
   RichEdit->Perform(EM_SETCHARFORMAT, SCF_SELECTION, Longint(&Format));
}
//---------------------------------------------------------------------------
// 先选中Richedit中的部分文本,然后点击此按钮,选中文本将变成上标
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   // 上标
   MySetCharFormat(RichEdit1, CFM_Superscript);
}
//---------------------------------------------------------------------------
// 先选中Richedit中的部分文本,然后点击此按钮,选中文本将变成下标
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   // 下标
   MySetCharFormat(RichEdit1, CFM_Subscript);
}

在RichEdit中插入Bitmap

COleDataSource src;
STGMEDIUM sm;
sm.tymed=TYMED_GDI;
sm.hBitmap=hbmp;
sm.pUnkForRelease=NULL;
src.CacheData(CF_BITMAP, &sm);
LPDATAOBJECT lpDataObject =
(LPDATAOBJECT)src.GetInterface(&IID_IDataObject);
pRichEditOle->ImportDataObject(lpDataObject, 0, NULL);
lpDataObject->Release();

字体设置代码

最后添加字体变换函数:
CHARFORMAT cf;
LOGFONT lf;
memset(&cf, 0, sizeof(CHARFORMAT));
memset(&lf, 0, sizeof(LOGFONT));

//判断是否选择了内容
BOOL bSelect = (GetSelectionType() != SEL_EMPTY) ? TRUE : FALSE;
if (bSelect)
{
            GetSelectionCharFormat(cf);
}
else
{
            GetDefaultCharFormat(cf);
}

//得到相关字体属性
BOOL bIsBold = cf.dwEffects & CFE_BOLD;
BOOL bIsItalic = cf.dwEffects & CFE_ITALIC;
BOOL bIsUnderline = cf.dwEffects & CFE_UNDERLINE;
BOOL bIsStrickout = cf.dwEffects & CFE_STRIKEOUT;

//设置属性
lf.lfCharSet = cf.bCharSet;
lf.lfHeight = cf.yHeight/15;
lf.lfPitchAndFamily = cf.bPitchAndFamily;
lf.lfItalic = bIsItalic;
lf.lfWeight = (bIsBold ? FW_BOLD : FW_NORMAL);
lf.lfUnderline = bIsUnderline;
lf.lfStrikeOut = bIsStrickout;
sprintf(lf.lfFaceName, cf.szFaceName);
            

CFontDialog dlg(&lf);
dlg.m_cf.rgbColors = cf.crTextColor;
if (dlg.DoModal() == IDOK)
{
            dlg.GetCharFormat(cf);//获得所选字体的属性
             if(bSelect)
                        SetSelectionCharFormat(cf);     //为选定的内容设定所选字体
             else
                        SetWordCharFormat(cf);         //为将要输入的内容设定字体
}

在RichEdit中实现超链接

在RichEdit中实现超链接

责任编辑:admin   在CBuilder上制作 更新日期:2005-8-6

 

首先在Form上放置一个RichEdit。

在窗体的构造函数中添加以下代码:
__fastcall TMainForm::TMainForm(TComponent* Owner)
         : TForm(Owner)
{
     unsigned mask = SendMessage(RichEdit1->Handle, EM_GETEVENTMASK, 0, 0);
     SendMessage(RichEdit1->Handle, EM_SETEVENTMASK, 0, mask | ENM_LINK);
     SendMessage(RichEdit1->Handle, EM_AUTOURLDETECT, true, 0);   //自动检测URL

     RichEdit1->Text = "欢迎访问C++ Builder\n"
                       "网址: http://www.ccrun.com\n"
                       "偶的信箱:\n"
                       "mailto::info@ccrun.com \n"
                       "嘿嘿\n";
}

重载窗体的WndProc

1。在.h中添加:

    protected:
       virtual void __fastcall WndProc(Messages::TMessage &Message);

2。在.cpp中添加:
//---------------------------------------------------------------------------
void __fastcall TMainForm::WndProc(Messages::TMessage &Message)
{
     if (Message.Msg == WM_NOTIFY)
     {
         if (((LPNMHDR)Message.LParam)->code == EN_LINK)
         {
             ENLINK* p = (ENLINK *)Message.LParam;
             if (p->msg == WM_LBUTTONDOWN)
             {
                 SendMessage(RichEdit1->Handle, EM_EXSETSEL, 0, (LPARAM)&(p->chrg));
                 ShellExecute(Handle, "open", RichEdit1->SelText.c_str(), 0, 0, SW_SHOWNORMAL);
             }
         }
     }
     TForm::WndProc(Message);
}

 

 

 

VC中RichEdit控件设置颜色为什么不起作用?

30

[ 标签:vc,richedit,控件设置 ]

CHARFORMAT cf;
 m_RichEdit.GetSelectionCharFormat(cf);   //m_RichEdit为控件对应变量
 cf.dwMask|=CFM_COLOR;
 cf.crTextColor = RGB(200, 0, 0);   //设置颜色
 cf.dwMask|=CFM_SIZE;
 cf.yHeight  = 360;//设置高度
 m_RichEdit.SetDefaultCharFormat(cf);

 

用这段代码设置RichEdit控件内字体和大小都起作用,但是设置颜色为什么不起作用呢?

 

问题补充  2009-08-1721:49

m_RichEdit.SetWindowText(m_strContent);

∮dz回答:1 人气:1 提问时间:2009-08-17 21:47

答案
要能保存颜色,即当打开一保存的文件后,该文件中的RICHEDIT控件中的字符串也会显示不同的 ... 用VC 创建一个Dialog在上面添加一个RichEdit控件

 

 

 

 

 

RichEdit问题如何在程序里向RichEdit输入文字以后始终显示最后面的

 

 

就象QQ的那个一样,自动换行,自动滚动,超过edit的大小以后自动滚动到最末端的文字显示???即使手动在那个信息框移动到最开始,但是再接受到新的信息,还是会自动滚动到最下面?

需要什么风格吗?

大家看看我的代码:

void COnlyReadRichEdit::AddText(CString strTextIn, CHARFORMAT cf)
{
int iTotalTextLength = GetWindowTextLength();
SetSel(iTotalTextLength, iTotalTextLength);
strTextIn += "\n";
ReplaceSel((LPCTSTR)strTextIn);
int iStartPos = iTotalTextLength;
int iEndPos = GetWindowTextLength();
SetSel(iStartPos, iEndPos);
SetSelectionCharFormat(cf);
HideSelection(TRUE, FALSE);
LineScroll(1);
}

void COnlyReadRichEdit::AddNameTime(CString strName, CTime time,COLORREF crNewColor)
{
strName += " ";
CString strTime;
strTime.Format("%.2d:%.2d:%.2d\n",
time.GetHour(),
time.GetMinute(),
time.GetSecond());
strName += strTime;

int iTotalTextLength = GetWindowTextLength();
SetSel(iTotalTextLength, iTotalTextLength);
ReplaceSel((LPCTSTR)strName);
int iStartPos = iTotalTextLength;

// Formating the string that will be changed
CHARFORMAT cf;
memset(&cf,0,sizeof(CHARFORMAT));
cf.cbSize= sizeof (CHARFORMAT);  
cf.dwMask= CFM_COLOR | CFM_BOLD;
cf.dwEffects    = CFE_BOLD;
cf.crTextColor= crNewColor;//RGB(0, 0, 255); 
int iEndPos = GetWindowTextLength();
SetSel(iStartPos, iEndPos);
SetSelectionCharFormat(cf); 
SetSel(iEndPos,iEndPos);
ReplaceSel(_T(""));
}



---------------------------------------------------------------

把最后选中,然后发EM_SCROLLCARET应该就可以了吧.没试过

------------------------------------------------------------------

感谢_i_!

我把代码改成这样在单个tab的标签下就行了,我再严格测试一下,因为我是在一个tab上共享一个edit,不同tab的标签却换的时候我要更新不同的内容.

void COnlyReadRichEdit::AddText(CString strTextIn, CHARFORMAT cf)
{
int iTotalTextLength = GetWindowTextLength();
SetSel(iTotalTextLength, iTotalTextLength);
strTextIn += "\n";
ReplaceSel((LPCTSTR)strTextIn);
int iStartPos = iTotalTextLength;
int iEndPos = GetWindowTextLength();
SetSel(iStartPos, iEndPos);
SetSelectionCharFormat(cf);
HideSelection(TRUE, FALSE);
SetSel(iEndPos,iEndPos);//修改
SendMessage(EM_SCROLLCARET);//修改
}

 

 

还是RichEdit地疑难

RichEdit里面插入控件

重写了 IRichEditOleCallback接口
GetClipboardData
QueryAcceptData
................


如何处理控件的复制操作??

CRichEditCtrl::StreamOut
CRichEditCtrl::StreamIn



?


这个问题第1个回答:
ding


这个问题第2个回答:
refer to:
http://www.vckbase.com/document/viewdoc/?id=328


这个问题第3个回答:
不好意思,问题未扫描清楚

就是复制控件后然后粘贴,使得粘贴后新的空间和复制的空间有完全一样的数据

通过流如何实现,可以在控件里面直接做吗?


COleControl::OnRenderData

COleControl::OnSetData

有关系吗?


这个问题第4个回答:
还有点分,再加100


这个问题第5个回答:
IRichEditOleCallback
接口不懂
如果你只需要将你Edit里面的图片剪切然后再贴回去可以使用这样的思路

假设你的Gif类为Cgif 这个类支持等号操作符。

也就是 Cgif gif1; Cgifgif2; 可以这样运算 gif1 = gif2;

那么建立一个CArray < Cgif,Cgif > gifBuffer;变量作为你Edit的自定义剪切板。

如果用户执行Cut操作你直接往gifBuffer中增加一个或多个CutCgif对象 gifBuffer.Add();

执行Paste操作的时候再从gifBuffer中读出来还原给Edit

当然我没有这么做过也不知道具体能不能实现不过我做过简单数据图形的赋值粘贴我就是这样将对象通过自定义的剪切板来完成的。


这个问题第6个回答:
STDMETHODIMP IRichEditOleCallbackImpl::GetNewStorage(LPSTORAGE FAR *lplpstg)

{

    // Initialize a Storage Object from a DocFile in memory

    LPLOCKBYTES lpLockBytes = NULL;

    SCODE      sc  = ::CreateILockBytesOnHGlobal(NULL,TRUE, &lpLockBytes);

    if (sc != S_OK) return sc;

    sc = ::StgCreateDocfileOnILockBytes(lpLockBytes,STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, lplpstg);

    if (sc != S_OK) lpLockBytes->Release();

    return sc;

}


这个问题第7个回答:
GetNewStorage
接口我也是这样写得

我还露了什么吗

一样的代码直接调用QQDLLQQ直接就能复制粘贴了,而我的不行
那就是控件写得不一样,我写得就是一个简单的显示GIFOCX控件,从Colecontrol派生的类。
不对么?

 

 

一.常见问题

a.可以编译,不能执行的 AfxInitRichEdit();

b.升级默认的Riched版本(默认的有一些bug),如可在InitInstance中添加LoadLibrary("RICHED20.DLL") 最后注意 FreeLibrary

如果是CRichEditView基类的可用 BOOLCXXXXXXView::PreCreateWindow(CREATESTRUCT& cs){      //装入rich edit version2.0      if (LoadLibraryA("RICHED20.DLL") ==NULL)      {         AfxMessageBox(_T("Fail to load \"riched20.dll\"."),MB_OK |MB_ICONERROR);         PostMessage(WM_QUIT,0,0);         return FALSE;         }

       m_strClass = RICHEDIT_CLASSA;//for 2.0 class

       return CRichEditView::PreCreateWindow(cs); }

c.最后追加行richeditctrl.SetSel(-1, -1); richeditctrl.ReplaceSel( (LPCTSTR)str );

d.字数限制 CRichEditCtrl::LimitText(longnChars)

e.换行切换

CRichEditView的OnInitialUpdate()函数中加入下面两句: m_nWordWrap =WrapNone; WrapChanged(); WrapChanged实际上也是调用 ctrl.SetTargetDevice(NULL, 1);//m_nWordWrap == WrapNone ctrl.SetTargetDevice(NULL, 0); //m_nWordWrap ==WrapToWindow 还有不常用的m_nWordWrap == WrapToTargetDevice ctrl.SetTargetDevice(m_dcTarget,GetPrintWidth()); 如果是在Dialog中,可使用SetTargetDevice,注意在属性里面加上want return

f.有时候不希望带格式的数据粘贴,可通过PasteSpecial选择性粘贴pmyRichEditCtrl->PasteSpecial(CF_TEXT);

g.随着输入随着自动滚动条滚动到最后一行 int nFirstVisible =pmyRichEditCtrl->GetFirstVisibleLine(); if (nFirstVisible > 0){      pmyRichEditCtrl->LineScroll(-nFirstVisible,0); } 或m_cRichEdit.PostMessage(WM_VSCROLL, SB_BOTTOM,0);

h.设置UNDO的次数(只能用在RICHED20以上,即默认不支持,必须升级)SendMessage(EM_SETTEXTMODE,TM_MULTILEVELUNDO,0); TM_MULTILEVELUNDO 支持多取消(默认值).可通过EM_SETUNDOLIMIT设置最大次数 SendMessage(EM_SETUNDOLIMIT,100,0);

i.响应OnChange EM_SETEVENTMASK 设置 ENM_CHANGE long lMask =GetEventMask(); lMask |= ENM_CHANGE; lMask &= ~ENM_PROTECTED;SetEventMask(lMask);

j.设置只读 CRichEditCtrl::SetReadOnly( BOOLbReadOnly = TRUE ); 通过设置PROTECTED实现选中的文本只读,参见 http://www.codeguru.com/Cpp/controls/richedit/article.php/c2401/

二.函数应用

a.设置字体(主要是通过SetSelectionCharFormat)

CHARFORMAT cf;

rich.GetSelectionCharFormat(cf);

cf.dwMask|=CFM_BOLD;

cf.dwEffects|=CFE_BOLD;//设置粗体,取消用cf.dwEffects&=~CFE_BOLD;

cf.dwMask|=CFM_ITALIC;

cf.dwEffects|=CFE_ITALIC;//设置斜体,取消用cf.dwEffects&=~CFE_ITALIC;

cf.dwMask|=CFM_UNDERLINE;

cf.dwEffects|=CFE_UNDERLINE;//设置斜体,取消用cf.dwEffects&=~CFE_UNDERLINE;

cf.dwMask|=CFM_COLOR;

cf.crTextColor =RGB(255,0,0);//设置颜色

cf.dwMask|=CFM_SIZE;

cf.yHeight =200;//设置高度

cf.dwMask|=CFM_FACE;

strcpy(cf.szFaceName,_T("隶书"));//设置字体

rich.SetSelectionCharFormat(cf);

b.设置字体的行间距

要用richedit2.0以上试试

PARAFORMAT2 pf;pf.cbSize = sizeof(PARAFORMAT2); pf.dwMask = PFM_NUMBERING | PFM_OFFSET;pf.wNumbering = PFN_BULLET;//注意PFM_NUMBERINGpf.dxOffset = 10; VERIFY(SetParaFormat(pf));

常用的dwMask有

1 PFM_NUMBERING 成员 wNumbering 才起作用,项目符号,默认用PFN_BULLET 2 使用阿拉伯数字 (1, 2, 3, ...). 3 使用小写字母 (a, b, c, ...). 4 使用大写字母 (A, B, C, ...). 5 使用小写罗马数字 (i, ii, iii, ...). 6使用大写罗马数字 (I, II,III, ...). 7 自定义,字符见成员wNumberingStart. PFM_OFFSET 成员dxOffset 才起作用,缩进,单位twipsPFM_STARTINDENT 成员dxStartIndent 才起作用,首行缩进PFM_SPACEAFTER 成员dySpaceAfter 才起作用,段间距PFM_LINESPACING 成员dyLineSpacing 才起作用,行间距

c.设置CRichEditCtrl(2.0)背景透明 long style =::GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE); style &= WS_EX_TRANSPARENT;::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, style); 或 CreateEx,然后把WS_EX_TRANSPARENT样式加上

e.得到内容有三种

1)GetWindowText

2)使用EM_GETTEXTEX

GETTEXTEX gt;

gt.cb = 200;

gt.flags =GT_DEFAULT;

gt.codepage = CP_ACP;

gt.lpDefaultChar =NULL;

gt.lpUsedDefChar =NULL;

SendMessage(EM_GETTEXTEX,(WPARAM)&gt,(LPARAM)text);

3)StreamOut(主要用于RTF等格式输出)

static DWORD CALLBACKMyStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb){      CFile* pFile = (CFile*) dwCookie;

    pFile->Write(pbBuff, cb);

    *pcb = cb;

    return 0; }

CFilecFile(TEXT("myfile.rtf"), CFile::modeCreate|CFile::modeWrite);

EDITSTREAM es;

es.dwCookie = (DWORD)&cFile;//设置用例参数,以便回调函数调用

es.pfnCallback =MyStreamOutCallback;

pmyRichEditCtrl->StreamOut(SF_RTF,es);

读入可以此类推,SetWindowText,EM_SETTEXTEX,StreamIn

f.查找字符串

FINDTEXTEX ft;ft.chrg.cpMin = 0; ft.chrg.cpMax = -1; ft.lpstrText = "|"; long lPos= FindText(0, &ft);

如果要继续查找,修改cpMin,如 int nCount = 0; do {    long lPos = GetRichEditCtrl().FindText(0, &ft);     if(-1 == lPos) break;     ft.chrg.cpMin = lPos +strlen(ft.lpstrText);     ++nCount; }while(TRUE);

g.以Html格式保存

目前做法可先转为RTF格式,再通过RTF-to-HTML Converter http://www.codeguru.com/Cpp/controls/richedit/conversions/article.php/c5377/

h.重载OnProtected函数得到对应的消息,如粘贴等 voidCMYichEditorView::OnProtected(NMHDR* pNMHDR, LRESULT* pResult){     ENPROTECTED* pEP = (ENPROTECTED*)pNMHDR;

   switch (pEP->msg) {     case WM_KEYDOWN://按键,判断pEP->wParam    case WM_PASTE://粘贴    case WM_CUT://剪切    case EM_SETCHARFORMAT:     default:    break; };

*pResult = FALSE; }

三.聊天常用

a.LINK 链接功能

1.LoadLibrary(_T("Riched20.dll"));

2. 创建RichEdit2.0控件

CreateEx(0,_T("RichEdit20A"),NULL, WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|ES_READONLY|ES_WANTRETURN|ES_MULTILINE, rect.left, rect.top, cx, cy,pParentWnd->m_hWnd, (HMENU)nID, NULL);

3. 设定选中的文字为链接显示 CHARFORMAT2 cf2;ZeroMemory(&cf2, sizeof(CHARFORMAT2));// cf2.cbSize = sizeof(CHARFORMAT2);cf2.dwMask = CFM_LINK; cf2.dwEffects |= CFE_LINK;m_cRichEdit.SendMessage(EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2);

4.支持链接的点击响应m_cRichEdit.SetEventMask(ENM_LINK);

5.响应链接的点击EN_LINKBEGIN_MESSAGE_MAP(CMyRichEdit, CRichEditCtrl) ON_NOTIFY_REFLECT(EN_LINK,OnURL)END_MESSAGE_MAP() ......

voidCMyRichEdit::OnURLClick(NMHDR *pNmhdr, LRESULT *pResult){      TCHARLinkChar[512];      ENLINK *pLink = (ENLINK*)pNmhdr;      if (pLink->msg ==WM_LBUTTONUP)      {         SetSel(penLink->chrg);//这是链接的文字范围         long Res = GetSelText((char *)LinkChar);//这是链接文字        //后面是你的处理过程         ......       } }

b.插入位图 http://www.codeguru.com/Cpp/controls/richedit/article.php/c2417/http://www.codeguru.com/Cpp/controls/richedit/article.php/c5383/

自定义在RichEdit中插入对象的图标 http://www.blogcn.com/user3/jiangsheng/blog/1319738.html方法基本同KnowledgeBase文章Q220844HOWTO: Insert a Bitmap Into an RTF Document Using the RichEdit Control 只是在最后插入之前调用一下IOleCache::SetData,用一个HGLOBAL作为参数,HGLOBAL里面的数据是一个METAFILEPICT结构,包含自己提供的图片

使用CRichEditView::InsertFileAsObject就可以插入图像。VC++带有一个例子WordPad。另外可以参考“Insert any HBITMAP(Bitmap) in your RichEdit Control”(http://www.codeguru.com/richedit/richeditrc.html)。

c.显示GIF动画常用的是通过qq的imageole.dll(也有用Gif89.dll的) http://www.xiaozhou.net/cooldog/blogview.asp?logID=82http://www.codeproject.com/richedit/AnimatedEmoticon.asp

在richedit控件中插入动态GIF (Native C++版) http://blog.joycode.com/jiangsheng/archive/2004/12/15/41209.aspx

d.IRichEditOleCallback的使用 http://61.186.252.131/Expert/topic/905/905844.xml?temp=.8379022

类似 MSN 信息发送框的制作(上) http://www.vckbase.com/document/viewdoc/?id=1087内容包含:实现右键菜单,图片插入,读取/写入RTF格式字符串

自定义 CRichEditCtrl 控件 http://www.vckbase.com/document/viewdoc/?id=328内容包含:鼠标右键消息,消息映射,字体变换

PS.richedit控件升级到2.0后,先把字体设为楷体,输入汉字没有问题,但输入字母时,字母自动跳转为Arial字体,而1.0却没有这个文题,仍然是用楷体显示字母是一个专门的设计 Dual-font, Smartfont apply, 参见 http://61.186.252.131/Expert/topic/913/913807.xml?temp=.3753778


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/streamrxchina/archive/2008/07/08/2626241.aspx



 

]Richedit使用大全

.常见问题

a.
可以编译,不能执行的
AfxInitRichEdit();

b.
升级默认的Riched版本(默认的有一些bug),如
可在InitInstance中添加
LoadLibrary("RICHED20.DLL")
最后注意 FreeLibrary 如果是CRichEditView基类的可用
BOOL CXXXXXXView::PreCreateWindow(CREATESTRUCT& cs)
{
//
装入rich edit version 2.0
if (LoadLibraryA("RICHED20.DLL") == NULL)
{
AfxMessageBox(_T("Fail to load \"riched20.dll\"."),MB_OK | MB_ICONERROR);
PostMessage(WM_QUIT,0,0);
return FALSE;
} m_strClass = RICHEDIT_CLASSA;//for 2.0 class return CRichEditView::PreCreateWindow(cs);
}

c.
最后追加行
richeditctrl.SetSel(-1, -1);
richeditctrl.ReplaceSel( (LPCTSTR)str );

d.
字数限制
CRichEditCtrl::LimitText(long nChars)

e.
换行切换
CRichEditView
OnInitialUpdate()函数中加入下面两句:
m_nWordWrap = WrapNone;
WrapChanged();
WrapChanged
实际上也是调用
ctrl.SetTargetDevice(NULL, 1); //m_nWordWrap == WrapNone
ctrl.SetTargetDevice(NULL, 0); //m_nWordWrap == WrapToWindow

还有不常用的 m_nWordWrap == WrapToTargetDevice
ctrl.SetTargetDevice(m_dcTarget, GetPrintWidth());
如果是在Dialog中,可使用SetTargetDevice,注意在属性里面加上want return f.有时候不希望带格式的数据粘贴,可通过PasteSpecial选择性粘贴
pmyRichEditCtrl->;PasteSpecial(CF_TEXT);

g.
随着输入随着自动滚动条滚动到最后一行
int nFirstVisible = pmyRichEditCtrl->GetFirstVisibleLine();
if (nFirstVisible > 0)
{
   pmyRichEditCtrl->LineScroll(-nFirstVisible, 0);
}

m_cRichEdit.PostMessage(WM_VSCROLL, SB_BOTTOM,0);

h.
设置UNDO的次数(只能用在RICHED20以上,即默认不支持,必须升级)
SendMessage(EM_SETTEXTMODE,TM_MULTILEVELUNDO,0);
TM_MULTILEVELUNDO
支持多取消(默认值).可通过EM_SETUNDOLIMIT设置最大次数
SendMessage(EM_SETUNDOLIMIT,100,0); i.
响应OnChange
EM_SETEVENTMASK
设置 ENM_CHANGE
long lMask = GetEventMask();
lMask |= ENM_CHANGE;
lMask &= ~ENM_PROTECTED;
SetEventMask(lMask); j.
设置只读
CRichEditCtrl::SetReadOnly( BOOL bReadOnly = TRUE );
通过设置PROTECTED实现选中的文本只读,参见
http://www.codeguru.com/Cpp/controls/richedit/article.php/c2401/

.函数应用

a.
设置字体(主要是通过SetSelectionCharFormat
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask|=CFM_BOLD;
cf.dwEffects|=CFE_BOLD;//
设置粗体,取消用cf.dwEffects&=~CFE_BOLD;
cf.dwMask|=CFM_ITALIC;
cf.dwEffects|=CFE_ITALIC;//
设置斜体,取消用cf.dwEffects&=~CFE_ITALIC;
cf.dwMask|=CFM_UNDERLINE;
cf.dwEffects|=CFE_UNDERLINE;//
设置斜体,取消用cf.dwEffects&=~CFE_UNDERLINE;
cf.dwMask|=CFM_COLOR;
cf.crTextColor = RGB(255,0,0);//
设置颜色
cf.dwMask|=CFM_SIZE;
cf.yHeight =200;//
设置高度
cf.dwMask|=CFM_FACE;
strcpy(cf.szFaceName ,_T("
隶书"));//设置字体
rich.SetSelectionCharFormat(cf);

b.
设置字体的行间距
要用richedit2.0以上
试试
PARAFORMAT2 pf;
pf.cbSize = sizeof(PARAFORMAT2);
pf.dwMask = PFM_NUMBERING | PFM_OFFSET;
pf.wNumbering = PFN_BULLET;//
注意PFM_NUMBERING
pf.dxOffset = 10;
VERIFY(SetParaFormat(pf));
常用的dwMask
PFM_NUMBERING
成员 wNumbering 才起作用,项目符号,默认用PFN_BULLET
2
使用阿拉伯数字 (1, 2, 3, ...).  
3
使用小写字母 (a, b, c, ...).  
4
使用大写字母 (A, B, C, ...).  
5
使用小写罗马数字 (i, ii, iii, ...).  
6
使用大写罗马数字 (I, II, III, ...).  
7
自定义,字符见成员 wNumberingStart.  

PFM_OFFSET
成员 dxOffset 才起作用,缩进,单位twips
PFM_STARTINDENT
成员 dxStartIndent 才起作用,首行缩进
PFM_SPACEAFTER
成员 dySpaceAfter 才起作用,段间距
PFM_LINESPACING
成员 dyLineSpacing 才起作用,行间距

c.
设置CRichEditCtrl(2.0)背景透明
long style = ::GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE);
style &= WS_EX_TRANSPARENT;
::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, style);
CreateEx,然后把WS_EX_TRANSPARENT样式加上 e.得到内容有三种

1)GetWindowText

2)
使用EM_GETTEXTEX
GETTEXTEX gt;
gt.cb = 200;
gt.flags = GT_DEFAULT;
gt.codepage = CP_ACP ;
gt.lpDefaultChar = NULL;
gt.lpUsedDefChar = NULL;
SendMessage(EM_GETTEXTEX,(WPARAM)>,(LPARAM)text);

3)StreamOut(
主要用于RTF等格式输出)
static DWORD CALLBACK
MyStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
   CFile* pFile = (CFile*) dwCookie;    pFile->Write(pbBuff, cb);
   *pcb = cb;    return 0;
}
   CFile cFile(TEXT("myfile.rtf"), CFile::modeCreate|CFile::modeWrite);
   EDITSTREAM es;
   es.dwCookie = (DWORD) &cFile;//
设置用例参数,以便回调函数调用
   es.pfnCallback = MyStreamOutCallback;
   pmyRichEditCtrl->StreamOut(SF_RTF, es);
读入可以此类推,SetWindowText,EM_SETTEXTEX,StreamIn f.查找字符串
FINDTEXTEX ft;
ft.chrg.cpMin = 0;
ft.chrg.cpMax = -1;
ft.lpstrText = "|";
long lPos = FindText(0, &ft);
如果要继续查找,修改cpMin,
int nCount = 0;
do
{
long lPos = GetRichEditCtrl().FindText(0, &ft);
if( -1 == lPos) break;
ft.chrg.cpMin = lPos + strlen(ft.lpstrText);
++nCount;
}while(TRUE); g.
Html格式保存
目前做法可先转为RTF格式,再通过RTF-to-HTML Converter
http://www.codeguru.com/Cpp/controls/richedit/conversions/article.php/c5377/

h.
重载OnProtected函数得到对应的消息,如粘贴等
void CMYichEditorView::OnProtected(NMHDR* pNMHDR, LRESULT* pResult)
{
ENPROTECTED* pEP = (ENPROTECTED*)pNMHDR;  switch (pEP->msg) {
case WM_KEYDOWN://
按键,判断pEP->wParam
case WM_PASTE://
粘贴
case WM_CUT://
剪切
case EM_SETCHARFORMAT:
default:
  break;
};

*pResult = FALSE;
}

  
.聊天常用  
a.LINK
链接功能

1.  LoadLibrary(_T("Riched20.dll"));

2.
创建RichEdit2.0控件
CreateEx(0, _T("RichEdit20A"), NULL, WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP
|ES_READONLY|ES_WANTRETURN|ES_MULTILINE,
          rect.left, rect.top, cx, cy,
  pParentWnd->m_hWnd, (HMENU)nID, NULL);

3.
设定选中的文字为链接显示
CHARFORMAT2 cf2;
ZeroMemory(&cf2, sizeof(CHARFORMAT2));//
cf2.cbSize = sizeof(CHARFORMAT2);
cf2.dwMask = CFM_LINK;
cf2.dwEffects |= CFE_LINK;
m_cRichEdit.SendMessage(EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2);

4.
支持链接的点击响应
m_cRichEdit.SetEventMask(ENM_LINK);

5.
响应链接的点击EN_LINK BEGIN_MESSAGE_MAP(CMyRichEdit, CRichEditCtrl)
ON_NOTIFY_REFLECT(EN_LINK,OnURL)
END_MESSAGE_MAP()
...... void CMyRichEdit::OnURLClick(NMHDR *pNmhdr, LRESULT *pResult)
{
TCHAR LinkChar[512];
ENLINK *pLink = (ENLINK *)pNmhdr;
if (pLink->msg == WM_LBUTTONUP)
{
SetSel(penLink->chrg);//
这是链接的文字范围
long Res = GetSelText((char *)LinkChar);//
这是链接文字
                  //
后面是你的处理过程
                  ......
         }
} b.
插入位图
http://www.codeguru.com/Cpp/controls/richedit/article.php/c2417/
http://www.codeguru.com/Cpp/controls/richedit/article.php/c5383/

自定义在RichEdit中插入对象的图标
http://www.blogcn.com/user3/jiangsheng/blog/1319738.html
方法基本同Knowledge Base文章Q220844 HOWTO: Insert a Bitmap Into an RTF Document Using the RichEdit Control
只是在最后插入之前调用一下IOleCache::SetData,用一个HGLOBAL作为参数,HGLOBAL里面的数据是一个METAFILEPICT结构,包含自己提供的图片使用CRichEditView::InsertFileAsObject就可以插入图像。VC++带有一个例子WordPad
另外可以参考“Insert any HBITMAP (Bitmap) in your RichEdit Control”(http://www.codeguru.com/richedit/richeditrc.html)

c.
显示GIF动画
常用的是通过qqimageole.dll(也有用Gif89.dll)
http://www.xiaozhou.net/cooldog/blogview.asp?logID=82
http://www.codeproject.com/richedit/AnimatedEmoticon.asp

richedit控件中插入动态GIF (Native C++)
http://blog.joycode.com/jiangsheng/archive/2004/12/15/41209.aspx

d.IRichEditOleCallback
的使用
http://61.186.252.131/Expert/topic/905/905844.xml?temp=.8379022

类似 MSN 信息发送框的制作()
http://www.vckbase.com/document/viewdoc/?id=1087
内容包含:实现右键菜单,图片插入,读取/写入RTF格式字符串自定义 CRichEditCtrl 控件
http://www.vckbase.com/document/viewdoc/?id=328
内容包含:鼠标右键消息,消息映射,字体变换 PS.richedit控件升级到2.0后,先把字体设为楷体,输入汉字没有问题,但输入字母时,字母自动跳转为Arial字体,而1.0却没有这个文题,仍然是用楷体显示字母
是一个专门的设计 Dual-font, Smart font apply, 参见 http://61.186.252.131/Expert/topic/913/913807.xml?temp=.3753778

UID

帖子

1783 

精华

8 

积分

1072 

阅读权限

200 

在线时间

1449 小时 

注册时间

2006-4-4 

最后登录

2008-12-14 

查看个人网站

查看详细资料

TOP

admin

佰锐科技

个人组

·        个人空间

·        发短消息

·        加为好友

·        当前在线

2#发表于 2008-3-2 02:40 PM  只看该作者

注:
        m_edit1
代表IDIDC_EDIT1CEdit控件的control类型的变量
        m_richedit1
代表IDIDC_RICHEDIT1CRichEditCtrl控件的control类型的变量


--------------------------------------------------------------------------------
1.
设置edit只读属性

   
方法一:
                m_edit1.SetReadOnly(TRUE);
   
方法二:
                ::SendMessage(m_edit1.m_hWnd, EM_SETREADONLY, TRUE, 0);


--------------------------------------------------------------------------------
2.
判断edit中光标状态并得到选中内容(richedit同样适用)

        int nStart, nEnd;
        CString strTemp;

        m_edit1.GetSel(nStart, nEnd);
        if(nStart == nEnd)
        {
            strTemp.Format(_T("
光标在%d"), nStart);
            AfxMessageBox(strTemp);
        }
        else
        {
            //
得到edit选中的内容   
            m_edit1.GetWindowText(strTemp);
            strTemp = strTemp.Mid(nStart) - strTemp.Mid(nEnd);
            AfxMessageBox(strTemp);
        }
   
注:GetSel后,如果nStartnEnd,表明光标处于某个位置(直观来看就是光标在闪动);
            
如果nStartnEnd不相等,表明用户在edit中选中了一段内容。


--------------------------------------------------------------------------------
3.
edit最后添加字符串

        CString str;
        m_edit1.SetSel(-1, -1);
        m_edit1.ReplaceSel(str);


--------------------------------------------------------------------------------
4.
随输入自动滚动到最后一行(richedit同样适用)

   
方法一:(摘自msdn
        // The pointer to my edit.
        extern CEdit* pmyEdit;
        int nFirstVisible = pmyEdit->GetFirstVisibleLine();

        // Scroll the edit control so that the first visible line
        // is the first line of text.
        if (nFirstVisible > 0)
        {
            pmyEdit->LineScroll(-nFirstVisible, 0);
        }
   
方法二:
        m_richedit.PostMessage(WM_VSCROLL, SB_BOTTOM, 0);


--------------------------------------------------------------------------------
5.
如何限制edit输入指定字符

   
可以从CEdit派生一个类,添加WM_CHAR消息映射。下面一个例子实现了限定输入16进制字符的功能。

   void CMyHexEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
   {
        if ( (nChar >= '0' && nChar <= '9') ||
             (nChar >= 'a' && nChar <= 'f') ||
             (nChar >= 'A' && nChar <= 'F') ||
              nChar == VK_BACK ||
              nChar == VK_DELETE)    //msdn
virtual key
       {
            CEdit::OnChar(nChar, nRepCnt, nFlags);
        }     
   }


--------------------------------------------------------------------------------
6.
如何使用richedit

   
添加AfxInitRichEdit();
       CxxxApp::InitInstance()
        {
             AfxInitRichEdit();
          .............
       }

   AfxInitRichEdit()
功能:装载 RichEdit 1.0 Control (RICHED32.DLL).


--------------------------------------------------------------------------------
7.
如何使用richedit2.0 or richedit3.0

   
使用原因:由于RichEdit2.0A自动为宽字符(WideChar),所以它可以解决中文乱码以及一些汉字问题

   
方法一:(msdn上的做法,适用于用VC.NET及以后版本创建的工程)
            To update rich edit controls in existing Visual C++ applications to version 2.0,
            open the .RC file as text, change the class name of each rich edit control from   "RICHEDIT" to  "RichEdit20a".
            Then replace the call to AfxInitRichEdit with AfxInitRichEdit2.
   
方法二:以对话框为例:
       (1)   
增加一全局变量 HMODULE hMod;
       (2)   
CxxxApp::InitInstance()中添加一句hMod = LoadLibrary(_T("riched20.dll"));
              
CxxxApp::ExitInstance()中添加一句FreeLibrary(hMod);
       (3)      
在对话框上放一个richedit,文本方式打开.rc文件修改该richedit控件的类名"RICHEDIT" to  "RichEdit20a".
       (4)      
在对话框头文件添加 CRichEditCtrl m_richedit;
              
OnInitDialog中添加 m_richedit.SubclassDlgItem(IDC_RICHEDIT1, this);


--------------------------------------------------------------------------------
8.
改变richedit指定区域的颜色及字体

        CHARFORMAT cf;
        ZeroMemory(&cf, sizeof(CHARFORMAT));
        cf.cbSize = sizeof(CHARFORMAT);
        cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |
                            CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
        cf.dwEffects = 0;
        cf.yHeight = 12*12;//
文字高度
        cf.crTextColor = RGB(200, 100, 255); //
文字颜色
        strcpy(cf.szFaceName ,_T("
隶书"));//设置字体
   
        m_richedit1.SetSel(1, 5); //
设置处理区域
        m_richedit1.SetSelectionCharFormat(cf);


--------------------------------------------------------------------------------
9.
设置行间距(只适用于richedit2.0

        PARAFORMAT2 pf;
        pf2.cbSize = sizeof(PARAFORMAT2);
        pf2.dwMask = PFM_LINESPACING | PFM_SPACEAFTER;
        pf2.dyLineSpacing = 200;
        pf2.bLineSpacingRule  = 4;
        m_richedit.SetParaFormat(pf2);


--------------------------------------------------------------------------------
10.richedit
插入位图

Q220844
How to insert a bitmap into an RTF document using the RichEdit control in Visual C++ 6.0
http://support.microsoft.com/default.aspx?scid=kb;en-us;220844
http://www.codeguru.com/Cpp/controls/richedit/article.php/c2417/
http://www.codeguru.com/Cpp/controls/richedit/article.php/c5383/


--------------------------------------------------------------------------------
11.richedit
插入gif动画

http://www.codeproject.com/richedit/AnimatedEmoticon.asp


--------------------------------------------------------------------------------
12.richedit
嵌入ole对象

http://support.microsoft.com/kb/141549/en-us


--------------------------------------------------------------------------------
13.
使richedit选中内容只读

http://www.codeguru.com/cpp/controls/richedit/article.php/c2401/


--------------------------------------------------------------------------------
14.
打印richedit

http://www.protext.com/MFC/RichEdit3.htm


--------------------------------------------------------------------------------
15.richeidt
用于聊天消息窗口

http://www.vckbase.com/document/viewdoc/?id=1087
http://www.codeproject.com/richedit/chatrichedit.asp
http://www.codeguru.com/Cpp/controls/richedit/article.php/c2395/


--------------------------------------------------------------------------------
16.
解决richeditEN_SETFOCUSEN_KILLFOCUS无响应的问题

http://support.microsoft.com/kb/181664/en-us


--------------------------------------------------------------------------------
17.richedit
拼写检查

http://www.codeproject.com/com/AutoSpellCheck.asp


--------------------------------------------------------------------------------
18.
改变edit背景色

Q117778
How to change the background color of an MFC edit control
http://support.microsoft.com/kb/117778/en-us


--------------------------------------------------------------------------------
19.
edit控件的父窗口属性是带标题栏WS_CAPTION和子窗口WS_CHILD时,不能设置焦点SetFocus

Q230587
PRB: Can't Set Focus to an Edit Control When its Parent Is an Inactive Captioned Child Window

http://support.microsoft.com/kb/230587/en-us



--------------------------------------------------------------------------------
20.
Edit中回车时,会退出对话框

选中Edit的风格Want Return

MSDN
的解释如下:
ES_WANTRETURN   Specifies that a carriage return be inserted when the user presses the ENTER key while entering text into a multiple-line edit control in a dialog box. Without this style, pressing the ENTER key has the same effect as pressing the dialog box's default pushbutton. This style has no effect on a single-line edit control.


--------------------------------------------------------------------------------
21.
动态创建的edit没有边框的问题

    m_edit.Create(....);
    m_edit.ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_DRAWFRAME);

--------------------------------------------------------------------------------
22.
一个能显示RTFole(包括gif wmvexcel ppt)的例子

http://www.codeproject.com/richedit/COleRichEditCtrl.asp

UID

帖子

1783 

精华

8 

积分

1072 

阅读权限

200 

在线时间

1449 小时 

注册时间

2006-4-4 

最后登录

2008-12-14 

查看个人网站

查看详细资料

TOP

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在VC ListControl控件添加check box,你可以使用自定义绘制来实现。下面是一个简单的示例代码: 1. 首先,在资源编辑器创建一个List Control控件。 2. 在对话框类的头文件添加以下成员变量和消息映射: ```cpp // 头文件 class CMyDialog : public CDialogEx { // ... CListCtrl m_list; CImageList m_imageList; // ... afx_msg void OnLvnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult); DECLARE_MESSAGE_MAP() }; ``` 3. 在OnInitDialog()函数添加以下代码: ```cpp // 初始化 List Control m_list.SubclassDlgItem(IDC_LIST, this); m_list.SetExtendedStyle(LVS_EX_CHECKBOXES); // 创建图像列表以容纳 checkbox 图标 m_imageList.Create(16, 16, ILC_MASK | ILC_COLOR, 1, 1); HICON hIcon = (HICON)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_CHECKBOX), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); m_imageList.Add(hIcon); m_list.SetImageList(&m_imageList, LVSIL_SMALL); ``` 4. 在消息映射添加以下代码: ```cpp // 消息映射 BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx) // ... ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST, &CMyDialog::OnLvnItemchangedList) END_MESSAGE_MAP() ``` 5. 实现OnLvnItemchangedList()函数: ```cpp void CMyDialog::OnLvnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = reinterpret_cast<NM_LISTVIEW*>(pNMHDR); // 确定是否选了某个项目 if ((pNMListView->uChanged & LVIF_STATE) && (pNMListView->uNewState & LVIS_STATEIMAGEMASK)) { // 获取选项目的索引 int nIndex = pNMListView->iItem; // 获取当前 checkbox 的状态 BOOL bChecked = m_list.GetCheck(nIndex); // 根据需要处理 checkbox 状态 if (bChecked) { // 处理选状态 } else { // 处理未选状态 } } *pResult = 0; } ``` 这样,你就可以在VC ListControl控件添加check box,并通过OnLvnItemchangedList()函数处理选状态的变化。记得将IDC_LIST替换为你实际使用的List Control控件的ID。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值