首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

RichEdit 實作上標/下標:EM_SETCHARFORMAT 訊息完整應用

     編輯:關於C++

核心原理

RichEdit 控制項透過 EM_SETCHARFORMAT 訊息設定字元格式。CHARFORMAT 結構中 yOffset 欄位控制垂直偏移(單位:twip,1 twip = 1/1440 英吋):

  • 正值 → 上標
  • 負值 → 下標
  • 0 → 一般文字

完整實作

typedef enum {
    CFM_Superscript, // 上標
    CFM_Subscript,   // 下標
    CFM_Normal       // 一般
} TCharacterFormat;

void MySetCharFormat(TRichEdit* RichEdit, TCharacterFormat fmt) {
    CHARFORMAT cf = {0};
    cf.cbSize = sizeof(CHARFORMAT);
    cf.dwMask = CFM_OFFSET; // 僅修改垂直偏移

    switch (fmt) {
        case CFM_Superscript: cf.yOffset =  60; break; // 60 twip ≈ 1/24 吋
        case CFM_Subscript:   cf.yOffset = -60; break;
        case CFM_Normal:      cf.yOffset =   0; break;
    }

    // SCF_SELECTION: 套用至目前選取範圍
    RichEdit->Perform(EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject* Sender) { // 上標按鈕
    MySetCharFormat(RichEdit1, CFM_Superscript);
}

void __fastcall TForm1::Button2Click(TObject* Sender) { // 下標按鈕
    MySetCharFormat(RichEdit1, CFM_Subscript);
}

使用步驟

  1. 在 RichEdit 中選取欲設定的文字
  2. 點擊「上標」或「下標」按鈕
  3. 選取文字即變為上/下標

進階應用

  • 工具列整合:製作類 Word 的格式工具列,圖示分別為 x²、x₂
  • 鍵盤快速鍵:Ctrl+Shift++ 上標、Ctrl+= 下標(於 OnKeyDown 處理)
  • 字型大小聯動:上下標字體通常縮小,可同時設定 CFM_SIZE 與 yHeight
  • 取得當前格式:EM_GETCHARFORMAT 讀取 yOffset 判斷狀態,更新工具列按鈕按下狀態

常見問題

  1. 未選取文字時點擊按鈕:SCF_SELECTION 無效,建議檢查 SelLength > 0 或改用 SCF_WORD 套用至游標所在字詞
  2. RichEdit 版本:RichEdit 2.0+ (riched20.dll) 完整支援,1.0 版功能受限
  3. 列印/匯出 RTF:上下標資訊會正確保存於 RTF 檔中
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved