青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

CRichEditCtrl 超文本編輯 [轉(zhuǎn)]

一.常見問題
a.可以編譯,不能執(zhí)行的
AfxInitRichEdit();

b.升級(jí)默認(rèn)的Riched版本(默認(rèn)的有一些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 );

顯示回車換行:

設(shè)屬性:"Multi lines"選為True。

設(shè)屬性:"want return "選為True。

d.字?jǐn)?shù)限制
CRichEditCtrl::LimitText(long nChars)

e.換行切換
CRichEditView的OnInitialUpdate()函數(shù)中加入下面兩句:
m_nWordWrap = WrapNone;
WrapChanged();
WrapChanged實(shí)際上也是調(diào)用
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.有時(shí)候不希望帶格式的數(shù)據(jù)粘貼,可通過PasteSpecial選擇性粘貼
pmyRichEditCtrl->PasteSpecial(CF_TEXT);

g.隨著輸入隨著自動(dòng)滾動(dòng)條滾動(dòng)到最后一行
int nFirstVisible = pmyRichEditCtrl->GetFirstVisibleLine();
if (nFirstVisible > 0)
{
   pmyRichEditCtrl->LineScroll(-nFirstVisible, 0);
}

m_cRichEdit.PostMessage(WM_VSCROLL, SB_BOTTOM,0);


h.設(shè)置UNDO的次數(shù)(只能用在RICHED20以上,即默認(rèn)不支持,必須升級(jí))
SendMessage(EM_SETTEXTMODE,TM_MULTILEVELUNDO,0);
TM_MULTILEVELUNDO 支持多取消(默認(rèn)值).可通過EM_SETUNDOLIMIT設(shè)置最大次數(shù)
SendMessage(EM_SETUNDOLIMIT,100,0);

i.響應(yīng)OnChange
EM_SETEVENTMASK 設(shè)置 ENM_CHANGE
long lMask = GetEventMask();
lMask |= ENM_CHANGE;
lMask &= ~ENM_PROTECTED;
SetEventMask(lMask);

j.設(shè)置只讀
CRichEditCtrl::SetReadOnly( BOOL bReadOnly = TRUE );
通過設(shè)置PROTECTED實(shí)現(xiàn)選中的文本只讀,參見
http://www.codeguru.com/Cpp/controls/richedit/article.php/c2401/

 

二.函數(shù)應(yīng)用
a.設(shè)置字體(主要是通過SetSelectionCharFormat)

CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask|=CFM_BOLD;
cf.dwEffects|=CFE_BOLD;//設(shè)置粗體,取消用cf.dwEffects&=~CFE_BOLD;
cf.dwMask|=CFM_ITALIC;
cf.dwEffects|=CFE_ITALIC;//設(shè)置斜體,取消用cf.dwEffects&=~CFE_ITALIC;
cf.dwMask|=CFM_UNDERLINE;
cf.dwEffects|=CFE_UNDERLINE;//設(shè)置斜體,取消用cf.dwEffects&=~CFE_UNDERLINE;
cf.dwMask|=CFM_COLOR;
cf.crTextColor = RGB(255,0,0);//設(shè)置顏色
cf.dwMask|=CFM_SIZE;
cf.yHeight =200;//設(shè)置高度
cf.dwMask|=CFM_FACE;
strcpy(cf.szFaceName ,_T("隸書"));//設(shè)置字體
rich.SetSelectionCharFormat(cf);

b.設(shè)置字體的行間距
要用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 才起作用,項(xiàng)目符號(hào),默認(rèn)用PFN_BULLET
2 使用阿拉伯?dāng)?shù)字 (1, 2, 3, ...). 
3 使用小寫字母 (a, b, c, ...). 
4 使用大寫字母 (A, B, C, ...). 
5 使用小寫羅馬數(shù)字 (i, ii, iii, ...). 
6 使用大寫羅馬數(shù)字 (I, II, III, ...). 
7 自定義,字符見成員 wNumberingStart. 
PFM_OFFSET 成員 dxOffset 才起作用,縮進(jìn),單位twips
PFM_STARTINDENT 成員 dxStartIndent 才起作用,首行縮進(jìn)
PFM_SPACEAFTER 成員 dySpaceAfter 才起作用,段間距
PFM_LINESPACING 成員 dyLineSpacing 才起作用,行間距

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

e.得到內(nèi)容有三種
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;//設(shè)置用例參數(shù),以便回調(diào)函數(shù)調(diào)用
   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);

如果要繼續(xù)查找,修改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格式保存
目前做法可先轉(zhuǎn)為RTF格式,再通過RTF-to-HTML Converter
http://www.codeguru.com/Cpp/controls/richedit/conversions/article.php/c5377/

h.重載OnProtected函數(shù)得到對(duì)應(yīng)的消息,如粘貼等
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. 創(chuàng)建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. 設(shè)定選中的文字為鏈接顯示
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.支持鏈接的點(diǎn)擊響應(yīng)
m_cRichEdit.SetEventMask(ENM_LINK);


5.響應(yīng)鏈接的點(diǎn)擊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中插入對(duì)象的圖標(biāo)
http://www.blogcn.com/user3/jiangsheng/blog/1319738.html
方法基本同Knowledge Base文章Q220844 HOWTO: Insert a Bitmap Into an RTF Document Using the RichEdit Control
只是在最后插入之前調(diào)用一下IOleCache::SetData,用一個(gè)HGLOBAL作為參數(shù),HGLOBAL里面的數(shù)據(jù)是一個(gè)METAFILEPICT結(jié)構(gòu),包含自己提供的圖片

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

c.顯示GIF動(dòng)畫
常用的是通過qq的imageole.dll(也有用Gif89.dll的)
http://www.xiaozhou.net/cooldog/blogview.asp?logID=82
http://www.codeproject.com/richedit/AnimatedEmoticon.asp

在richedit控件中插入動(dòng)態(tài)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 信息發(fā)送框的制作(上)
http://www.vckbase.com/document/viewdoc/?id=1087
內(nèi)容包含:實(shí)現(xiàn)右鍵菜單,圖片插入,讀取/寫入RTF格式字符串

自定義 CRichEditCtrl 控件
http://www.vckbase.com/document/viewdoc/?id=328
內(nèi)容包含:鼠標(biāo)右鍵消息,消息映射,字體變換

PS.richedit控件升級(jí)到2.0后,先把字體設(shè)為楷體,輸入漢字沒有問題,但輸入字母時(shí),字母自動(dòng)跳轉(zhuǎn)為Arial字體,而1.0卻沒有這個(gè)文題,仍然是用楷體顯示字母
是一個(gè)專門的設(shè)計(jì) Dual-font, Smart font apply, 參見 http://61.186.252.131/Expert/topic/913/913807.xml?temp=.3753778

posted on 2010-08-01 21:06 wrh 閱讀(581) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導(dǎo)航

<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

統(tǒng)計(jì)

常用鏈接

留言簿(19)

隨筆檔案

文章檔案

收藏夾

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品国产免费观看| 国产精品久久福利| 欧美在线视频导航| 美女久久一区| 国产精品色一区二区三区| 亚洲国产91色在线| 亚洲欧美国产高清va在线播| 毛片一区二区三区| 亚洲在线免费观看| 欧美激情免费在线| 在线视频成人| 久久久久久久久岛国免费| 亚洲社区在线观看| 欧美精品高清视频| 亚洲国产婷婷综合在线精品| 久久久久欧美精品| 性刺激综合网| 国产三级欧美三级日产三级99| 一区二区三区免费观看| 久久久久一区| 久久国产精品99国产精| 国产美女搞久久| 午夜视黄欧洲亚洲| 亚洲自拍偷拍网址| 亚洲国产91色在线| 91久久精品国产91久久| 午夜精品久久久久久久久久久久久 | 国产亚洲成人一区| 最新国产乱人伦偷精品免费网站| 欧美有码视频| 欧美理论电影在线观看| 一区二区在线观看视频在线观看| 在线亚洲观看| 久久精品国产精品亚洲| 亚洲韩国日本中文字幕| 欧美1区视频| 免费观看一区| 一区在线播放视频| 免费观看日韩av| 夜夜精品视频一区二区| 亚洲一区二区视频在线观看| 亚洲精品国产精品国自产观看| 欧美 日韩 国产在线| 亚洲人成网站影音先锋播放| 欧美激情在线观看| 欧美日韩美女在线观看| 亚洲一区二区三区精品在线| 亚洲女优在线| 亚洲成人在线观看视频| 亚洲精品国产精品久久清纯直播 | 亚洲主播在线观看| 国产日韩精品一区二区| 久久影院午夜片一区| 欧美1级日本1级| 亚洲一区美女视频在线观看免费| 亚洲欧美国产va在线影院| 在线看片欧美| 99国产精品99久久久久久| 国产欧美精品在线观看| 欧美高清你懂得| 欧美日韩国产首页在线观看| 亚洲欧美在线一区| 久久久亚洲国产天美传媒修理工| 一二美女精品欧洲| 欧美亚洲在线观看| 1204国产成人精品视频| 9色精品在线| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲国产99| 国内外成人免费激情在线视频网站| 亚洲国产精品成人精品| 国产精品入口| 亚洲经典一区| 国产在线日韩| 一区二区三区四区国产| 亚洲第一在线视频| 亚洲欧美日韩国产精品| 亚洲日本在线视频观看| 亚洲欧美日韩电影| 在线视频日韩| 亚洲图片在线| 久久精品一区二区三区不卡| 亚洲一区免费在线观看| 欧美福利专区| 亚洲精品日韩在线观看| 欧美一区久久| 久久夜色精品国产亚洲aⅴ| 国内成+人亚洲+欧美+综合在线| 性欧美video另类hd性玩具| 久久夜精品va视频免费观看| 91久久综合| 国产精品在线看| 久久躁日日躁aaaaxxxx| 久久av最新网址| 亚洲欧美日韩一区二区三区在线| 国产噜噜噜噜噜久久久久久久久| 午夜精品福利在线| 亚洲成人在线视频播放| 在线亚洲欧美| 亚洲九九精品| 在线欧美福利| 韩国女主播一区二区三区| 欧美美女操人视频| 嫩草国产精品入口| 久久久久久九九九九| 亚洲精选视频免费看| 欧美99久久| 美女网站在线免费欧美精品| 欧美一区二区三区在| 性欧美video另类hd性玩具| 亚洲日本无吗高清不卡| 久久精品综合| 亚洲免费高清视频| 国产一区香蕉久久| 午夜精品久久久久久久久久久| 亚洲免费在线电影| 一二美女精品欧洲| 在线观看视频亚洲| 亚洲婷婷在线| 午夜视频一区在线观看| 亚洲中字黄色| 欧美大片专区| 亚洲精品久久久久久久久久久| 精久久久久久| 久久视频一区二区| 亚洲激情在线| 9色精品在线| 欧美天堂在线观看| 亚洲日本欧美天堂| 欧美成人tv| 你懂的国产精品| 亚洲精品乱码久久久久久| 亚洲国产精品女人久久久| 欧美韩日一区| 久久免费一区| 欧美视频一区二区在线观看| 在线电影欧美日韩一区二区私密| 亚洲啪啪91| 久久久久国产精品一区| 久久精品综合| 欧美日韩一区二区三区免费| 久久综合电影一区| 夜夜精品视频| 欧美顶级大胆免费视频| 老巨人导航500精品| 国产欧美日韩| 美女在线一区二区| 欧美激情视频一区二区三区在线播放 | 亚洲国产精品第一区二区| 亚洲欧美日韩一区在线| 亚洲视频免费在线| 欧美日韩一区二区在线| 久久一本综合频道| 亚洲男人av电影| 欧美亚州韩日在线看免费版国语版| 91久久久久久| 久久综合久久美利坚合众国| 国产欧美日韩视频| 一区二区三区国产在线| 亚洲欧美成人一区二区三区| 亚洲日本一区二区| 欧美日韩中文字幕综合视频| 亚洲国产精品久久人人爱蜜臀| 蜜桃伊人久久| 亚洲一区二区三区色| 久久精品一区二区三区中文字幕| 国产九色精品成人porny| 免费欧美在线视频| 久久久久久有精品国产| 国产欧美一区二区精品秋霞影院| 亚洲国产高清自拍| 亚洲欧美日韩国产综合| 在线视频日韩| 国产一区二区黄色| 香蕉国产精品偷在线观看不卡| 国产一区二区0| 蜜臀91精品一区二区三区| 一区二区三区免费在线观看| 久久精品视频在线观看| 久久九九有精品国产23| 亚洲精品国精品久久99热一| 国产精品久久久久aaaa樱花| 久久精品男女| 久久gogo国模裸体人体| 久久综合色播五月| 一区二区三区在线观看视频| 久久久九九九九| 国模吧视频一区| 欧美大尺度在线观看| 日韩午夜av在线| 亚洲欧美国产日韩中文字幕| 久久久夜夜夜| 国产亚洲激情| 亚洲一区影院| 久久久久久网址| 激情亚洲网站| 久久综合国产精品| 欧美专区福利在线| 国外精品视频| 欧美在线你懂的|