ダイアログでCRichEditCtrlを使用する場合,InitInstanceなど,ダイアログ表示前にAfxInitRichEdit を呼び出す必要あり(これがないとダイアログが表示されない)
http://msdn.microsoft.com/ja-jp/library/76a787xf(VS.80).aspx
BOOL CXxxxApp::InitInstance()
{
AfxEnableControlContainer();
AfxInitRichEdit() ;
…
}
VC7 以降は AfxInitRichEdit2
http://msdn.microsoft.com/ja-jp/library/tt1cfb9f(v=VS.80).aspx
WinCtrl4.cpp より
BOOL PASCAL AfxInitRichEdit()
{
_AFX_RICHEDIT_STATE* pState = _afxRichEditState;
if (pState->m_hInstRichEdit == NULL)
pState->m_hInstRichEdit = AfxCtxLoadLibraryW(L”RICHED32.DLL“);
return pState->m_hInstRichEdit != NULL;
}
BOOL PASCAL AfxInitRichEdit2()
{
_AFX_RICHEDIT_STATE* pState = _afxRichEditState;
if (pState->m_hInstRichEdit2 == NULL)
pState->m_hInstRichEdit2 = AfxCtxLoadLibraryW(L”RICHED20.DLL“);
return pState->m_hInstRichEdit2 != NULL;
}
RC 内のコントロールのクラス名 RichEdit20A , RichEdit20W
http://support.microsoft.com/kb/261171
VC6 UNICODE exe で,CRichEditCtrl から DDX で文字列を取得すると正しく取れない.
例えば”㎡㎥m” が “㎡?m” になってしまう.
RC のクラス名を “RICHEDIT” から “RichEdit20W” に変更して正しく取れる様になった.
”RichEdit20A” では,変わらず.
選択項目の変更の通知にはEN_SEL_CHANGEなど
これを使用する場合,OnInitDialogなどで,以下の様な呼び出しでの設定が必要.
long em = m_CtrlRichEdit.GetEventMask() ;
m_CtrlRichEdit.SetEventMask(em|ENM_SELCHANGE) ;
http://msdn.microsoft.com/ja-jp/library/bb774366.aspx
以下の様な方法で,FaceNameを使用可能
CHARFORMAT cf ;
::ZeroMemory(&cf,sizeof(CHARFORMAT)) ;
cf.cbSize = sizeof(CHARFORMAT) ;
m_CtrlRichEdit.GetSelectionCharFormat(cf) ;
… = cf.szFaceName ;
保存
http://msdn.microsoft.com/ja-jp/library/b0k0ywek(v=VS.80).aspx