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

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

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

b.升級默認(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實際上也是調(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ù)據(jù)粘貼,可通過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.設(shè)置UNDO的次數(shù)(只能用在RICHED20以上,即默認(rèn)不支持,必須升級)
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實現(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 才起作用,項目符號,默認(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ù)得到對應(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.支持鏈接的點擊響應(yīng)
m_cRichEdit.SetEventMask(ENM_LINK);


5.響應(yīng)鏈接的點擊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中插入對象的圖標(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,用一個HGLOBAL作為參數(shù),HGLOBAL里面的數(shù)據(jù)是一個METAFILEPICT結(jié)構(gòu),包含自己提供的圖片

使用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=82
http://www.codeproject.com/richedit/AnimatedEmoticon.asp

在richedit控件中插入動態(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)容包含:實現(xiàn)右鍵菜單,圖片插入,讀取/寫入RTF格式字符串

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

PS.richedit控件升級到2.0后,先把字體設(shè)為楷體,輸入漢字沒有問題,但輸入字母時,字母自動跳轉(zhuǎn)為Arial字體,而1.0卻沒有這個文題,仍然是用楷體顯示字母
是一個專門的設(shè)計 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) 評論(0)  編輯 收藏 引用


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


導(dǎo)航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統(tǒng)計

常用鏈接

留言簿(19)

隨筆檔案

文章檔案

收藏夾

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            av成人免费在线| 欧美激情精品久久久久久大尺度| 欧美.日韩.国产.一区.二区| 女人香蕉久久**毛片精品| 99pao成人国产永久免费视频| 亚洲图片欧洲图片日韩av| 国产视频一区二区三区在线观看| 久久亚洲一区| 国产精品超碰97尤物18| 噜噜噜躁狠狠躁狠狠精品视频| 欧美国产先锋| 久久精品免费| 欧美日韩一区二区三| 久久久久久久久久码影片| 欧美激情视频在线播放 | 亚洲免费电影在线观看| 国产香蕉久久精品综合网| 最新亚洲电影| 国产精品五月天| 亚洲精品小视频| 亚洲一区二区三区四区在线观看 | 蜜臀av在线播放一区二区三区| 亚洲伦理一区| 欧美在线3区| 亚洲一区二区三区精品视频| 久久综合九色综合久99| 欧美在线观看视频一区二区三区| 欧美激情一区二区三区四区| 久久视频精品在线| 国产欧美一区二区三区视频 | 亚洲国产成人午夜在线一区| 亚洲欧美日韩精品久久亚洲区 | 欧美在线一级va免费观看| 欧美精品成人| 午夜精品亚洲| 亚洲精品在线视频观看| 久久午夜羞羞影院免费观看| 久久国产欧美精品| 国产精品久久毛片a| 亚洲每日在线| 亚洲美女中文字幕| 欧美第十八页| 欧美激情一区| 91久久在线播放| 免费亚洲网站| 亚洲高清视频一区二区| 亚洲国产精品美女| 久久综合伊人77777麻豆| 裸体素人女欧美日韩| 怡红院av一区二区三区| 久久人人看视频| 老牛影视一区二区三区| 在线成人www免费观看视频| 久久久久国产精品厨房| 国产精品尤物| 亚洲素人一区二区| 欧美自拍丝袜亚洲| 国产精品最新自拍| 一本色道久久综合亚洲精品不| 欧美激情2020午夜免费观看| 欧美激情成人在线视频| 亚洲人体一区| 欧美日韩大片一区二区三区| 亚洲精品视频在线| 亚洲欧美成人一区二区三区| 国产精品人成在线观看免费 | 亚洲激情在线观看视频免费| 理论片一区二区在线| 欧美激情亚洲精品| 亚洲一级影院| 国产欧美日韩三级| 久久蜜桃精品| 亚洲黑丝一区二区| 亚洲欧美成aⅴ人在线观看| 国产在线国偷精品产拍免费yy| 久久婷婷麻豆| 日韩视频免费在线| 久久狠狠久久综合桃花| 亚洲国产精品日韩| 欧美日韩亚洲另类| 欧美一区二区黄| 欧美aⅴ一区二区三区视频| 99视频有精品| 国产欧美在线播放| 欧美国产日韩一区二区| 亚洲一区二区三区涩| 欧美ed2k| 亚欧成人精品| 亚洲三级电影全部在线观看高清| 国产精品都在这里| 免费看成人av| 午夜精品美女久久久久av福利| 欧美激情视频一区二区三区在线播放| 日韩视频在线观看| 国内精品久久久久影院色| 欧美激情一区二区三区全黄| 欧美专区在线观看| 亚洲精品一区二区三区樱花| 国产精品羞羞答答| 欧美黑人一区二区三区| 亚洲精品在线观| 国产日韩欧美在线观看| 欧美日韩不卡在线| 久久久噜噜噜久久| 亚洲免费一在线| 亚洲精选在线| 欧美激情精品久久久久久久变态| 欧美一区二区三区四区视频 | 亚洲欧美日韩一区二区| 亚洲国产成人久久| 久久久91精品国产一区二区精品| 一区二区三区精品国产| 亚洲第一久久影院| 国产在线观看精品一区二区三区| 欧美三级小说| 欧美96在线丨欧| 久久美女性网| 久久激情中文| 亚洲曰本av电影| 亚洲久久在线| 欧美成年人视频| 久久久久一区二区三区| 亚洲欧美日韩综合一区| aaa亚洲精品一二三区| 亚洲国产高清一区二区三区| 国产综合色产在线精品| 国产精品一二一区| 欧美性猛片xxxx免费看久爱| 欧美1区免费| 欧美高清在线播放| 欧美黄网免费在线观看| 欧美国产免费| 欧美大片在线观看一区二区| 欧美成人乱码一区二区三区| 欧美99在线视频观看| 欧美夫妇交换俱乐部在线观看| 免费视频一区| 欧美另类一区| 欧美日韩在线三级| 欧美日韩调教| 国产精品成人aaaaa网站| 国产精品wwwwww| 国产精品夜夜夜| 国产午夜亚洲精品不卡| 黄色av成人| 欧美激情中文不卡| 久久人人爽人人爽| 久久综合国产精品台湾中文娱乐网| 久久久久久久久岛国免费| 欧美在线视频一区二区| 久久精品色图| 蜜臀91精品一区二区三区| 欧美国产亚洲视频| 欧美日韩一区自拍| 国产欧美一区二区精品仙草咪| 国产亚洲精久久久久久| 伊人久久婷婷| 亚洲精品乱码久久久久久黑人| 一本久久综合| 欧美亚洲日本国产| 老鸭窝91久久精品色噜噜导演| 欧美激情视频一区二区三区不卡| 亚洲欧洲一区二区天堂久久| 一区二区高清视频在线观看| 亚洲欧美日韩国产一区二区三区| 欧美一区二区三区四区夜夜大片 | 午夜综合激情| 久久久久综合网| 亚洲国产成人精品视频| 一区二区三区欧美成人| 欧美一区国产一区| 久久久噜噜噜| 欧美一区二区免费| 欧美成人免费网| 国产精品毛片大码女人| 亚洲电影免费观看高清| 一区二区三区四区国产精品| 欧美在线free| 亚洲国产精品成人va在线观看| 一本色道婷婷久久欧美| 久久精品理论片| 欧美日韩在线一区二区| 黄色成人免费观看| 亚洲天堂男人| 蜜臀久久久99精品久久久久久| 日韩视频一区| 久久国产一区| 亚洲欧洲日韩在线| 久久九九99视频| 国产精品国码视频| 亚洲国产一区二区精品专区| 午夜电影亚洲| 亚洲片国产一区一级在线观看| 午夜亚洲福利| 欧美日韩国产免费| 在线看片第一页欧美| 性伦欧美刺激片在线观看| 亚洲高清一二三区| 久久午夜视频| 国产一区二区日韩精品欧美精品|