< ¸®Ä¡ ¿¡µðÆ® >
WTL¿¡¼´Â °ø¿ë ÄÁÆ®·ÑÀÇ ¸®Ä¡ ¿¡µðÆ® ÄÁÆ®·ÑÀ» CRichEditCtrlT À̶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼ ĸ½¶ÈÇϰí ÀÖ½À´Ï´Ù. ÅÛÇø´ Àμö¿¡´Â Ŭ·¡½º¸¦ ÁöÁ¤ÇÕ´Ï´Ù¸¸ ±× Ŭ·¡½º´Â CRichEditCtrlTŬ·¡½ºÀÇ base class·Î¼ »ç¿ëµË´Ï´Ù. atlctrls.h Çì´õ¿¡¼´Â typedef¿¡ ÀÇÇØ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ°í ÀÖ½À´Ï´Ù.
|
// atlctrls.h typedef CRichEditCtrlT<ATL::CWindow> CRichEditCtrl; |
À̰ÍÀº CRichEditCtrl Ŭ·¡½º´Â CWindow Ŭ·¡½ºÀÇ »ó¼Ó Ŭ·¡½ºÀÎ °ÍÀ» ÀǹÌÇÕ´Ï´Ù.
¡¡WTLÀÇ CRichEditCtrlŬ·¡½º´Â MFCÀÇ µ¿¸íÀÇ Å¬·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ´Â °Í ¿Ü¿¡ ¸®Ä¡ ¿¡µðÆ® ÄÁÆ®·ÑÀÇ ¹öÁ¯2.0°ú 3.0¿ëÀÇ ¸â¹ö ÇÔ¼öµµ °®Ãß°í ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CRichEditCtrlŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ ÀÔ´Ï´Ù. ¸®Ä¡ ¿¡µðÆ® ÄÁÆ®·Ñ»ó¿¡¼ ¿À¸¥ÂÊ Å¬¸¯Çϸé pop-up menu°¡ Ç¥½ÃµÇ¾î [°Á¶ ½ºÅ¸ÀÏ·Î ÇÏ´Â]À» ¼±ÅÃÇÏ¸é ¸®Ä¡ ¿¡µðÆ® ÄÁÆ®·Ñ »óÀÇ ¼±Åà ºÎºÐÀÌ ºÓÀº ±½Àº ±Û¾¾°¡ µË´Ï´Ù.

|
// stdafx.h // ¸®Ä¡ ¿¡µðÆ® ÄÁÆ®·ÑÀÇ ¹öÁ¯1.0À» »ç¿ëÇÏ´Â °ÍÀ» Á¤ÀÇ #define _RICHEDIT_VER
0x0100 #include <atlbase.h> #include <atlapp.h> extern CAppModule _Module; #include <atlwin.h> #include <atlcrack.h> #include <atlmisc.h> #include <atlctrls.h> // ÄÁÆ®·Ñ¿ë Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§ÇØ |
|
// maindlg.h class CMainDlg : public CDialogImpl<CMainDlg> { public: enum { IDD = IDD_MAINDLG }; CRichEditCtrl
m_rich_emphasis; // ¸®Ä¡ ¿¡µðÆ® // ¸Þ¼¼Áö ¸Ê BEGIN_MSG_MAP_EX(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() LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){ // ½ºÅ©¸°ÀÇ Áß¾Ó¿¡ ¹èÄ¡ 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(HWND hWnd, CPoint pt){ // [Shift]+[F10]۰¡ ¹Ð·ÈÀ» °æ¿ì´Â ÁÂÇ¥¸¦ ¼±Åà ij¸¯ÅÍ ¶óÀÎÀÇ ¸¶Áö¸·¿¡
¼³Á¤ if(pt.x == -1 && pt.y
== -1){
LONG start, end;
m_rich_emphasis.GetSel(start, end);
pt = m_rich_emphasis.PosFromChar(end);
m_rich_emphasis.ClientToScreen(&pt); } // ÁÂÇ¥°¡ ¸®Ä¡ ¿¡µðÆ® ÄÁÆ®·Ñ³»ÀÇ °æ¿ì¸¸ pop-up menu¸¦ Ç¥½Ã CRect rc; m_rich_emphasis.GetClientRect(&rc); m_rich_emphasis.ClientToScreen(&rc); if(rc.PtInRect(pt)){
CMenu menuPopup;
menuPopup.LoadMenu(IDR_MENU_POPUP);
menuPopup.GetSubMenu(0).TrackPopupMenu(
TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON, pt.x,
pt.y, m_hWnd); }else{
SetMsgHandled(false); } } void OnMenuDefault(UINT uNotifyCode,
int nID, HWND hWndCtl){ 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, HWND hWndCtl){ 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, HWND hWndCtl){ EndDialog(nID); } void OnCancel(UINT uNotifyCode, int nID, HWND hWndCtl){ EndDialog(nID); } }; |
|
// Control.cpp #include "stdafx.h" #include "resource.h" #include "maindlg.h" CAppModule _Module; int WINAPI _tWinMain(HINSTANCE
hInstance, HINSTANCE, LPTSTR lpCmdLine,
int nCmdShow) { // ¸®Ä¡ ¿¡µðÆ®
ÄÁÆ®·Ñ ÃʱâÈ HINSTANCE hRich = LoadLibrary(CRichEditCtrl::GetLibraryName()); if(hRich == NULL){ AtlMessageBox(NULL, _T("¸®Ä¡
¿¡µðÆ® ÄÁÆ®·Ñ ÃʱâÈ ½ÇÆÐ"),
_T("¿¡·¯"), MB_OK | MB_ICONERROR); return 0; } HRESULT hRes = ::CoInitialize(NULL); ATLASSERT(SUCCEEDED(hRes)); ::DefWindowProc(NULL,
0, 0, 0L); AtlInitCommonControls(ICC_COOL_CLASSES
| ICC_WIN95_CLASSES); hRes
= _Module.Init(NULL, hInstance); ATLASSERT(SUCCEEDED(hRes)); int nRet = 0; // BLOCK: ¾îÇø®ÄÉÀÌ¼Ç ½ÇÇà { CMainDlg dlgMain; nRet = dlgMain.DoModal(); } _Module.Term(); ::CoUninitialize(); FreeLibrary(hRich); return nRet; } |
¡¡¿ì¼± ¸®¼Ò½º¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ´ÙÀ̾ó·Î±×¿¡ ¸®Ä¡ ¿¡µðÆ® ÄÁÆ®·ÑÀ» ¹èÄ¡ÇØ ¸®¼Ò½º ID¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù. µ¡ºÙ¿© ¸®Ä¡ ¿¡µðÆ® ÄÁÆ®·ÑÀÇ [½ºÅ¸ÀÏ]¿¡¼´Â µðÆúÆ®¿¡ [º¹¼öÇà], [¼öÆò ½ºÅ©·Ñ ¹Ù], [¼öÁ÷ ½ºÅ©·Ñ ¹Ù], [¼öÁ÷ ¿ÀÅä ½ºÅ©·Ñ], [°³ÇàÀ» Çã°¡]¿¡ üũ¸¦ ³Ö½À´Ï´Ù.
|
ÄÁÆ®·Ñ¸í |
¸®¼Ò½ºID |
|
¸®Ä¡ ¿¡µðÆ® |
IDC_RICHEDIT_EMPHASIS |
°Ô´Ù°¡ pop-up menu¸¦ À§ÇÑ ¸Þ´º ÀÚ¿øÀ» ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡ÇÕ´Ï´Ù. ¸Þ´º ¸®¼Ò½º ID´Â IDR_MENU_POPUPÀ¸·Î Çϸç Åé ·¹º§¿¡ [index0]¸¦ ±× ¾Æ·¡¿¡ [µðÆúÆ® ½ºÅ¸ÀÏ¿¡ µÇµ¹¸®´Â] ¸Þ´º ¾ÆÀÌÅÛ°ú [°Á¶ ½ºÅ¸ÀÏ·Î ÇÏ´Â] ¸Þ´º ¾ÆÀÌÅÛÀ» Ãß°¡ÇÕ´Ï´Ù. ¾ÆÀÌÅÛ¿¡´Â °¢°¢ ID_MENUITEM_DEFAULTID_MENUITEM_EMPHASIS¶ó°í ÇÏ´Â ID¸¦ ¼³Á¤ÇÕ´Ï´Ù.

¡¡´ÙÀ½¿¡ stdafx.h¿¡¼´Â CRichEditCtrl Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ atlctrls.h Çì´õ¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù. ±×¸®°í À̹ø ¿¹ ¿¡¼´Â ¹öÁ¯1.0ÀÇ ¸®Ä¡ ¿¡µðÆ® ÄÁÆ®·ÑÀ» »ç¿ëÇϹǷΠ_RICHEDIT_VER ¸¦ 0x0100 ¿¡ Á¤ÀÇÇÕ´Ï´Ù. µ¡ºÙ¿© À̰ÍÀº AppWizardÀ» »ç¿ëÇÏ¸é µðÆúÆ®·Î Á¤Àǵǰí ÀÖ½À´Ï´Ù.
¡¡CMainDlgŬ·¡½º¿¡¼´Â ¸®Ä¡ ¿¡µðÆ® ÄÁÆ®·Ñ¿ëÀ¸·Î
CRichEditCtrl Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼ ¼±¾ðÇÕ´Ï´Ù. À̰ÍÀ» »ç¿ëÇϱâ À§Çؼ´Â WM_INITDIALOG¸Þ¼¼Áö Çڵ鷯·Î ÄÁÆ®·ÑÀÇ ÇÚµéÀ» ´ëÀÔÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
¡¡´ÙÀ½¿¡ WM_CONTEXTMENU
¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ¿©±â¿¡¼´Â ÁÂÇ¥°¡ ¸®Ä¡ ¿¡µðÆ® ÄÁÆ®·Ñ ³»ÀÎÁö ¾î¶²Áö¸¦ È®ÀÎÇØ pop-up menu¸¦ Ç¥½ÃÇϰí ÀÖ½À´Ï´Ù.
¡¡´ÙÀ½¿¡ pop-up menuÀÇ ¾ÆÀÌÅÛÀ» ¼±ÅÃÇßÀ» ¶§ÀÇ Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. [µðÆúÆ® ½ºÅ¸ÀÏ¿¡ µÇµ¹¸®´Â] (ID£ºID_MENUITEM_DEFAULT) ÀÇ Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯 OnMenuDefault()¿¡¼´Â GetDefaultCharFormat()¿¡ ÀÇÇØ µðÆúÆ®ÀÇ ¹®ÀÚ Æ÷¸ËÀ» ÃëµæÇØ SetSelectionCharFormat()¿¡ ÀÇÇØ ¼±Åà ºÎºÐ¿¡ ±× Æ÷¸ËÀ» Àû¿ëÇϰí ÀÖ½À´Ï´Ù.
[°Á¶ ½ºÅ¸ÀÏ·Î ÇÏ´Â](ID£ºID_MENUITEM_EMPHASIS) ÀÇ Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯OnMenuEmphasis()¿¡¼´Â , ºÓÀº ±½Àº ±Û¾¾¸¦ Ç¥½ÃÇϱâ À§ÇÑCHARFORMAT±¸Á¶Ã¼¸¦ ÀÛ¼ºÇØ , SetSelectionCharFormat()¿¡ ÀÇÇØ ¼±Åà ºÎºÐ¿¡ ±× Æ÷¸ËÀ» Àû¿ëÇϰí ÀÖ½À´Ï´Ù.
¸¶Áö¸·À¸·Î _tWinMain()¿¡¼ ¸®Ä¡ ¿¡µðÆ® ÄÁÆ®·ÑÀ» ÃʱâÈÇÕ´Ï´Ù. CRichEditCtrl::GetLibraryName()´Â _RICHEDIT_VER ÀÌ 0x0100ÀÇ °æ¿ì´Â_T("RICHED32.DLL")¸¦ ¸®ÅÏÇϸç 0x0200 ÀÌ»óÀÇ °æ¿ì´Â_T("RICHED20.DLL")À» ¸®ÅÏ ÇÕ´Ï´Ù.
¡¡ÀÌ¿Í °°ÀÌ ¸®Ä¡ ¿¡µðÆ® ÄÁÆ®·ÑÀ» »ç¿ëÇÏ´Â °æ¿ì´Â _RICHEDIT_VERÀÇ °ª¿¡ »ç¿ëÇÏ´Â ¿¡µðÆ® ÄÁÆ®·ÑÀÇ ¹öÁ¯À» ÁöÁ¤ÇØ LoadLibrary()¸¦ È£ÃâÇÏ´Â °Í¿¡ ÀÇÇØ Ãʱâȸ¦ ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.