2015-09-11 39 views
1

我想更改從鍵盤使用Alt + Unicode代碼插入的unicode字符。 我用PretranslateMessage改變從鍵盤直接插入的字符,它的工作。但使用Alt + Unicode代碼方法則不行。 這裏是代碼: 當啓用顯示/隱藏段落標記時,Microsoft Word具有此功能。在CRichEdit中使用Alt + Unicode插入更改字符

BOOL CEmphasizeEdit::PreTranslateMessage(MSG* msg) 
{ 
    if (msg->hwnd == m_hWnd) 
    { 
     if (msg->message == WM_CHAR) 
     { 
      if (TheApp.Options.m_bShowWSpaceChars) 
      { 
       if (msg->wParam == ' ') // This works in both cases Space key pressed or Alt + 3 + 2 in inserted 
       { 
        msg->wParam = '·'; 
       } 
       else if (msg->wParam == (unsigned char)' ') // this does not work 
       { 
        msg->wParam = (unsigned char)'°'; 
       } 
      } 
     } 
    } 
    return CRichEditCtrl::PreTranslateMessage(msg); 
} 

如果我從鍵盤ALT + 0 + 1 + 6 + 0,這是'插入「(無間斷間隔),我希望的CRichEditCtrl顯示‘°’或我指定另一個炭。

我該如何處理這個問題才能使其工作?

+0

這不是Word如何實現該功能。它不**修改**文檔內容。它只是變化,內容如何顯示。 – IInspectable

+0

是的,我只想修改它的顯示方式。這就是爲什麼我要重定向插入的字符。 – Mihai

回答

0

我必須得到光標位置發送一個附加字符串到控件,然後在插入的字符後設置選擇。當發生這種情況時,我必須跳過CRichEditCtrl :: PreTranslateMessage(msg);

BOOL CEmphasizeEdit::PreTranslateMessage(MSG* msg) 
{ 
    if (msg->hwnd == m_hWnd) 
    { 
     if (msg->message == WM_CHAR) 
     { 
      TCHAR text[2]; 
      text[1] = 0x00; 
      BOOL found = 1; 

      switch (msg->wParam) 
      { 
       case 0x20: text[0] = _C('·'); break; 
       case 0xA0: text[0] = 0xB0; break; 
      } 

      CHARRANGE cr; 
      GetSel(cr); 
      cr.cpMax++; 
      cr.cpMin++; 

      ReplaceSel(text); 
      SetSel(cr); 

      return 1; 
     } 
    } 
    return CRichEditCtrl::PreTranslateMessage(msg); 
} 
0

替代 + 空間保留給程序的關閉菜單。

您應該使用其他的序列,例如按Ctrl +空間 Alt鍵+按Ctrl +空間

' '(unsigned char)' '是一樣的,因此代碼永遠不會達到else if (msg->wParam == (unsigned char)' ')。你應該刪除它。

使用GetAsyncKeyState查看AltCtrl鍵是否被按下。

BOOL IsKeyDown(int vkCode) 
{ 
    return GetAsyncKeyState(vkCode) & 0x8000; 
} 

... 
if (msg->wParam == ' ') 
{ 
    if (IsKeyDown(VK_CONTROL)) 
     msg->wParam = L'°'; 
    else 
     msg->wParam = L'+'; 
} 
... 
+0

PretranslateMessage + WM_CHAR檢索使用Alt + Unicode代碼方法插入的unicode字符(例如:Alt + 9 + 7,它是'a'),但是改變它沒有效果。 – Mihai

+0

現在你正在嘗試做什麼是有道理的。你想用鍵盤快捷鍵輸入unicode字符。編輯你的問題並在問題中解釋。除去對「更改unicode字符」的引用,因爲這不是一回事。 –

+0

是的,我想檢查使用鍵盤快捷鍵插入的Unicode字符,如果它有一個特定的值,然後我想改變它與另一個值。 – Mihai