CApiEdit¸¦ ºä¿Í ÇÁ·¹ÀÓÀ¸·Î Èûµé°Ô ºÐÇÒÇÑ ¶Ç ´Ù¸¥ ÀÌÀ¯´Â ´Ù¸¥ Á¾·ùÀÇ º¸±â ¸ðµå¸¦ Áö¿øÇϱâ À§ÇؼÀÌ´Ù. º¸±â ¸ðµå¶õ ¹®¼¸¦ ¾î¶»°Ô º¸¿©ÁÙ °ÍÀΰ¡¸¦ Á¤ÀÇÇÏ´Â ºäÀÇ Ãâ·Â ¹æ½ÄÀÌ´Ù. ´Ù¾çÇÑ º¸±â ¸ðµå¸¦ Áö¿øÇÏ¸é ¹®¼ÀÇ ³»¿ëÀ» °¡Àå È¿À²ÀûÀ¸·Î ÆľÇÇÏ°í ÆíÁýÇÒ ¼ö ÀÖ´Â ¸ðµå¸¦ °ñ¶ó »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â ÀÌÁ¡ÀÌ ÀÖ´Ù.
ÅؽºÆ® ÆíÁý±â°¡ ÅؽºÆ® ÆÄÀÏÀ» º¸¿©ÁÖ´Â ¹æ¹ýÀÌ¾ß ¹®ÀÚ¿À» ȸ鿡 »Ñ¸®´Â °Í ¹Û¿¡ ´õ Àְڴ°¡ ½Í°ÚÁö¸¸ ±×·¸Áö°¡ ¾Ê´Ù. Ãâ·Â ¹æ½Ä¸¸ ¹Ù²ãµµ ¼¼·Î º¸±â, ¿ì¿¡¼ Á·Πº¸±â°¡ °¡´ÉÇϸç ÅؽºÆ®ÀÇ ³í¸®ÀûÀÎ Æ÷¸Ë¿¡ µû¶ó HTML·Î º¸¿©ÁÙ ¼öµµ ÀÖ°í XML Æ®¸® ÇüÅ·Πº¸¿©ÁÙ ¼öµµ ÀÖ´Ù. ¶ÇÇÑ ÆíÁý °¡´É ÆÄÀÏÀ» ÀÌÁø ÆÄÀϷαîÁö È®´ëÇϸé À̹ÌÁö º¸±â, ¸ÖƼ ¹Ìµð¾î º¸±â´Â ¹°·ÐÀÌ°í ActiveX ÀÚµ¿È ±â´ÉÀ» ä¿ëÇÏ¸é ¸ðµç ÆÄÀÏÀ» ¿øÇϴ´ë·Î Ãâ·ÂÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·± ´ÙÁß ºä Áö¿øÀº Â÷ÈÄ ´ç±ÙÀÌ ´Ù¸¥ ÅؽºÆ® ÆíÁý±â¿Í ±¸º°µÇ´Â °¡Àå Áß¿äÇÑ Â÷ÀÌÁ¡ÀÌ µÉ °ÍÀÌ´Ù.
ÇöÀç ApiEdit´Â ¿À·ÎÁö ÅؽºÆ® ºä ÇÑ Á¾·ù¸¸ Áö¿øÇϴµ¥ ¿©±â¼´Â ºä ŸÀÔ ÀüȯÀÌ °¡´ÉÇÑÁö¸¦ Á¡°ËÇØ º¸±â À§ÇØ ÇÑ°¡Áö ŸÀÔ¸¸ ´õ Ãß°¡ÇØ º¸±â·Î ÇÏÀÚ. ¸¹Àº ºä ŸÀÔ Áß¿¡ ÅؽºÆ® ºä ´ÙÀ½À¸·Î °¡Àå ½Ç¿ëÀûÀÎ ºä´Â 16Áø¼ö ÇüÅ·ΠÆÄÀÏÀÇ ³»¿ëÀ» ±×´ë·Î ´ýÇÁÇÏ´Â Çí»ç ºä¶ó°í ÇÒ ¼ö Àִµ¥ ¾ÆÁÖ °£´ÜÇÑ Çí»ç ºä¸¦ ¸¸µé¾î º¼ °ÍÀÌ´Ù. ½Ç½ÀÀ» ½ÃÀÛÇϱâ Àü¿¡ Dangeun16 ÇÁ·ÎÁ§Æ®¸¦ º¹»çÇÏ¿© Dangeun17 ÇÁ·ÎÁ§Æ®¸¦ ¸¸µç´Ù.
ApiEditHexa.h, cpp ¸ðµâÀº ½Ç½ÀÀ» ½ÃÀÛÇÒ ¶§ ÀÌ¹Ì ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡ÇØ ³õ¾Ò´Ù. CApiEdit Ŭ·¡½º´Â CApiEditHexa¸¦ ÇÁ·£µå·Î ÁöÁ¤ÇÏ¿© Çí»ç ºäµµ ÇÁ·¹ÀÓÀÇ ¸ðµç ¸â¹ö¸¦ ÀÚÀ¯·Ó°Ô ¾×¼¼½ºÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. CApiEdit°¡ Á÷Á¢ Çí»ç ºäÀÇ Å¸ÀÔÀ» ÂüÁ¶ÇÏÁö´Â ¾ÊÀ¸¹Ç·Î CApiEditHexa Ŭ·¡½º¸¦ Àü¹æ ¼±¾ðÇÒ ÇÊ¿ä´Â ¾ø´Ù. ÇÁ·¹ÀÓÀº ÅؽºÆ® ºä¿¡ ´ëÇÑ ¹è¿°ú °ü¸® ÇÔ¼ö¸¸À» °¡Áú »ÓÀÌÁö ±× ÆÄ»ý Ŭ·¡½º±îÁö´Â ±»ÀÌ ¾Ë¾Æ¾ß ÇÒ ÇÊ¿ä°¡ ¾ø´Â °ÍÀÌ´Ù.
class CApiEdit : public CWindow
{
friend class CApiEditText;
friend class CApiEditHexa;
Çì´õ ÆÄÀÏ¿¡ CApiEditHexa Ŭ·¡½º¸¦ ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÑ´Ù. Ŭ·¡½ºÀÇ ¸ð¾çÀº ApiEditText¿Í °ÅÀÇ À¯»çÇÏÁö¸¸ ¸â¹ö ¼ö°¡ ¾ÆÁ÷ ¸¹Áö ¾Ê´Ù.
#ifndef __APIEDITHEXA_H
#define __APIEDITHEXA_H
class CApiEditHexa : public CApiEditText
{
friend class CApiEdit;
friend class CParse;
friend class CParseCpp;
friend class CParseNull;
friend class CParseHtml;
friend class CParseSql;
public:
CApiEditHexa();
BOOL Create(int x,int y,int w,int h,DWORD style,UINT id,HWND hParent);
LRESULT OnMessage(UINT iMessage,WPARAM wParam,LPARAM lParam);
BOOL OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct);
void OnChar(HWND hWnd, TCHAR ch, int cRepeat);
void OnKey(HWND hWnd, UINT vk, BOOL fDown, int cRepeat, UINT flags);
void OnPaint(HWND hWnd);
void OnSetFocus(HWND hWnd, HWND hwndOldFocus);
void OnKillFocus(HWND hWnd, HWND hwndNewFocus);
void OnDestroy(HWND hWnd);
void OnLButtonDown(HWND hWnd, BOOL fDoubleClick, int x, int y, UINT keyFlags);
void OnMouseMove(HWND hWnd, int x, int y, UINT keyFlags);
void OnLButtonUp(HWND hWnd, int x, int y, UINT keyFlags);
void OnTimer(HWND hWnd, UINT id);
void OnSize(HWND hWnd, UINT state, int cx, int cy);
void OnHScroll(HWND hWnd, HWND hwndCtl, UINT code, int pos);
void OnVScroll(HWND hWnd, HWND hwndCtl, UINT code, int pos);
void OnContextMenu(HWND hWnd, HWND hwndContext, UINT xPos, UINT yPos);
virtual void OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify);
BOOL OnSetCursor(HWND hWnd, HWND hwndCursor, UINT codeHitTest, UINT msg);
void OnMouseWheel(HWND hWnd, WPARAM wParam, LPARAM lParam);
virtual void SetCaret(BOOL bUpdatePrevX=TRUE, BOOL bScrollToCaret=TRUE);
virtual void Insert(int nPos, TCHAR *str, int len, BOOL bRec=TRUE);
virtual void Delete(int nPos, int nCount, BOOL bRec=TRUE);
virtual int GetRowCount();
virtual void GetRCFromOff(int nPos, int &r, int &c);
virtual int GetOffFromRC(int r, int c);
virtual void GetXYFromOff(int nPos, int &x, int &y);
virtual int GetOffFromXY(int x, int y);
virtual void SetWrap(int aWrap) { nWrap=aWrap; }
virtual void UpdateScrollInfo();
virtual int DrawLine(HDC hdc, int Line);
virtual BOOL IsInSelection(int x,int y) { return FALSE; }
virtual void SetFont(LOGFONT *alogfont);
virtual int GetInfoFromOff(int Type, int nPos=-1);
virtual int GetDocInfo(int type);
virtual void BeginPrint(Ae_PrintInfo *pi);
virtual BOOL PrintPage(Ae_PrintInfo *pi,int nPage);
virtual void EndPrint(Ae_PrintInfo *pi);
virtual void InitView();
};
#endif // __APIEDITHEXA_H
ÀÌ Å¬·¡½ºÀÇ ¼±¾ð¿¡¼ °¡Àå ÁÖ¸ñÇÒ Á¡Àº ±âº» ºäÀÎ CApiEditTextŬ·¡½º·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ¾Ò´Ù´Â Á¡ÀÌ´Ù. µû¶ó¼ Çí»ç ºä´Â ÅؽºÆ® ºäÀÇ ¸ðµç ¸â¹ö º¯¼ö¸¦ »ó¼Ó¹ÞÀ¸¸ç ÅؽºÆ® ºäÀÇ ¸â¹öµéÀº protected ¾×¼¼½º ¼Ó¼ºÀ» °¡Áö¹Ç·Î Çí»ç ºä¿¡¼ Á¦ÇѾøÀÌ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. »ó¼Ó¹ÞÀº ¸â¹ö Áß ÀϺδ Çí»ç ºä¿¡´Â »ç¿ëµÇÁö ¾Ê´Â °Íµéµµ Àִµ¥ ÀÌ·± ¸â¹ö´Â ¹«½ÃÇÏ¸é µÈ´Ù. ¾ÆÁ÷ Ãß°¡µÈ ¸â¹ö´Â ¾øÁö¸¸ 16Áø ´ýÇÁ¸¦ À§ÇØ Àá½Ã ÈÄ¸é ¸â¹öµéÀÌ Ãß°¡µÉ °ÍÀÌ´Ù.
¸Þ½ÃÁö ó¸® ÇÔ¼öµéÀº ´ëºÎºÐ ÀçÁ¤ÀÇÇÏ¿´À¸³ª ÇѱÛÀ» ÀԷ¹ÞÀ» ÀÏÀº ¾øÀ¸¹Ç·Î IME °ü·Ã ¸Þ½ÃÁö´Â ó¸®ÇÏÁö ¾Ê´Â´Ù. ÀÏ¹Ý ¸â¹ö ÇÔ¼ö´Â ²À ÇÊ¿äÇÑ °Í¸¸ ÀçÁ¤ÀÇÇÏ¿´°í ³ª¸ÓÁö´Â ±âº» ºäÀÇ ¸â¹ö¿¡°Ô 󸮸¦ ³Ñ±æ °ÍÀÌ´Ù. 16Áø ÆíÁýÀ» À§Çؼ ´õ ÇÊ¿äÇÑ ¸â¹ö ÇÔ¼öµµ ¹°·Ð ¸¹ÀÌ Àִµ¥ ¾ÕÀ¸·Î Ãß°¡ÇÏ°Ô µÉ °ÍÀÌ´Ù. IsInSelection ÇÔ¼ö´Â ¹«Á¶°Ç FALSE¸¦ ¸®ÅÏÇÑ´Ù. Çí»ç ºä´Â ¸¶¿ì½º·Î µå·¡±×Çؼ º¹»ç ¹× À̵¿ÇÏ´Â µ¿ÀÛÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.
´ÙÀ½Àº Çí»ç ºä Ŭ·¡½ºÀÇ ±¸Çö Äڵ带 ÀÛ¼ºÇÒ Â÷·ÊÀε¥ ±× Àü¿¡ ±âº» ºäÀÇ Äڵ带 Á¶±Ý ¼öÁ¤ÇÏ¿© ÆÄ»ý Ŭ·¡½º°¡ ±â¹Ý Ŭ·¡½ºÀÇ Äڵ带 ÃÖ´ëÇÑ ÀçÈ°¿ëÇÒ ¼ö ÀÖ°Ô ÇØ º¸ÀÚ. ±âº» ºä°¡ ¸¹Àº ÀÏÀ» Çϸé ÆÄ»ý Ŭ·¡½º°¡ °£´ÜÇØÁø´Ù. Ŭ·¡½º °èÃþÀ» ¸¸µé¾î ³ª°¡´Ù º¸¸é ÇÏÀ§ Ŭ·¡½ºÀÇ ÇÊ¿ä¿¡ ÀÇÇØ »óÀ§ Ŭ·¡½º¸¦ ¼öÁ¤ÇÏ´Â ÀÏÀº ºó¹øÇÏ°Ô ¹ß»ýÇÏ¸ç ¾ÕÀ¸·Îµµ ¸¹ÀÌ ¹ß»ýÇÒ °ÍÀÌ´Ù. ¿©±â¼´Â ÀÏ´Ü ºä ŸÀÔ ÀüȯÀ» À§ÇØ ±ÞÇÑ ÄÚµå ¼¼ ±ºµ¥¸¸ ¼öÁ¤ÇÒ °ÍÀÌ´Ù. ÅؽºÆ® ºäÀÇ OnDestroy ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
void CApiEditText::OnDestroy(HWND hWnd)
{
if (arHanWidth) free(arHanWidth);
if (pLine) free(pLine);
if (hBit) {
...
Çí»ç ºä´Â ÇÑ ÁÙ´ç ´ýÇÁÇÒ ¹ÙÀÌÆ® ¼ö°¡ °íÁ¤ÀûÀ̱⠶§¹®¿¡ Á¤·Ä Á¤º¸¸¦ ÀÛ¼ºÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ±×·¡¼ pLine ¹è¿Àº ÃʱâÈÇÒ ¶§ºÎÅÍ ÇÒ´çÇÏÁöµµ ¾Ê°í »ç¿ëÇÏÁöµµ ¾Ê´Â´Ù. ±×·¡¼ Æı«ÇÒ ¶§µµ pLine ¹è¿À» ÇØÁ¦ÇÒ ÇÊ¿ä°¡ ¾øÀ¸¸ç OnDestroy¿¡¼ pLineÀÌ NULLÀ̸é ÇØÁ¦ÇÏÁö ¾Ê´Â´Ù. ´ÙÀ½Àº OnPaint¸¦ ¼öÁ¤ÇÑ´Ù.
void CApiEditText::OnPaint(HWND hWnd)
{
....
t=yPos/LineHeight;
s=(yPos+ps.rcPaint.top)/LineHeight;
e=(yPos+ps.rcPaint.bottom-1)/LineHeight;
if (ViewType == TEXT_VIEW) {
e=min(e,TotalLine-1);
Parser->ParseLines(*this,e);
} else {
e=min(e,GetRowCount()-1);
}
hMemDC=CreateCompatibleDC(hdc);
....
Á¤·ÄÀ» ÇÏÁö ¾ÊÀ¸¹Ç·Î TotalLine º¯¼ö°¡ ÀǹÌÀÖ´Â °ªÀ» °¡ÁöÁö ¾ÊÀ¸¸ç ´ë½Å GetRowCount ÇÔ¼ö·Î ÁÙ ¼ö¸¦ ½Ç½Ã°£À¸·Î ±¸ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ Çí»ç ºä´Â ¹®ÀÚ¿À» Ãâ·ÂÇÏ´Â °ÍÀÌ ¾Æ´Ï¹Ç·Î ±¸¹® ºÐ¼® ±â´Éµµ »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÇöÀç ºäÀÇ Å¸ÀÔ¿¡ µû¶ó ¾à°£¾¿ ´Ù¸£°Ô µ¿ÀÛÇϵµ·Ï OnPaint¸¦ ¼öÁ¤Çߴµ¥ ÀÌ·¸°Ô µÇ¸é Çí»ç ºä¿¡¼µµ ÀÌ ÇÔ¼ö¸¦ ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. OnSize ÇÔ¼öµµ Á¶±Ý º¯°æÇÑ´Ù.
void CApiEditText::OnSize(HWND hWnd, UINT state, int cx, int cy)
{
if (state != SIZE_MINIMIZED) {
....
if (nWrap && ViewType == TEXT_VIEW) {
nPara=pLine[yPos/LineHeight].nPara;
nLine=pLine[yPos/LineHeight].nLine;
toff=GetOffFromPara(nPara,0);
UpdateLineInfo();
}
UpdateScrollInfo();
if (nWrap && ViewType == TEXT_VIEW) {
GetRCFromOff(toff,r,c);
....
ÀÚµ¿ °³Çà »óÅÂÀÏ ¶§ ȸé ùÁÙÀ» °¡±ÞÀû À¯ÁöÇϴµ¥ ÀÚµ¿ °³ÇàÀ̶ó´Â °³³äÀÌ ¾ø´Â Çí»ç ºä¿¡¼´Â Àǹ̰¡ ¾ø´Ù. Çí»ç ºä´Â pLine ¹è¿ ÀÚü°¡ ¾ø¾î ÀÌ Äڵ带 ±×´ë·Î ½ÇÇàÇÏ¸é ¾ÈµÈ´Ù.
´ÙÀ½Àº Çí»ç ºäÀÇ ±¸Çö ÆÄÀÏÀÇ Àüü ¸®½ºÆ®ÀÌ´Ù. ÅؽºÆ® ºä¿Í ÀϺΠºñ½ÁÇÑ Äڵ嵵 ÀÖÁö¸¸ ¿ÏÀüÈ÷ ´Ù¸¥ Äڵ尡 ´õ ¸¹´Ù.
//#define _WIN32_WINNT 0x400
//#define _WIN32_WINDOWS 0x401
//#include <windows.h>
//#include <windowsx.h>
//#include <imm.h>
//#include <stdio.h>
//#include <io.h>
//#include <malloc.h>
//#include <commctrl.h>
//#include <Shlwapi.h>
//#include <Shlobj.h>
//#include <wininet.h>
//#include <stdio.h>
//#include "Parse.h"
//#include "AeUtil.h"
//#include "ApiEdit.h"
//#include "ApiEditText.h"
//#include "ApiEditHexa.h"
#include "stdafx.h"
CApiEditHexa::CApiEditHexa()
{
ViewType=HEXA_VIEW;
}
BOOL CApiEditHexa::Create(int x,int y,int w,int h,DWORD style,UINT id,HWND hParent)
{
CreateWindow("ApiEditText",NULL, style | WS_CLIPCHILDREN,
x,y,w,h,hParent,(HMENU)id,GetModuleHandle(NULL),this);
return TRUE;
}
LRESULT CApiEditHexa::OnMessage(UINT iMessage,WPARAM wParam,LPARAM lParam)
{
switch(iMessage) {
HANDLE_MSG(hWnd, WM_CREATE, OnCreate);
HANDLE_MSG(hWnd, WM_DESTROY, OnDestroy);
HANDLE_MSG(hWnd, WM_CHAR, OnChar);
HANDLE_MSG(hWnd, WM_KEYDOWN, OnKey);
HANDLE_MSG(hWnd, WM_KEYUP, OnKey);
HANDLE_MSG(hWnd, WM_PAINT, OnPaint);
HANDLE_MSG(hWnd, WM_SETFOCUS, OnSetFocus);
HANDLE_MSG(hWnd, WM_KILLFOCUS, OnKillFocus);
HANDLE_MSG(hWnd, WM_LBUTTONDOWN, OnLButtonDown);
HANDLE_MSG(hWnd, WM_LBUTTONDBLCLK, OnLButtonDown);
HANDLE_MSG(hWnd, WM_MOUSEMOVE, OnMouseMove);
HANDLE_MSG(hWnd, WM_LBUTTONUP, OnLButtonUp);
HANDLE_MSG(hWnd, WM_TIMER, OnTimer);
HANDLE_MSG(hWnd, WM_SIZE, OnSize);
HANDLE_MSG(hWnd, WM_HSCROLL, OnHScroll);
HANDLE_MSG(hWnd, WM_VSCROLL, OnVScroll);
HANDLE_MSG(hWnd, WM_CONTEXTMENU, OnContextMenu);
HANDLE_MSG(hWnd, WM_COMMAND, OnCommand);
HANDLE_MSG(hWnd, WM_SETCURSOR, OnSetCursor);
HANDLE_MSG(hWnd, WM_GETDLGCODE, OnGetDlgCode);
case WM_MOUSEWHEEL:
OnMouseWheel(hWnd,wParam,lParam);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
///////////////////////////////////////////////////////////////////////////////////
// ¸Þ½ÃÁö Çڵ鷯
BOOL CApiEditHexa::OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
{
xMax=0;
return CApiEditText::OnCreate(hWnd,lpCreateStruct);
}
void CApiEditHexa::OnDestroy(HWND hWnd)
{
CApiEditText::OnDestroy(hWnd);
}
void CApiEditHexa::OnSize(HWND hWnd, UINT state, int cx, int cy)
{
CApiEditText::OnSize(hWnd,state,cx,cy);
}
void CApiEditHexa::OnKey(HWND hWnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)
{
}
void CApiEditHexa::OnPaint(HWND hWnd)
{
CApiEditText::OnPaint(hWnd);
}
void CApiEditHexa::OnSetFocus(HWND hWnd, HWND hwndOldFocus)
{
CApiEditText::OnSetFocus(hWnd,hwndOldFocus);
}
void CApiEditHexa::OnKillFocus(HWND hWnd, HWND hwndNewFocus)
{
CApiEditText::OnKillFocus(hWnd,hwndNewFocus);
}
void CApiEditHexa::OnChar(HWND hWnd, TCHAR ch, int cRepeat)
{
}
void CApiEditHexa::OnHScroll(HWND hWnd, HWND hwndCtl, UINT code, int pos)
{
CApiEditText::OnHScroll(hWnd,hwndCtl,code,pos);
}
void CApiEditHexa::OnVScroll(HWND hWnd, HWND hwndCtl, UINT code, int pos)
{
CApiEditText::OnVScroll(hWnd,hwndCtl,code,pos);
}
void CApiEditHexa::OnContextMenu(HWND hWnd, HWND hwndContext, UINT xPos, UINT yPos)
{
CApiEditText::OnContextMenu(hWnd,hwndContext,xPos,yPos);
}
void CApiEditHexa::OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify)
{
CApiEditText::OnCommand(hWnd,id,hwndCtl,codeNotify);
}
void CApiEditHexa::OnLButtonDown(HWND hWnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
{
RECT crt;
POINT pt;
GetClientRect(hWnd,&crt);
GetCursorPos(&pt);
ScreenToClient(hWnd,&pt);
if (pt.x != x || pt.y != y) {
return;
}
if (StartSplit(hWnd,fDoubleClick,x,y)) {
return;
}
if (y > crt.bottom-SBW || x > crt.right-SBW) {
return;
}
bFindSelect=FALSE;
SetFocus(hWnd);
}
void CApiEditHexa::OnMouseMove(HWND hWnd, int x, int y, UINT keyFlags)
{
if (Spliting(hWnd,x,y)) {
return;
}
}
void CApiEditHexa::OnLButtonUp(HWND hWnd, int x, int y, UINT keyFlags)
{
if (EndSplit(hWnd,x,y)) {
return;
}
}
void CApiEditHexa::OnTimer(HWND hWnd, UINT id)
{
CApiEditText::OnTimer(hWnd,id);
}
BOOL CApiEditHexa::OnSetCursor(HWND hWnd, HWND hwndCursor, UINT codeHitTest, UINT msg)
{
return CApiEditText::OnSetCursor(hWnd,hwndCursor,codeHitTest,msg);
}
void CApiEditHexa::OnMouseWheel(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
CApiEditText::OnMouseWheel(hWnd,wParam,lParam);
}
///////////////////////////////////////////////////////////////////////////////////
// ÀÏ¹Ý ÇÔ¼öµé
void CApiEditHexa::SetCaret(BOOL bUpdatePrevX/*=TRUE*/, BOOL bScrollToCaret/*=TRUE*/)
{
}
void CApiEditHexa::Insert(int nPos, TCHAR *str, int len, BOOL bRec/*=TRUE*/)
{
}
void CApiEditHexa::Delete(int nPos, int nCount, BOOL bRec/*=TRUE*/)
{
}
int CApiEditHexa::GetRowCount()
{
return 1;
}
void CApiEditHexa::GetRCFromOff(int nPos,int &r,int &c)
{
}
int CApiEditHexa::GetOffFromRC(int r,int c)
{
return 0;
}
void CApiEditHexa::GetXYFromOff(int nPos,int &x,int &y)
{
}
int CApiEditHexa::GetOffFromXY(int x,int y)
{
return 0;
}
void CApiEditHexa::UpdateScrollInfo()
{
SCROLLINFO si;
yMax=(GetRowCount()+frt.bottom/LineHeight/2)*LineHeight;
si.cbSize=sizeof(SCROLLINFO);
si.fMask=SIF_ALL | SIF_DISABLENOSCROLL;
si.nMin=0;
si.nMax=yMax;
si.nPage=(frt.bottom/LineHeight)*LineHeight;
si.nPos=yPos;
SetScrollInfo(hVertScroll, SB_CTL, &si, TRUE);
si.nMax=xMax;
si.nPage=frt.right;
si.nPos=xPos;
SetScrollInfo(hHorzScroll, SB_CTL, &si, TRUE);
}
int CApiEditHexa::DrawLine(HDC hdc, int Line)
{
TextOut(hdc,100,0,"Hexa",4);
return 1;
}
void CApiEditHexa::SetFont(LOGFONT *alogfont)
{
CApiEditText::SetFont(alogfont);
if (xMax!=0) {
UpdateScrollInfo();
SetCaret();
Invalidate(-1);
}
}
int CApiEditHexa::GetInfoFromOff(int Type, int nPos/*=-1*/)
{
return 0;
}
int CApiEditHexa::GetDocInfo(int type)
{
return 0;
}
void CApiEditHexa::BeginPrint(Ae_PrintInfo *pi)
{
}
BOOL CApiEditHexa::PrintPage(Ae_PrintInfo *pi,int nPage)
{
return TRUE;
}
void CApiEditHexa::EndPrint(Ae_PrintInfo *pi)
{
}
void CApiEditHexa::InitView()
{
bOvr=TRUE;
off=0;
bComp=FALSE;
xMax=2048;
xPos=0;
yPos=0;
SelStart=SelEnd=0;
ClearBookmark();
UpdateScrollInfo();
if (GetFocus()==hWnd) {
SetCaret();
}
bVertSplit=TRUE;
bHorzSplit=TRUE;
iDrag=0;
OldSplit=0;
Invalidate(-1);
}
»ý¼ºÀÚ¿¡¼ ºäÀÇ Å¸ÀÔÀ» HEXA_VIEW·Î ÃʱâÈÇÏ¿© ÀÚ½ÅÀÌ Çí»ç ºäÀÓÀ» ¸íÈ®ÇÏ°Ô ±â¾ïÇÑ´Ù. OnCreate, OnDestroy ¸Þ½ÃÁö ó¸® ÇÔ¼ö´Â ÅؽºÆ® ºä¿Í ±â´ÉÀÌ µ¿ÀÏÇϱ⠶§¹®¿¡ ÅؽºÆ® ºäÀÇ ÇÔ¼ö¸¦ ´ë½Å È£ÃâÇϸç OnSize³ª OnPaint µîµµ ±âº» ºäÀÇ Äڵ带 ¼öÁ¤ÇßÀ¸¹Ç·Î ±âº» ºäÀÇ Çڵ鷯¸¦ ´ë½Å È£ÃâÇÑ´Ù. OnKey¿Í ¸¶¿ì½º ¸Þ½ÃÁö Çڵ鷯´Â ¾à°£ ´Ù¸¥ Äڵ尡 Àֱ⠶§¹®¿¡ ÀçÁ¤ÀÇÇÏ¿´´Ù. ¸¶¿ì½º ¸Þ½ÃÁö Çڵ鷯´Â ½ºÇø´ ¹Ù¸¦ µå·¡±×ÇÏ´Â ±â´É¸¸ Á¤ÀǵǾî ÀÖ´Ù. OnChar ÇÔ¼ö´Â ¾Æ¿¹ ¾Æ¹« µ¿ÀÛµµ ÇÏÁö ¾ÊÀ¸¹Ç·Î ºñ¾î ÀÖ´Ù.
ÀÏ¹Ý ¸â¹ö ÇÔ¼öµéµµ ´ëºÎºÐ ³»¿ëÀÌ ºñ¾î ÀÖÀ¸¸ç Á¦´ë·Î Äڵ尡 ÀÛ¼ºµÇ¾î ÀÖ´Â ÇÔ¼ö´Â InitView, SetFont Á¤µµ°¡ °íÀÛÀÌ´Ù. ÇöÀç ºñ¾îÀÖ´Â ÇÔ¼öµéÀº ¾Æ¹« Äڵ嵵 °¡ÁöÁö ¾ÊÁö¸¸ 16Áø ÆíÁý ±â´ÉÀ» ÀÛ¼ºÇÒ ¶§´Â ¸ðµÎ Äڵ带 °¡Áö°Ô µÉ °ÍÀÌ´Ù. DrawLine ÇÔ¼ö¿¡¼´Â (100,0)¿¡ "HEXA"¶ó´Â ¹®ÀÚ¿À» Ãâ·ÂÇÏ¿© ÀÚ½ÅÀÌ Çí»ç ºäÀÓÀ» Ç¥½ÃÇϱ⸸ ÇÑ´Ù. GetRowCount´Â ¹«Á¶°Ç 1À» ¸®ÅÏÇÏ¿© 1ÁÙÂ¥¸® ¹®¼ÀÎ °Í ó·³ ¸¸µç´Ù.
Çí»ç ºä´Â ÀÚµ¿ °³Çà ¿É¼ÇÀ» ¾²Áö ¾Ê´Â´Ù. ÇÏÁö¸¸ SetWrap ÇÔ¼ö´Â ÀÏ´Ü Àü´ÞµÈ ¿É¼Ç°ªÀ» ¸â¹ö º¯¼ö¿¡ ÀúÀåÇØ µÎ´Âµ¥ ÀÌ´Â ºäÀÇ Å¸ÀÔ ±³Ã¼½Ã¿¡ ¿ø·¡°ªÀ» À¯ÁöÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ÀÚµ¿ °³Çà¿¡ µû¶ó ºÎ¼öÀûÀΠ󸮴 ÇÒ ÇÊ¿ä¾øÀÌ °ª¸¸ ±â¾ïÇÏ¸é µÈ´Ù.
SetFont ÇÔ¼öÀÇ °æ¿ì ÆùÆ® º¯°æ¿¡ µû¸¥ ÀÛ¾÷ ¸ñ·ÏÀÌ ºñ½ÁÇϱ⠶§¹®¿¡ ±âº»ºäÀÇ SetFont¸¦ È£ÃâÇÑ´Ù. ´Ü, Çí»ç ºä´Â pLineÀÌ Ç×»ó NULLÀ̱⠶§¹®¿¡ ½ºÅ©·Ñ Á¤º¸ °»½Å, ´Ù½Ã ±×¸®±â´Â Á÷Á¢ ÇØ¾ß ÇÑ´Ù. ÃʱâÈ ¿Ï·á ¿©ºÎ¸¦ Á¶»çÇϱâ À§ÇØ xMax°ªÀ» »ç¿ëÇϴµ¥ OnCreate¿¡¼ 0À¸·Î ÃʱâÈÇÏ°í InitView¿¡¼ 2048·Î ´Ù½Ã ÃʱâÈÇÏ¿© ÃʱâÈ ¿Ï·á¸¦ Ç¥½ÃÇÑ´Ù. ÅؽºÆ® ºä´Â pLineÀ» ´ë½Å »ç¿ëÇß¾ú´Ù.
ÇÁ·¹ÀÓÀÌ »õ·Î Ãß°¡µÈ ºä ŸÀÔÀÎ Çí»ç ºä¸¦ ÀνÄÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. °´Ã¼¸¦ ºÐÇÒÇÒ ¶§ºÎÅÍ Áغñ¸¦ Ç߱⠶§¹®¿¡ ¸¹Àº ºÎºÐÀ» °íÄ¥ ÇÊ¿ä´Â ¾ø´Ù. ¿ì¼± CreateView ÇÔ¼ö¿¡¼ Çí»ç ºä °´Ã¼¸¦ »ý¼ºÇÑ´Ù.
CApiEditText *CApiEdit::CreateView(int Type)
{
CApiEditText *pView;
switch (Type) {
case TEXT_VIEW:
pView=new CApiEditText;
break;
case HEXA_VIEW:
pView=new CApiEditHexa;
break;
}
pView->pFrame=this;
pView->Create(0,0,0,0,WS_CHILD | WS_VISIBLE,0,hWnd);
return pView;
}
Àμö·Î Àü´ÞµÈ TypeÀÌ HEXA_VIEWÀ̸é CApiEditHexa Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸¸µé¾î ±× Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. ÇÁ·¹ÀÓÀÌ °ü¸®ÇÏ´Â ºäÀÇ ¹è¿ÀÎ arView´Â CApiEditText *ÇüÀÇ ¹è¿ÀÌ°í Çí»ç ºä´Â ÀÌ Å¬·¡½º·ÎºÎÅÍ ÆÄ»ýµÇ¾úÀ¸¹Ç·Î ÇÁ·¹ÀÓÀÇ ºä°¡ µÉ ÀÚ°ÝÀÌ ÀÖ´Ù. ÇÁ·¹ÀÓ¿¡ ºäÀÇ Å¸ÀÔÀ» º¯°æÇÒ ¼ö ÀÖ´Â ¸â¹ö ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.
void CApiEdit::ChangeViewType(int nView,int Type)
{
CApiEditText *pView;
int OldActive;
// È°¼º ºä¸¦ ÀüȯÇÑ´Ù.
if (nView==-1) {
nView=ActiveView;
}
// °°Àº ŸÀÔÀÌ¸é º¯È¯ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.
if (arView[nView]->ViewType == Type) {
return;
}
// »õ·Î¿î ºä¸¦ ¸¸µç ÈÄ ¼Ó¼ºÀ» º¹Á¦ÇÑ´Ù.
pView=CreateView(Type);
CloneView(pView,arView[nView],3);
OldActive=ActiveView;
DeleteView(nView);
// »õ·Î ¸¸µç ºä·Î ´ëüÇÏ°í È°¼ºÈÇÑ´Ù.
arView[nView]=pView;
ActiveView=OldActive;
SetFocus(pView->hWnd);
SendMessage(hWnd,WM_SIZE,0,0);
AdjustSplitable();
}
Àμö·Î Àü´ÞµÈ nView¸¦ TypeÇüÀÇ ºä·Î ÀüȯÇϴµ¥ nView°¡ -1À̸é È°¼º ºä°¡ Àüȯ ´ë»óÀÌ´Ù. ´ë»ó ºäÀÇ Å¸ÀÔÀÌ ÀÌ¹Ì TypeÀÌ¸é ´õ ÀÌ»ó ÀüȯÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ºäÀÇ Å¸ÀÔÀ» ±³Ã¼ÇÏ´Â °ÍÀº »ý°¢º¸´Ù ÈξÀ ´õ °£´ÜÇÏ´Ù. ±âÁ¸ÀÇ ºä¸¦ Æı«ÇÏ°í »õ·Î¿î ºä¸¦ ¿øÇϴ ŸÀÔ´ë·Î ¸¸µé¾î ¹Ù²ã Ä¡±â¸¸ ÇÏ¸é µÈ´Ù. ´Ù¸¸ »õ·Î ¸¸µé¾îÁö´Â ºä°¡ ±âÁ¸ ºäÀÇ ¼Ó¼ºÀ» º¹Á¦ÇØ¾ß ÇϹǷΠº¹Á¦°¡ ¿Ï·áµÉ ¶§±îÁö ±âÁ¸ ºä¸¦ °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù´Â °Í¸¸ ÁÖÀÇÇÏ¸é µÈ´Ù. CloneView ÇÔ¼ö´Â ÁÖ·Î ¼öÆò, ¼öÁ÷ ºÐÇÒ ¶§ ÇüÁ¦ ºä¸¦ ¸¸µé±â À§ÇØ È£ÃâÇÏ¸ç ¼¼ ¹ø° Àμö´Â ºÐÇÒ Å¸ÀÔÀ» ÁöÁ¤ÇÑ´Ù. ºäÀÇ Å¸ÀÔÀ» º¯°æÇÒ ¶§´Â ºÐÇÒÇÏ´Â °Í°ú´Â ´Ù¸£¹Ç·Î ÀÌ Àμö·Î ¼öÆòµµ, ¼öÁ÷µµ ¾Æ´Ñ 3ÀÇ °ªÀ» Àü´ÞÇßÀ¸¸ç ÀÌ °æ¿ì ºÏ¸¶Å©´Â º¹Á¦ÇÏÁö ¾Ê´Â´Ù.
DeleteView ÇÔ¼ö´Â È°¼º ºä°¡ »èÁ¦µÉ ¶§ Àá½Ã È°¼º ºä¸¦ -1·Î ¸¸µç´Ù. È°¼ººäÀÇ Å¸ÀÔÀ» ±³Ã¼ÇÒ ¶§´Â ÀϽÃÀûÀ¸·Î È°¼º ºä°¡ ¾ø´Â »óÅ°¡ µÉ ¼ö ÀÖÀ¸¹Ç·Î È°¼º ºäÀÇ ¹øÈ£¸¦ ¹Ì¸® Á¶»çÇØ ³õ°í »èÁ¦ ÈÄ ´Ù½Ã È°¼º ºä¸¦ Á¦´ë·Î ´ëÀÔÇØ¾ß ÇÑ´Ù. ºäÀÇ Å¸ÀÔÀ» ±³Ã¼ÇÑ ÈÄ »õ·Î ¸¸µé¾îÁø ºä¿¡°Ô Æ÷Ä¿½º¸¦ ÁÖ°í WM_SIZE ¸Þ½ÃÁö¸¦ º¸³» »õ·Î »ý¼ºµÈ ºä¸¦ ÇÁ·¹ÀÓÀÇ ÀÛ¾÷ ¿µ¿ª¿¡ ¹èÄ¡ÇÑ´Ù. »õ·Î »ý¼ºµÈ ºä´Â ±âÁ¸ ºä¿Í °°Àº ÷ÀÚ¸¦ »ç¿ëÇϹǷΠ±âÁ¸ ºäÀÇ ÀÚ¸®¿¡ °°Àº Å©±â·Î ¹èÄ¡µÉ °ÍÀÌ´Ù. »õ·Î ¸¸µé¾îÁø ºäµµ ºÐÇÒ »óÅ¿¡ µû¶ó ½ºÇø´ ¹Ú½º¸¦ °ü¸®ÇØ¾ß ÇϹǷΠAdjustSplittable ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
ÀÌÁ¦ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϱ⸸ ÇÏ¸é ºäÀÇ Å¸ÀÔÀÌ ÀüȯµÈ´Ù. º¸±â ¸Þ´º¿¡ 16Áø º¸±â Ç׸ñÀÌ ÀÌ¹Ì ¸¸µé¾îÁ® ÀÖÀ¸¹Ç·Î ÀÌ ¸Þ´º°¡ ¼±ÅõǾúÀ» ¶§ ChangeViewType ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. Dangeun.cpp¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇÑ´Ù.
void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
if (pView->ViewType == HEXA_VIEW) {
pSi->Ae.ChangeViewType(-1,TEXT_VIEW);
} else {
pSi->Ae.ChangeViewType(-1,HEXA_VIEW);
}
break;
È°¼º ºäÀÇ Å¸ÀÔÀÌ Çí»ç ºäÀ̸é ÅؽºÆ® ºä·Î ±³Ã¼ÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é ÅؽºÆ® ºä·Î ±³Ã¼ÇÑ´Ù. ÇöÀç Áö¿øµÇ´Â ºä ŸÀÔÀÌ µÎ °¡Áö¹Û¿¡ ¾øÀ¸¹Ç·Î ÀÌ ¸í·ÉÀº ºäÀÇ Å¸ÀÔÀ» Åä±ÛÇÏ´Â ¹æ½ÄÀ» äÅÃÇß´Ù. Â÷ÈÄ¿¡ ºäÀÇ Å¸ÀÔÀÌ ¸¹¾ÆÁö¸é ¼øȯÇÏ´Â ¸í·ÉÀ¸·Î ¹Ù²Ü °ÍÀÌ´Ù. ´ÜÃàÅ° Ctrl+H°¡ Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î ´ÜÃàÅ°·Îµµ ºä ŸÀÔÀ» ½±°Ô Åä±ÛÇÒ ¼ö ÀÖ´Ù. OnInitMenu¿¡¼´Â È°¼º ºäÀÇ Å¸ÀÔÀ» ¸Þ´º¿¡ º¸¿©ÁØ´Ù.
void OnInitMenu(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
CApiEditText *pView;
hMenu=(HMENU)wParam;
hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);
if (hActive) {
pSi=(SInfo *)GetWindowLong(hActive,0);
pView=pSi->Ae.GetActiveView();
....
if (pView->ViewType == HEXA_VIEW) {
CheckMenuItem(hMenu, IDM_VIEW_HEXA, MF_BYCOMMAND | MF_CHECKED);
} else {
CheckMenuItem(hMenu, IDM_VIEW_HEXA, MF_BYCOMMAND | MF_UNCHECKED);
}
GetActiveView·Î È°¼º ºäÀÇ Æ÷ÀÎÅ͸¦ ±¸ÇÑ ÈÄ ÀÌ ºäÀÇ ViewTypeÀÌ HEXA_VIEWÀÌ¸é º¸±â ¸Þ´ºÀÇ 16Áø º¸±â Ç׸ñ¿¡ üũ Ç¥½Ã¸¦ ºÙÀδÙ. Åø¹Ù¿¡µµ Çí»ç ºä Àüȯ ¹öÆ°ÀÌ ÀÖÀ¸¹Ç·Î OnIdle¿¡¼ ÀÌ ¹öÆ°À» °ü¸®ÇØ¾ß ÇÑ´Ù.
void OnIdle()
{
CApiEditText *pView;
hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);
if (hActive) {
pSi=(SInfo *)GetWindowLong(hActive,0);
pView=pSi->Ae.GetActiveView();
....
if (pView->ViewType == HEXA_VIEW) {
SendMessage(hToolBar,TB_SETSTATE,IDM_VIEW_HEXA,
MAKELONG(TBSTATE_ENABLED | TBSTATE_CHECKED,0));
} else {
SendMessage(hToolBar,TB_SETSTATE,IDM_VIEW_HEXA,MAKELONG(TBSTATE_ENABLED,0));
}
} else {
....
SendMessage(hToolBar,TB_SETSTATE,IDM_VIEW_HEXA,MAKELONG(0,0));
}
}
¸Þ´º¿Í ¸¶Âù°¡Áö·Î È°¼º ºäÀÇ Å¸ÀÔÀÌ HEXA_VIEWÀ̸é Åø ¹öÆ°À» ´·¯Áø »óÅ·Π¸¸µç´Ù. ±×·³ Á¦´ë·Î ºäÀÇ Å¸ÀÔÀÌ ÀüȯµÇ´ÂÁö Å×½ºÆ®ÇØ º¸ÀÚ. ¾Æ¹« ÆÄÀÏÀ̳ª ¿¾î ³õ°í Ctrl+H¸¦ ´©¸£¸é ÀÛ¾÷¿µ¿ª¿¡ Hexa¶ó°í Ãâ·ÂµÉ °ÍÀÌ´Ù.
¾ÆÁ÷ Á¦´ë·Î 16Áø ´ýÇÁ¸¦ ÇÏÁö´Â ¸øÇÏÁö¸¸ ºÐÇÒµÈ »óÅ¿¡¼ °¢ ºÐÇÒ ºä¿¡ ´ëÇؼµµ ŸÀÔ ÀüȯÀÌ °¡´ÉÇϸç Çí»ç ºä¿¡¼µµ â ºÐÇÒÀÌ °¡´ÉÇÏ´Ù.
ÆíÁý ¸í·É Áß ÀϺδ Çí»ç ºä¿¡¼ »ç¿ëÇÒ ¼ö ¾ø´Ù. ¿¹¸¦ µé¾î ºí·Ï µé¿©¾²±â °°Àº ¸í·ÉÀº ¹®´ÜÀÇ °³³äÀÌ ¾ø±â ¶§¹®¿¡ ¾îµð¸¦ ¾ó¸¶¸¸Å µé¿©¾µÁö °áÁ¤ÇÒ ¼ö ¾ø´Ù. Çí»ç ºä·Î ÀüȯÇÑ ÈÄ ÆíÁý/º¯È¯/µé¿©¾²±â ÇØ º¸¸é ´çÀå ´Ù¿îµÇ¾î ¹ö¸± °ÍÀÌ´Ù. Á¶ÀÛ ´ë»óÀÎ pLineÀÌ ¾ø±â ¶§¹®Àε¥ ÀÌ·± ¸í·ÉµéÀÌ Çí»ç ºä·Î Àü´ÞµÇÁö ¾Êµµ·Ï ¸·¾Æ¾ß ÇÑ´Ù. ¼¼ °¡Áö ¹æ¹ýÀÌ Àִµ¥ ù ¹ø°·Î È£½ºÆ®°¡ ÀÌ ¸Þ´º ¸í·ÉÀÌ ¼±ÅõǾúÀ» ¶§ ÇÔ¼ö È£ÃâÀ» °¡·Î¸·´Â ¹æ½ÄÀ» »ý°¢ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÉ °ÍÀÌ´Ù.
void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
case IDM_EDIT_TOTAB:
if (pView->ViewType != HEXA_VIEW)
pView->ConvertSpaceTab(FALSE);
break;
case IDM_EDIT_TOSPACE:
if (pView->ViewType != HEXA_VIEW)
pView->ConvertSpaceTab(TRUE);
break;
....
case IDM_EDIT_INDENT:
if (pView->ViewType != HEXA_VIEW)
pView->BlockIndent(FALSE);
break;
case IDM_EDIT_UNINDENT:
if (pView->ViewType != HEXA_VIEW)
pView->BlockIndent(TRUE);
break;
case IDM_EDIT_COMMENT:
if (pView->ViewType != HEXA_VIEW)
pView->InsertComment(FALSE);
break;
case IDM_EDIT_UNCOMMENT:
if (pView->ViewType != HEXA_VIEW)
pView->InsertComment(TRUE);
break;
....
case IDM_EDIT_COPYUP:
if (pView->ViewType != HEXA_VIEW)
pView->CopyChar(0);
break;
case IDM_EDIT_COPYDOWN:
if (pView->ViewType != HEXA_VIEW)
pView->CopyChar(1);
break;
±âº»ºä¿¡¼ ÆÄ»ýµÈ ¸ðµç ºä´Â ViewTypeÀ̶ó´Â ¸â¹ö¸¦ °¡Áö°í ÀÖ°í »ý¼ºÀÚ¿¡¼ ÀÌ ¸â¹ö¿¡ ÀڱⰡ ´©±¸¶ó´Â Á¤º¸¸¦ ´ëÀÔÇØ ³õ¾ÒÀ¸¹Ç·Î ÇöÀç ºäÀÇ Å¸ÀÔ ÆǺ°ÀÌ °¡´ÉÇÏ´Ù. ÀÌ °ªÀ» ÀÐ¾î º¸°í ¸í·ÉÀ» ó¸®ÇÒ ºä°¡ Çí»ç ºäÀÌ¸é ¾Æ¿¹ È£ÃâÇÏÁö ¾Ê´Â´Ù. ÀÌ ¹æ¹ýÀº È£½ºÆ®°¡ ¸í·ÉÀÇ °¡´É¼ºÀ» ÆǺ°ÇØ¾ß ÇϹǷΠÁÁÁö ¾Ê´Ù.
µÎ ¹ø° ¹æ¹ýÀº ±âº» ºäÀÇ ÇØ´ç ÇÔ¼ö°¡ ÀÌ ÇÔ¼öµéÀ» ÀçÁ¤ÀÇÇÏ¿© ½º½º·Î ŸÀÔÀ» ÆǺ°ÇÏ¿© ºÒ°¡´ÉÇÑ µ¿ÀÛÀ» ÇÏÁö ¾Ê´Â °ÍÀÌ´Ù. °¢ ÇÔ¼öÀÇ ¼±µÎ¿¡ ´ÙÀ½ Á¶°Ç¹®À» ³Ö¾î ÁØ´Ù.
void CApiEditText::ConvertSpaceTab(BOOL bToSpace)
{
if (pFrame->bReadOnly || ViewType==HEXA_VIEW) {
return;
}
....
void CApiEditText::BlockIndent(BOOL bUnindent)
{
if (pFrame->bReadOnly || ViewType==HEXA_VIEW) {
return;
}
....
void CApiEditText::InsertComment(BOOL bUnComment)
{
if (pFrame->bReadOnly || ViewType==HEXA_VIEW) {
return;
}
....
void CApiEditText::CopyChar(int dir)
{
if (pFrame->bReadOnly || ViewType==HEXA_VIEW) {
return;
}
....
Àбâ Àü¿ë »óÅÂÀ̰ųª Çí»ç ºäÀÌ¸é ¾Æ¹« µ¿ÀÛµµ ÇÏÁö ¾Ê´Â´Ù. ÀÌ ÇÔ¼öµéÀº ¸ðµÎ °¡»ó ÇÔ¼öÀ̸ç Çí»ç ºä¿¡¼µµ ÀçÁ¤ÀÇÇÏÁö ¾ÊÀ¸¹Ç·Î Çí»ç ºä¿¡ ´ëÇØ °ü·Ã ÆíÁý ¸í·ÉÀ» ³»¸®¸é ÀÌ ÇÔ¼öµéÀÌ È£ÃâµÈ´Ù. ¿©±â¼ ºäÀÇ Å¸ÀÔÀ» ÆǺ°ÇØ º¸°í µ¿ÀÛÀÇ °è¼Ó ¿©ºÎ¸¦ °áÁ¤ÇÏ¸é µÈ´Ù.
¼¼ ¹ø° ¹æ¹ýÀº Çí»ç ºä°¡ »ó±â °¡»ó ÇÔ¼öµéÀ» ÀçÁ¤ÀÇÇ쵂 ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â ºó ÇÔ¼ö¸¦ °¡Áö´Â °ÍÀÌ´Ù. ±×·¯¸é ±âº»ºäÀÇ ÇÔ¼ö°¡ È£ÃâµÇÁö ¾Ê°í ºñ¾îÀÖ´Â Çí»çºäÀÇ ÇÔ¼ö°¡ È£ÃâµÇ¹Ç·Î ¾Æ¹« Àϵµ ÀϾÁö ¾Ê´Â´Ù.
¼¼°¡Áö ¹æ¹ýÁß ¾î¶² ¹æ¹ýÀ» ¾²´õ¶óµµ ¾µ ¼ö ¾ø´Â ¸í·ÉÀ» ¸·À» ¼ö´Â ÀÖ´Ù. ù¹ø° ¹æ¹ýÀº È£½ºÆ®¿¡°Ô ºÎ´ãÀÌ µÈ´Ù´Â Á¡ÀÌ ÁÁÁö ¾Ê°í ¸Þ´º°¡ ¾Æ´Ñ ´Ù¸¥ °æ·Î, ¿¹¸¦ µé¾î ¸ÅÅ©·Î³ª ´ÜÃàÅ°¸¦ ÅëÇØ ¸í·ÉÀÌ Àü´ÞµÉ ¶§ ´Ù½Ã Çѹø ´õ ÀÛ¾÷ÇØ¾ß ÇÑ´Ù. ¼¼¹ø° ¹æ¹ýÀº ¿øÄ¢ÀûÀ̱â´Â ÇÏÁö¸¸ ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â °ÍÀ» ¸í½ÃÇϱâ À§ÇØ ºó ÇÔ¼ö¸¦ ¸¸µé¾î¾ß ÇÑ´Ù´Â Á¡ÀÌ ¸¸À½¿¡ µéÁö ¾Ê´Â´Ù. µÎ ¹ø° ¹æ¹ýÀÌ ÄÚµå ±æÀ̵µ ª°í °¡Àå °£´ÜÇÏ°í ÁÁÀ¸¹Ç·Î µÎ ¹ø° ¹æ¹ýÀ» äÅÃÇÑ´Ù.
ÀÌ ÀÛ¾÷À» ÇÏ¸é¼ 1.0ÀÇ ¹ö±×°¡ Çϳª ¹ß°ßµÇ¾ú´Âµ¥ CopyChar ÇÔ¼ö ¿Ü¿¡´Â Àбâ Àü¿ë Ç÷¡±×¸¦ Á¡°ËÇÏÁö ¾Ê°í ÀÖ´Ù´Â Á¡ÀÌ´Ù. ±×·¡¼ À̹ø ±âȸ¿¡ ÀÌ ¹ö±×µµ °°ÀÌ ¼öÁ¤Çß´Ù. ³ª¸ÓÁö Çí»ç ºä¿¡¼ ¾µ ¼ö ÀÖ´Â ÆíÁý ÇÔ¼öµéµµ ¸¶Âù°¡Áö·Î ¹æ¹ýÀ¸·Î ¼öÁ¤ÇØ¾ß ÇÑ´Ù.
void CApiEditText::ChangeCase(int action)
{
if (pFrame->bReadOnly) {
return;
}
void CApiEditText::RemoveExtraSpace()
{
if (pFrame->bReadOnly) {
return;
}
ÇÔ¼ö ³»ºÎ¿¡¼ µ¿ÀÛ °¡´É¼ºÀ» Á¡°ËÇÏ°í ÀÖÀ¸¹Ç·Î È£½ºÆ®´Â ºäÀÇ Å¸ÀÔ¿¡ »ó°ü¾øÀÌ ¹«Á¶°Ç ÇÔ¼ö¸¦ ºÎ¸£±â¸¸ ÇÏ¸é µÈ´Ù. ÇÏÁö¸¸ ¾µ ¼ö ¾ø´Â ¸í·ÉÀ̶ó´Â °ÍÀ» Ç¥½ÃÇϱâ À§ÇØ ¸Þ´º Ç׸ñÀº °ü¸®ÇØ¾ß ÇÑ´Ù.
void OnInitMenu(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
if (s != e && pView->ViewType != HEXA_VIEW) {
EnableMenuItem(hMenu, IDM_EDIT_TOTAB, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(hMenu, IDM_EDIT_TOSPACE, MF_BYCOMMAND | MF_ENABLED);
} else {
EnableMenuItem(hMenu, IDM_EDIT_TOTAB, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu, IDM_EDIT_TOSPACE, MF_BYCOMMAND | MF_GRAYED);
}
if (pView->ViewType != HEXA_VIEW) {
EnableMenuItem(hMenu, IDM_EDIT_INDENT, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(hMenu, IDM_EDIT_UNINDENT, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(hMenu, IDM_EDIT_COPYUP, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(hMenu, IDM_EDIT_COPYDOWN, MF_BYCOMMAND | MF_ENABLED);
} else {
EnableMenuItem(hMenu, IDM_EDIT_INDENT, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu, IDM_EDIT_UNINDENT, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu, IDM_EDIT_COPYUP, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu, IDM_EDIT_COPYDOWN, MF_BYCOMMAND | MF_GRAYED);
}
....
if (lstrlen(pSi->Ae.GetParser()->GetInfo(2)) == 0 || pView->ViewType==HEXA_VIEW) {
EnableMenuItem(hMenu,IDM_EDIT_COMMENT, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,IDM_EDIT_UNCOMMENT, MF_BYCOMMAND | MF_GRAYED);
} else {
EnableMenuItem(hMenu,IDM_EDIT_COMMENT, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(hMenu,IDM_EDIT_UNCOMMENT, MF_BYCOMMAND | MF_ENABLED);
}
¼±Åà ¿µ¿ª¸¸ ÀÖÀ¸¸é ÅÇ/°ø¹é º¯È¯À» ÇÒ ¼ö ÀÖ¾úÀ¸³ª ¿©±â¿¡ Çí»ç ºä°¡ ¾Æ´Ï¶ó´Â Á¶°ÇÀÌ ´õ Ãß°¡µÇ¾î¾ß ÇÑ´Ù. Ŭ¸³º¸µå ¸í·É°ú °°Àº »óŸ¦ °¡Áö´ø IDM_EDIT_TOTAB, IDM_EDIT_TOSPACEÀÇ »óÅ °ü¸®¸¦ º°µµÀÇ if¹®À¸·Î ºÐ¸®ÇÏ¿´´Ù. µé¿©¾²±â/³»¾î¾²±â, ¹®ÀÚ º¹»ç´Â Ç×»ó °¡´ÉÇßÀ¸³ª Çí»ç ºä°¡ ¾Æ´Ò ¶§¸¸ °¡´ÉÇϵµ·Ï »õ·Î Á¶°ÇÀÌ Ãß°¡µÇ¾ú´Ù.
ÁÖ¼®À¸·Î ¸¸µé±â ±â´ÉÀº ±¸¹® ºÐ¼®±â°¡ ÇÑÁÙ ÁÖ¼®À» Á¤ÀÇÇÏÁö ¾ÊÀ» ¶§¸¸ »ç¿ëÇÒ ¼ö ¾ø¾ú´Âµ¥ ¿©±â¿¡ Çí»ç ºä¶ó´Â Á¶°Çµµ °°ÀÌ Á¡°ËÇØ¾ß ÇÑ´Ù. Áï, ÇÑÁÙ ÁÖ¼®ÀÌ Á¤ÀǵǾî ÀÖ°í Çí»ç ºä°¡ ¾Æ´Ï¾î¾ß¸¸ ÁÖ¼® ¸¸µé±â°¡ °¡´ÉÇÏ´Ù.