2.´ÜÃàŰ Ŭ·¡½º

°¡.CShortCut Ŭ·¡½º

ÀÌÁ¦ ´ÜÃàŰ´Â ½ÇÇàÁß¿¡ ¾ðÁ¦¶óµµ Ãß°¡, »èÁ¦, ÆíÁýÇÒ ¼ö ÀÖ´Â ´ë»óÀ̹ǷΠ»ç¿ëÀÚ°¡ ¿øÇϴ´ë·Î ¼öÁ¤ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ´ÜÃàŰ ÆíÁý ±â´ÉÀº ÇϳªÀÇ µ¶¸³µÈ ÀÚ·á °ü¸® ±â´ÉÀ̹ǷΠÀ̸¦ Àü´ãÇÒ º°µµÀÇ Å¬·¡½º¸¦ ÀÛ¼ºÇϱâ·Î ÇÑ´Ù. ShortCut.h¿¡ ´ÜÃàŰ ÁýÇÕÀ» Á¤ÀÇÇÏ°í °ü¸®Çϴ Ŭ·¡½º¸¦ Á¤ÀÇÇÑ´Ù.

 

#define SC_SHIFT 0x01

#define SC_CTRL 0x02

#define SC_ALT 0x04

 

// ´ÜÃàŰ ÇϳªÀÇ Á¤º¸. Á¶ÇÕŰ+°¡»óŰ·Î ±¸¼ºµÈ ´ÜÃàŰ ÀԷ½à ½ÇÇàµÉ

// ¸Þ´ºÇ׸ñ, ¶Ç´Â ¸ÅÅ©·Î ¸í·ÉÀ» ±â¾ïÇÑ´Ù.

struct SShortCut

{

     UINT vk;

     DWORD Flag;

     UINT id;

     TCHAR *Com;

};

 

// ´ÜÃàŰ °ü¸® Ŭ·¡½º

class CShortCut

{

public:

     SShortCut *arShortCut;

 

     CShortCut();

     ~CShortCut();

     void Exit();

 

     void Init();

     void Add(SShortCut *sc);

     void Delete(int idx);

     void Modify(int idx,SShortCut *sc);

     int Find(UINT vk,DWORD Flag);

     int Find(UINT id,TCHAR *Com);

     void Load(TCHAR *Key);

     void Save(TCHAR *Key);

};

 

SShortCut ±¸Á¶Ã¼´Â ´ÜÃàŰ Çϳª¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö´Âµ¥ vk¿Í Flag·Î ¾î¶² ۰¡ ´­·¯Á³À» ¶§ ÀÌ ´ÜÃà۸¦ »ç¿ëÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. id¿Í ComÀº ´ÜÃà۰¡ ÀԷµǾúÀ» ¶§ÀÇ µ¿ÀÛÀ» ÁöÁ¤Çϴµ¥ id´Â ¸Þ´º ¸í·ÉÀÇ IDÀ̸ç ÀÌ °ªÀÌ 0ÀÎ °æ¿ì´Â ComÀÇ ¸ÅÅ©·Î ¸í·ÉÀÌ ½ÇÇàµÈ´Ù. ¸í·ÉÀº ¸ÅÅ©·Î ±¸¹®À̹ǷΠ¿©·¯ °³ÀÇ ¸í·ÉÀ» ÇϳªÀÇ ´ÜÃàŰ¿¡ ³Ö¾î µÑ ¼ö ÀÖ´Ù. ¸ÅÅ©·ÎÀÇ ±æÀÌ´Â °¡º¯ÀûÀ̹ǷΠComÀº µ¿ÀûÀ¸·Î ÇÒ´çÇϱâ·Î ÇÑ´Ù.

CShortCut Ŭ·¡½º´Â ÀÌ·± ´ÜÃàŰÀÇ ÁýÇÕÀ» °ü¸®ÇÑ´Ù. Ãß°¡, »èÁ¦, °Ë»ö µîÀÇ ÀϹÝÀûÀÎ ÀÚ·á °ü¸® ±â´ÉÀÌ ÀÌ Å¬·¡½º¿¡ ÀÛ¼ºµÈ´Ù. ¾Õ Àå¿¡¼­ ¸¸µé¾ú´ø CMacro Ŭ·¡½º¿Í ±¸Á¶´Â °ÅÀÇ µ¿ÀÏÇÏ´Ù. ´ÜÃàŰÀÇ °³¼ö°¡ °¡º¯ÀûÀ̱⠶§¹®¿¡ ´ÜÃàŰ ¹è¿­µµ µ¿ÀûÀ¸·Î °ü¸®ÇØ¾ß ÇÑ´Ù. »ý¼ºÀÚ, ÆÄ±«ÀÚ´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù.

 

CShortCut::CShortCut()

{

     arShortCut=NULL;

}

 

CShortCut::~CShortCut()

{

     Exit();

}

 

void CShortCut::Exit()

{

     int i;

 

     // ´ÜÃàŰ ¹è¿­°ú ¸ÅÅ©·Î ¹®ÀÚ¿­À» ÇØÁ¦ÇÑ´Ù.

     if (arShortCut) {

          for (i=0;arShortCut[i].vk;i++) {

              if (arShortCut[i].Com) {

                   free(arShortCut[i].Com);

              }

          }

          free(arShortCut);

          arShortCut=NULL;

     }

}

 

»ý¼ºÀÚ´Â ¿ÏÀüÈ÷ ºó »óÅ·Π´ÜÃàŰ ¹è¿­À» ÃʱâÈ­ÇÑ´Ù. ÀÌ ¹è¿­À» ÃʱâÈ­ÇÏ´Â ÀÛ¾÷Àº Init¿¡ ó¸®Ç쵂 ¸¸¾à »ç¿ëÀÚ°¡ ´ÜÃà۸¦ ÀçÁ¤ÀÇÇÏ¸é ·¹Áö½ºÆ®¸®ÀÇ ÆíÁýµÈ ´ÜÃàŰ ¸ñ·ÏÀ¸·ÎºÎÅÍ ÃʱâÈ­µÈ´Ù. ÆÄ±«ÀÚ´Â ¸ðµç ´ÜÃà۸¦ ÇØÁ¦Çϴµ¥ À̶§ °¢ ´ÜÃàŰ¿¡ ÀúÀåµÈ ¸ÅÅ©·Î ¹®ÀÚ¿­µµ °°ÀÌ ÇØÁ¦ÇØ¾ß ÇÑ´Ù.

³ª.µðÆúÆ® ´ÜÃàŰ

µðÆúÆ® ´ÜÃàŰ ¸ñ·ÏÀº Init ÇÔ¼ö¿¡¼­ ÃʱâÈ­ÇÑ´Ù. ÀÌ ÇÔ¼ö°¡ ´ç±ÙÀÇ Ãʱ⠴ÜÃàŰ ¸ñ·ÏÀ» »ý¼ºÇÏ´Â ÀÛ¾÷À» ÇÑ´Ù.

 

// µðÆúÆ® ´ÜÃàŰ ¸ñ·Ï

SShortCut DefaultShortCut[]={

     {'N',   SC_CTRL,                  IDM_FILE_NEW,           NULL},

     {'O',   SC_CTRL,                  IDM_FILE_OPEN,              NULL},

     {VK_F4,   SC_CTRL,                  IDM_FILE_CLOSE,            NULL},

     {'S',   SC_CTRL,                  IDM_FILE_SAVE,              NULL},

     {'S',   SC_CTRL | SC_SHIFT,     IDM_FILE_SAVEALL,         NULL},

     {'C',   SC_CTRL | SC_ALT,        IDM_FILE_CLOSEALL,      NULL},

     {'O',   SC_CTRL | SC_ALT,        IDM_FILE_FTPOPEN,        NULL},

     {'P',   SC_CTRL,                  IDM_FILE_PRINT,             NULL},

     {VK_F4,   SC_ALT,                     IDM_FILE_EXIT,           NULL},

     {'Z',   SC_CTRL,                  IDM_EDIT_UNDO,             NULL},

     {'Y',   SC_CTRL,                  IDM_EDIT_REDO,             NULL},

     {'C',   SC_CTRL,                  IDM_EDIT_COPY,             NULL},

     {'X',   SC_CTRL,                  IDM_EDIT_CUT,           NULL},

     {'V',   SC_CTRL,                  IDM_EDIT_PASTE,            NULL},

     {'A',   SC_CTRL,                  IDM_EDIT_SELALL,      NULL},

     {'C',   SC_CTRL | SC_SHIFT,     IDM_EDIT_COPYAPPEND, NULL},

     {'X',   SC_CTRL | SC_SHIFT,     IDM_EDIT_CUTAPPEND,        NULL},

     {'U',   SC_CTRL,                  IDM_EDIT_UPPER,            NULL},

     {'L',   SC_CTRL,                  IDM_EDIT_LOWER,           NULL},

     {'K',   SC_CTRL,                  IDM_EDIT_INSERTSPECIAL,   NULL},

     {'M',  SC_CTRL,                  IDM_EDIT_COMMENT,     NULL},

     {'M',  SC_CTRL | SC_SHIFT,     IDM_EDIT_UNCOMMENT,      NULL},

     {'I',    SC_CTRL,                  IDM_EDIT_COPYUP,         NULL},

     {'I',    SC_CTRL | SC_SHIFT,     IDM_EDIT_COPYDOWN,         NULL},

     {'C',   SC_ALT,                     IDM_EDIT_COLUMN,        NULL},

     {'X',   SC_ALT,                     IDM_EDIT_COMMODE,     NULL},

     {'W',   SC_CTRL,                  IDM_VIEW_WORDWRAP,         NULL},

     {'E',   SC_CTRL,                  IDM_VIEW_CODE,             NULL},

     {'H',   SC_CTRL,                  IDM_VIEW_HEXA,             NULL},

     {'F',   SC_CTRL,                  IDM_SEARCH_FIND,         NULL},

     {VK_F3,   0,                          IDM_SEARCH_NEXT,        NULL},

     {VK_F3,   SC_SHIFT,                  IDM_SEARCH_PREV,        NULL},

     {VK_F3,   SC_CTRL,                  IDM_SEARCH_WORD,       NULL},

     {VK_F3,   SC_CTRL | SC_SHIFT,     IDM_SEARCH_WORDUP,        NULL},

     {'R',   SC_CTRL,                  IDM_SEARCH_REPLACE,       NULL},

     {VK_F2,   0,                          IDM_SEARCH_NEXTMARK,    NULL},

     {VK_F2,   SC_SHIFT,                  IDM_SEARCH_PREVMARK,    NULL},

     {VK_F2,   SC_CTRL,                  IDM_SEARCH_TOGGLEMARK,    NULL},

     {'G',   SC_CTRL,                  IDM_SEARCH_GOTOLINE, NULL},

     {'B',   SC_CTRL,                  IDM_SEARCH_PAREN,      NULL},

     {'B',   SC_CTRL | SC_SHIFT,     IDM_SEARCH_PARENSEL,     NULL},

     {'Q',   SC_CTRL,                  IDM_SEARCH_LASTEDIT,  NULL},

     {'F',   SC_CTRL | SC_SHIFT,     IDM_SEARCH_FILES,        NULL},

     {VK_F4,   0,                          IDM_SEARCH_INST,         NULL},

     {'T',   SC_CTRL,                  IDM_TOOL_CONFIG,         NULL},

     {'M',  SC_CTRL | SC_ALT,        IDM_TOOL_MACRO,              NULL},

     {'R',   SC_CTRL | SC_ALT,        IDM_TOOL_READMODE,        NULL},

     {'P',   SC_CTRL | SC_ALT,        IDM_TOOL_PARA,            NULL},

     {VK_F1,   0,                          IDM_HELP_INDEX,            NULL},

     {VK_F6,   0,                          IDM_WIN_NEXTVIEW,       NULL},

     {VK_F6,   SC_SHIFT,                  IDM_WIN_PREVVIEW,        NULL},

 

     {'1',    SC_ALT,                     IDM_FONT_1,                   NULL},

     {'2',    SC_ALT,                     IDM_FONT_2,                   NULL},

     {'3',    SC_ALT,                     IDM_FONT_3,                   NULL},

     {'4',    SC_ALT,                     IDM_FONT_4,                   NULL},

     {'5',    SC_ALT,                     IDM_FONT_5,                   NULL},

     {'6',    SC_ALT,                     IDM_FONT_6,                   NULL},

     {'7',    SC_ALT,                     IDM_FONT_7,                   NULL},

     {'8',    SC_ALT,                     IDM_FONT_8,                   NULL},

     {'9',    SC_ALT,                     IDM_FONT_9,                   NULL},

     {'0',    SC_ALT,                     IDM_FONT_10,            NULL},

     {'1',    SC_CTRL | SC_ALT,        45000,                    NULL},

     {'2',    SC_CTRL | SC_ALT,        45001,                    NULL},

     {'3',    SC_CTRL | SC_ALT,        45002,                    NULL},

     {'4',    SC_CTRL | SC_ALT,        45003,                    NULL},

     {'5',    SC_CTRL | SC_ALT,        45004,                    NULL},

     {'6',    SC_CTRL | SC_ALT,        45005,                    NULL},

     {'7',    SC_CTRL | SC_ALT,        45006,                    NULL},

     {'8',    SC_CTRL | SC_ALT,        45007,                    NULL},

     {'9',    SC_CTRL | SC_ALT,        45008,                    NULL},

     {'0',    SC_CTRL | SC_ALT,        45009,                    NULL},

     {'1',    SC_ALT | SC_SHIFT,        IDM_SYN_CPP,           NULL},

     {'2',    SC_ALT | SC_SHIFT,        IDM_SYN_HTML,              NULL},

     {'3',    SC_ALT | SC_SHIFT,        IDM_SYN_SQL,           NULL},

     {'0',    SC_ALT | SC_SHIFT,        IDM_SYN_NONE,             NULL},

     {188,   SC_CTRL | SC_SHIFT,     IDM_LINE_1,               NULL},

     {190,   SC_CTRL | SC_SHIFT,     IDM_LINE_2,               NULL},

     {191,   SC_CTRL | SC_SHIFT,     IDM_LINE_3,               NULL},

     {186,   SC_CTRL | SC_SHIFT,     IDM_LINE_4,               NULL},

     {222,   SC_CTRL | SC_SHIFT,     IDM_LINE_5,               NULL},

     {'1',    SC_CTRL,                  0,       "gomark 1"},

     {'2',    SC_CTRL,                  0,       "gomark 2"},

     {'3',    SC_CTRL,                  0,       "gomark 3"},

     {'4',    SC_CTRL,                  0,       "gomark 4"},

     {'5',    SC_CTRL,                  0,       "gomark 5"},

     {'6',    SC_CTRL,                  0,       "gomark 6"},

     {'7',    SC_CTRL,                  0,       "gomark 7"},

     {'8',    SC_CTRL,                  0,       "gomark 8"},

     {'9',    SC_CTRL,                  0,       "gomark 9"},

     {'0',    SC_CTRL,                  0,       "gomark 0"},

     {'1',    SC_CTRL | SC_SHIFT,     0,       "setmark 1"},

     {'2',    SC_CTRL | SC_SHIFT,     0,       "setmark 2"},

     {'3',    SC_CTRL | SC_SHIFT,     0,       "setmark 3"},

     {'4',    SC_CTRL | SC_SHIFT,     0,       "setmark 4"},

     {'5',    SC_CTRL | SC_SHIFT,     0,       "setmark 5"},

     {'6',    SC_CTRL | SC_SHIFT,     0,       "setmark 6"},

     {'7',    SC_CTRL | SC_SHIFT,     0,       "setmark 7"},

     {'8',    SC_CTRL | SC_SHIFT,     0,       "setmark 8"},

     {'9',    SC_CTRL | SC_SHIFT,     0,       "setmark 9"},

     {'0',    SC_CTRL | SC_SHIFT,     0,       "setmark 0"},

 

     {'A',   0,                          0,       "select word;copy"},

     {'A',   SC_SHIFT,                  0,       "select word"},

     {'B',   0,                          IDM_SEARCH_PAREN,      NULL},

     {'B',   SC_SHIFT,                  IDM_SEARCH_PARENSEL,     NULL},

     {'C',   0,                          IDM_EDIT_COPY,             NULL},

     {'C',   SC_SHIFT,                  IDM_EDIT_COPYAPPEND, NULL},

     {'D',   0,                          0,       "movesel end;delete"},

     {'D',   SC_SHIFT,                  0,       "movesel paraend;delete"},

     {'E',   0,                          0,       "select line;delete"},

     {'E',   SC_SHIFT,                  0,       "select para;delete"},

     {'F',   0,                          IDM_SEARCH_WORD,       NULL},

     {'F',   SC_SHIFT,                  IDM_SEARCH_WORDUP,        NULL},

     {'G',   0,                          0,       "move down;move end"},

     {'H',   0,                          0,       "movesel home;delete"},

     {'H',   SC_SHIFT,                  0,       "movesel parahome;delete"},

     {'I',    0,                          IDM_EDIT_COPYUP,         NULL},

     {'I',    SC_SHIFT,                  IDM_EDIT_COPYDOWN,         NULL},

     {'J',    0,                          0,       "select para;copy;move parahome;paste;move prevpara"},

     {'J',    SC_SHIFT,                  0,       "move nextpara;select para;copy;move parahome;paste;move prevpara 2;"},

     {'L',   0,                          IDM_EDIT_LOWER,           NULL},

     {'L',   SC_SHIFT,                  0,       "select word;convert lower"},

     {'O',   0,                          0,       "select line;copy"},

     {'O',   SC_SHIFT,                  0,       "select line"},

     {'P',   0,                          0,       "select para;copy"},

     {'P',   SC_SHIFT,                  0,       "select para"},

     {'Q',   0,                          IDM_SEARCH_LASTEDIT,  NULL},

     {'U',   0,                          IDM_EDIT_UPPER,            NULL},

     {'U',   SC_SHIFT,                  0,       "select word;convert upper"},

     {'V',   0,                          IDM_EDIT_PASTE,            NULL},

     {'W',   0,                          IDM_VIEW_WORDWRAP,             NULL},

     {'X',   0,                          IDM_EDIT_CUT,           NULL},

     {'X',   SC_SHIFT,                  IDM_EDIT_CUTAPPEND,        NULL},

     {'Y',   0,                          IDM_EDIT_REDO,             NULL},

     {'Z',   0,                          IDM_EDIT_UNDO,             NULL}

};

 

void CShortCut::Init()

{

     int i;

 

     Exit();

     arShortCut=(SShortCut *)malloc(256*sizeof(SShortCut));

     memset(arShortCut,0,256*sizeof(SShortCut));

 

     for (i=0;i<ARSIZE(DefaultShortCut);i++) {

          Add(&DefaultShortCut[i]);

     }

}

 

DefaultShortCut ¹è¿­ÀÌ ´ç±ÙÀÇ ±âº» ´ÜÃàŰ ¸ñ·ÏÀ̸ç Áö±Ý±îÁö ¸¸µç ¸Þ´º ¸í·Éµé¿¡ ´ëÇÑ ´ÜÃà۰¡ ÀÌ ¹è¿­¿¡ Á¤ÀǵǾî ÀÖ´Ù. Init ÇÔ¼ö´Â ±âº»ÀûÀ¸·Î 256°³ÀÇ ´ÜÃà۸¦ ±â¾ïÇÒ ¼ö ÀÖ´Â ¹è¿­À» ÇÒ´çÇϰí ÀÌ ¹è¿­ÀÇ ³»¿ë ±×´ë·Î ´ÜÃà۸¦ ÃʱâÈ­ÇÑ´Ù. ÀçÃʱâÈ­µÉ ¶§¸¦ ´ëºñÇØ¼­ Exit¸¦ ¸ÕÀú È£ÃâÇÏ¿© ÀÌ¹Ì ÇÒ´çµÈ ¹è¿­À» ¸ÕÀú ÇØÁ¦Çß´Ù. ¸Þ´º ¸®¼Ò½º¿¡ Á¤ÀǵǾî ÀÖ´Â ´ÜÃàŰ ¸ñ·ÏÀ» ±×´ë·Î °¡Áö°í ÀÖÀ¸¸ç ¶ÇÇÑ ¸í·É ¸ðµå¿¡¼­ÀÇ ´ÜÃàŰ´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÏ¿´´Ù. ¸í·É ¸ðµå¿¡ ´ëÇØ¼­´Â Â÷ÈÄ ¼³¸íÇϱâ·Î ÇÑ´Ù.

 

°¡»óŰ

´Üµ¶ ÀԷ½Ã

Shift ÀԷ½Ã

A

´Ü¾î º¹»ç

´Ü¾î ¼±ÅÃ

B

°ýÈ£ ã±â

°ýÈ£ ¼±ÅÃ

C

º¹»ç

º¹»çÇØ¼­ Ãß°¡

D

ÁÙ ³¡±îÁö »èÁ¦

¹®´Ü ³¡±îÁö »èÁ¦

E

ÁÙ »èÁ¦

¹®´Ü »èÁ¦

F

ÇöÀç ´Ü¾î ´ÙÀ½

ÇöÀç ´Ü¾î À§·Î

G

´ÙÀ½ÁÙ ³¡À¸·Î

 

H

Á٠óÀ½±îÁö »èÁ¦

¹®´Ü óÀ½±îÁö »èÁ¦

I

À­ÁÙ ¹®ÀÚ º¹»ç

¾Æ·¡ÁÙ ¹®ÀÚ º¹»ç

J

ÇöÀç ¹®´Ü ¹Ýº¹

´ÙÀ½ ¹®´Ü ¹Ýº¹

K

 

 

L

¼Ò¹®ÀÚ·Î

´Ü¾î ¼Ò¹®ÀÚ·Î

M

 

 

N

 

 

O

ÁÙ º¹»ç

ÁÙ ¼±ÅÃ

P

¹®´Ü º¹»ç

¹®´Ü ¼±ÅÃ

Q

ÃÖ±Ù ÆíÁý À§Ä¡·Î

 

R

 

 

S

 

 

T

 

 

U

´ë¹®ÀÚ·Î

´Ü¾î ´ë¹®ÀÚ·Î

V

ºÙ¿©³Ö±â

 

W

ÀÚµ¿ °³Çà Åä±Û

 

X

Àß¶ó³»±â

Àß¶ó¼­ Ãß°¡

Y

Àç½ÇÇà

 

Z

Ãë¼Ò

 

 

Init ÇÔ¼ö°¡ Á¤ÀÇÇÏ´Â ´ÜÃàŰ ¸ñ·ÏÀº ¾îµð±îÁö³ª ´ç±ÙÀÌ Ã³À½ ¼³Ä¡µÇ¾úÀ» ¶§ÀÇ µðÆúÆ®ÀÏ »ÓÀÌ¸ç »ç¿ëÀÚ´Â ¸¶À½¿¡ ´Ù´Â´ë·Î ¼ö½Ã·Î ´ÜÃà۸¦ ÆíÁýÇÒ ¼ö ÀÖ´Ù.

´Ù.´ÜÃàŰ °ü¸®

CShortCut Ŭ·¡½ºÀÇ ³ª¸ÓÁö ¸â¹ö ÇÔ¼öµéÀº ¹è¿­ ³»ÀÇ ´ÜÃà۸¦ °ü¸®Çϴµ¥ ÇÔ¼öÀÇ À̸§¸¸ ºÁµµ ¾î¶² µ¿ÀÛÀ» ÇÏ´ÂÁö ½±°Ô ¾Ë ¼ö ÀÖ´Ù.

 

void CShortCut::Add(SShortCut *sc)

{

     int last,size;

 

     // ¹è¿­ÀÇ ³¡ À妽º ãÀ½

     if (arShortCut==NULL) {

          arShortCut=(SShortCut *)malloc(256*sizeof(SShortCut));

          memset(arShortCut,0,256*sizeof(SShortCut));

          last=0;

     } else {

          for (last=0;;last++) {

              if (arShortCut[last].vk == 0) {

                   break;

              }

          }

          // ¹è¿­ Å©±â °ü¸®

          size=_msize(arShortCut)/sizeof(arShortCut[0]);

          if (last == size-1) {

              size+=10;

              arShortCut=(SShortCut *)realloc(arShortCut,size*sizeof(SShortCut));

              memset(arShortCut+size-10,0,10*sizeof(SShortCut));

          }

     }

 

     // ¸ÅÅ©·Î ¸í·ÉÀÌ¸é µ¿Àû ÇÒ´çÇÑ ÈÄ ¸ÅÅ©·Î ¹®ÀÚ¿­À» º¹»çÇÑ´Ù.

     arShortCut[last]=*sc;

     if (sc->id == 0) {

          arShortCut[last].Com=(TCHAR *)malloc(lstrlen(sc->Com)+1);

          lstrcpy(arShortCut[last].Com,sc->Com);

     } else {

          arShortCut[last].Com=NULL;

     }

}

 

void CShortCut::Delete(int idx)

{

     int i;

 

     // ¸ÅÅ©·Î ¹®ÀÚ¿­ ÇØÁ¦

     if (arShortCut[idx].Com) {

          free(arShortCut[idx].Com);

     }

 

     // µÚÂÊ ´ÜÃà۸¦ ÇÑÄ­¾¿ ¾ÕÀ¸·Î ¿Å±ä´Ù.

     for (i=idx+1;;i++) {

          arShortCut[i-1]=arShortCut[i];

          if (arShortCut[i].vk==0) {

              break;

          }

     }

}

 

void CShortCut::Modify(int idx,SShortCut *sc)

{

     // ÀÌÀü ´ÜÃàŰ¿¡ ÇÒ´çµÈ ¸í·ÉÀÌ ÀÖÀ¸¸é ÀÏ´Ü ÇØÁ¦

     if (arShortCut[idx].Com) {

          free(arShortCut[idx].Com);

          arShortCut[idx].Com=NULL;

     }

     arShortCut[idx]=*sc;

     // ¸ÅÅ©·Î ¸í·ÉÀÌ¸é ¸Þ¸ð¸®¸¦ ´Ù½Ã ÇÒ´çÇÑ ÈÄ º¹»çÇÑ´Ù.

     if (sc->id == 0) {

          arShortCut[idx].Com=(TCHAR *)malloc(lstrlen(sc->Com)+1);

          lstrcpy(arShortCut[idx].Com,sc->Com);

     }

}

 

// °¡»ó Ű¿Í Ç÷¡±×°¡ °°Àº ´ÜÃàŰ ¹øÈ£ ãÀ½

int CShortCut::Find(UINT vk,DWORD Flag)

{

     int i;

 

     for (i=0;arShortCut[i].vk;i++) {

          if (arShortCut[i].vk == vk && (arShortCut[i].Flag & 0x7) == Flag) {

              return i;

          }

     }

 

     return -1;

}

 

// ¸í·É ¶Ç´Â ¸ÅÅ©·Î ¸í·ÉÀÌ °°Àº ´ÜÃàŰ ¹øÈ£ ãÀ½

int CShortCut::Find(UINT id,TCHAR *Com)

{

     int i;

 

     for (i=0;arShortCut[i].vk;i++) {

          if (id == 0) {

              if (arShortCut[i].id==0 && lstrcmp(arShortCut[i].Com,Com)==0) {

                   return i;

              }

          } else {

              if (arShortCut[i].id==id) {

                   return i;

              }

          }

     }

 

     return -1;

}

 

void CShortCut::Load(TCHAR *Key)

{

     TCHAR szKey[MAX_PATH];

     TCHAR szSub[MAX_PATH];

     TCHAR Com[1024];

     SShortCut sc;

     int i,Num;

 

     lstrcpy(szKey,Key);

     lstrcat(szKey,"ShortCut");

 

     Num=SHRegReadInt(SHCU,szKey,"Num",0);

     for (i=0;i<Num;i++) {

          wsprintf(szSub,"Key%d",i);

          sc.vk=SHRegReadInt(SHCU,szKey,szSub,0);

          wsprintf(szSub,"Flag%d",i);

          sc.Flag=SHRegReadInt(SHCU,szKey,szSub,0);

          wsprintf(szSub,"id%d",i);

          sc.id=SHRegReadInt(SHCU,szKey,szSub,0);

          if (sc.id == 0) {

              wsprintf(szSub,"Com%d",i);

              SHRegReadString(SHCU,szKey,szSub,"",Com,1024);

              sc.Com=Com;

          }

 

          Add(&sc);

     }

}

 

void CShortCut::Save(TCHAR *Key)

{

     TCHAR szKey[MAX_PATH];

     TCHAR szSub[MAX_PATH];

     int i;

 

     lstrcpy(szKey,Key);

     lstrcat(szKey,"ShortCut");

 

     for (i=0;arShortCut[i].vk;i++) {

          wsprintf(szSub,"Key%d",i);

          SHRegWriteInt(SHCU,szKey,szSub,arShortCut[i].vk);

          wsprintf(szSub,"Flag%d",i);

          SHRegWriteInt(SHCU,szKey,szSub,arShortCut[i].Flag);

          wsprintf(szSub,"id%d",i);

          SHRegWriteInt(SHCU,szKey,szSub,arShortCut[i].id);

          if (arShortCut[i].id == 0) {

              wsprintf(szSub,"Com%d",i);

              SHRegWriteString(SHCU,szKey,szSub,arShortCut[i].Com);

          }

     }

     SHRegWriteInt(SHCU,szKey,"Num",i);

}

 

µ¿ÀûÀÎ ¹è¿­ °ü¸®¸¦ À§ÇØ ÀçÇÒ´çÀ» ºó¹øÇÏ°Ô Çϴµ¥ ¹è¿­ Å©±â¸¦ Á¶»çÇϱâ À§ÇØ _msize ÇÔ¼ö¸¦ »ç¿ëÇϹǷΠ¹è¿­ Å©±â´Â º°µµ·Î ±â¾ïÇÏÁö ¾Ê¾Ò´Ù. ´ÜÃàŰ Á¶ÀÛÀº ±×¸® ÀÚÁÖ ÀÖ´Â ÀÏÀÌ ¾Æ´Ï¹Ç·Î ºü¸¥ ¼Óµµº¸´Ù´Â ÀÛÀº Å©±â¿¡ ÁßÁ¡À» µÎ¾ú´Ù. Load, Save ÇÔ¼ö´Â ´ÜÃàŰ ¹è¿­À» ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇϰųª º¹±¸ÇÑ´Ù.