// MainDlg.h
#pragma once
class CMainDlg : public CDialogImpl<CMainDlg>
{
public:
enum { IDD = IDD_MAINDLG };
CRichEditCtrl m_rich_emphasis; // リッチエディット
BEGIN_MSG_MAP(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog)
MSG_WM_CONTEXTMENU(OnContextMenu)
COMMAND_ID_HANDLER_EX(ID_MENUITEM_DEFAULT, OnMenuDefault)
COMMAND_ID_HANDLER_EX(ID_MENUITEM_EMPHASIS, OnMenuEmphasis)
COMMAND_ID_HANDLER_EX(IDOK, OnOK)
COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)
END_MSG_MAP()
BOOL OnInitDialog(CWindow wndFocus, LPARAM lInitParam){
// スクリーンの中央に配置
CenterWindow();
// 大きいアイコン設定
HICON hIcon = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,
::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON));
SetIcon(hIcon, TRUE);
// 小さいアイコン設定
HICON hIconSmall = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,
::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON));
SetIcon(hIconSmall, FALSE);
// コントロール設定
m_rich_emphasis = GetDlgItem(IDC_RICHEDIT_EMPHASIS);
return TRUE;
}
void OnContextMenu(CWindow wnd, CPoint point){
// [Shift]+[F10]キーが押された場合は座標を選択文字列の最後に設定
if(point.x == -1 && point.y == -1){
LONG start, end;
m_rich_emphasis.GetSel(start, end);
point = m_rich_emphasis.PosFromChar(end);
m_rich_emphasis.ClientToScreen(&point);
}
// 座標がリッチエディットコントロール内の場合のみポップアップメニューを表示
CRect rc;
m_rich_emphasis.GetClientRect(&rc);
m_rich_emphasis.ClientToScreen(&rc);
if(rc.PtInRect(point)){
CMenu menuPopup;
menuPopup.LoadMenu(IDR_MENU_POPUP);
menuPopup.GetSubMenu(0).TrackPopupMenu(
TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON,
point.x, point.y, m_hWnd);
}else{
SetMsgHandled(false);
}
}
void OnMenuDefault(UINT uNotifyCode, int nID, CWindow wndCtl){
CString strText;
if(m_rich_emphasis.GetSelText(strText) != 0){
CHARFORMAT cf = {sizeof(CHARFORMAT)};
m_rich_emphasis.GetDefaultCharFormat(cf);
m_rich_emphasis.SetSelectionCharFormat(cf);
}
}
void OnMenuEmphasis(UINT uNotifyCode, int nID, CWindow wndCtl){
CString strText;
if(m_rich_emphasis.GetSelText(strText) != 0){
CHARFORMAT cf = {sizeof(CHARFORMAT)};
cf.dwMask = CFM_COLOR | CFM_BOLD;
cf.dwEffects = CFE_BOLD;
cf.crTextColor = RGB(255, 0, 0);
m_rich_emphasis.SetSelectionCharFormat(cf);
}
}
void OnOK(UINT uNotifyCode, int nID, CWindow wndCtl){
EndDialog(nID);
}
void OnCancel(UINT uNotifyCode, int nID, CWindow wndCtl){
EndDialog(nID);
}
};
|