Àб⠸ðµå¶õ ¼Ò¼³Ã¥À̳ª ±ä °Ô½Ã¹°À» ÀÐÀ» ¶§ ¼öµ¿À¸·Î ½ºÅ©·ÑÇÏÁö ¾Ê¾Æµµ ÁÖ±âÀûÀ¸·Î ½ºÅ©·ÑÇÔÀ¸·Î½á Æí¸®ÇÏ°Ô µ¶¼¸¦ ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â ±â´ÉÀÌ´Ù. ÀÚµ¿ ½ºÅ©·ÑÀ» ÇÏ´Â °Í »Ó¸¸ ¾Æ´Ï¶ó ¹Ì¸® ÁöÁ¤µÈ ±Û²Ã, ÁÙ°£, °³Çà ¸ðµå¸¦ Àû¿ëÇÏ¿© µ¶¼¿¡ °¡Àå Æí¸®ÇÑ ¼³Á¤À¸·Î Çѹø¿¡ º¯È¯Çϱ⵵ ÇÑ´Ù. ÆíÁýÇÒ ¶§¿Í´Â ´Þ¸® ±ä ±ÛÀ» ÀÐÀ» ¶§´Â ±Û²ÃÀ» Á» Å©°Ô Çϰí ÁÙ°£µµ ¿©À¯ÀÖ°Ô ÁÖ´Â °ÍÀÌ ½Ã¿ø½º·´´Ù. ÀÌ ¸ðµå¿¡¼´Â ÀÚµ¿ ½ºÅ©·ÑµÇ´Â ÅØ½ºÆ®¸¦ ¸ÛûÇÏ°Ô ¾É¾Æ¼ Àб⸸ ÇÏ¸é µÈ´Ù.
°³ÀÎÀûÀ¸·Î ÀÌ·± °£Áö·¯¿î ±â´ÉÀ» º°·Î ÁÁ¾ÆÇÏÁö´Â ¾ÊÁö¸¸ ÄÄÇ»ÅÍ·Î ±ÛÀ» ÀÚÁÖ Àд »ç¶÷µéÀº º°µµÀÇ ºä¾î¸¦ »ç¿ëÇÒ Á¤µµ·Î ÀÌ ±â´ÉÀÌ À¯¿ëÇÏ´Ù°í ÇÑ´Ù. ÇÏ±ä ¸Å¹ø µ¶¼¿ë ±Û²Ã·Î º¯°æÇÏ´Â °Íµµ ¹«Ã´ ±ÍÂú°í ¼ÕÀ̳ª ¸¶¿ì½º·Î ½ºÅ©·ÑÇÏ¸é¼ Àд °Íµµ µ¶¼¿¡ ¹æÇذ¡ µÉ °ÍÀÌ´Ù. ¸ÕÀú Àб⠸ðµå¿¡ °ü·ÃµÈ ¿É¼ÇµéÀ» Á¤ÀÇÇϰí ÃʱâÈ ¹× ÀúÀå, º¹±¸ÇÑ´Ù.
struct SOption
{
....
BOOL RmWrap;
LOGFONT Rmlogfont;
int RmLineRatio;
int RmFreq;
int RmLineNum;
int RmManual;
};
void SOption::Init()
{
...
RmWrap=TRUE;
memset(&Rmlogfont,0,sizeof(LOGFONT));
Rmlogfont.lfHeight=20;
lstrcpy(Rmlogfont.lfFaceName,"±¼¸²");
Rmlogfont.lfPitchAndFamily=VARIABLE_PITCH | FF_ROMAN;
Rmlogfont.lfCharSet=HANGEUL_CHARSET;
RmLineRatio=200;
RmFreq=35;
RmLineNum=1;
RmManual=1;
}
void SOption::Load(TCHAR *Key)
{
....
RmWrap=SHRegReadInt(SHCU,szKey,"RmWrap",0);
SHRegReadString(SHCU,szKey,"RmFaceName","",Rmlogfont.lfFaceName,32);
Rmlogfont.lfPitchAndFamily=SHRegReadInt(SHCU,szKey,"RmPitchAndFamily",0);
Rmlogfont.lfCharSet=SHRegReadInt(SHCU,szKey,"RmCharSet",0);
Rmlogfont.lfHeight=SHRegReadInt(SHCU,szKey,"RmFontHeight",0);
RmLineRatio=SHRegReadInt(SHCU,szKey,"RmLineRatio",0);
RmFreq=SHRegReadInt(SHCU,szKey,"RmFreq",0);
RmLineNum=SHRegReadInt(SHCU,szKey,"RmLineNum",0);
RmManual=SHRegReadInt(SHCU,szKey,"RmManual",0);
void SOption::Save(TCHAR *Key)
{
....
SHRegWriteInt(SHCU,szKey,"RmWrap",RmWrap);
SHRegWriteString(SHCU,szKey,"RmFaceName",Rmlogfont.lfFaceName);
SHRegWriteInt(SHCU,szKey,"RmPitchAndFamily",Rmlogfont.lfPitchAndFamily);
SHRegWriteInt(SHCU,szKey,"RmCharSet",Rmlogfont.lfCharSet);
SHRegWriteInt(SHCU,szKey,"RmFontHeight",Rmlogfont.lfHeight);
SHRegWriteInt(SHCU,szKey,"RmLineRatio",RmLineRatio);
SHRegWriteInt(SHCU,szKey,"RmFreq",RmFreq);
SHRegWriteInt(SHCU,szKey,"RmLineNum",RmLineNum);
SHRegWriteInt(SHCU,szKey,"RmManual",RmManual);
Dangeun.cpp¿¡ Àб⠸ðµå¸¦ ½ÃÀÛÇÏ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ´Ù.
void ReadMode()
{
HWND hActive;
SInfo *pSi;
LOGFONT OldFont;
int OldLineRatio;
int OldWrap;
hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);
if (hActive == NULL) {
return;
}
pSi=(SInfo *)GetWindowLong(hActive,0);
// ÀÌÀü ¼³Á¤ ÀúÀå
pSi->Ae.GetFont(&OldFont);
OldLineRatio=pSi->Ae.GetLineRatio();
OldWrap=pSi->Ae.GetWrap();
DialogBox(g_hInst,MAKEINTRESOURCE(IDD_READMODE),g_hFrameWnd,ReadModeProc);
// ¼³Á¤ º¹±¸
pSi->Ae.SetFont(&OldFont);
pSi->Ae.SetLineRatio(OldLineRatio);
pSi->Ae.SetWrap(OldWrap);
}
Ȱ¼ºÃ¢¿¡ ´ëÇØ ÀÌÀü ¼³Á¤À» ¸ÕÀú ÀúÀåÇØ ³õ°í Àб⠸ðµå ´ëÈ»óÀÚ¸¦ ¸ð´Þ·Î ¿¬´Ù. ´ëÈ»óÀÚ°¡ Á¾·áµÇ¸é ÀúÀåÇØ ³õÀº ¿ø·¡ ¼³Á¤À» º¹±¸ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â µµ±¸/Àб⠸ðµå¿¡¼ È£ÃâÇÑ´Ù.
void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
case IDM_TOOL_READMODE:
ReadMode();
break;
Àб⠸ðµå ±â´ÉÀÇ ´ëºÎºÐÀº ¸ð´Þ ´ëÈ»óÀÚ°¡ Á¦°øÇÑ´Ù.
BOOL CALLBACK ReadModeProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HWND hActive;
SInfo *pSi;
static CApiEdit *Ae;
TCHAR szCap[64];
int i,idx,Value;
UDACCEL Accel;
LOGFONT tFont;
HDC hdc;
RECT wrt,drt;
int dx,dy;
switch(iMessage) {
case WM_INITDIALOG:
hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);
pSi=(SInfo *)GetWindowLong(hActive,0);
Ae=&pSi->Ae;
// ÄÁÆ®·ÑÀÇ °ª ÀÐÀ½
if (arFont==NULL) {
DgEnumFonts();
}
SendDlgItemMessage(hDlg,IDC_RMFONT,CB_ADDSTRING,0,(LPARAM)"==½Ã½ºÅÛ==");
for (i=0;i<FontNum;i++) {
SendDlgItemMessage(hDlg,IDC_RMFONT,CB_ADDSTRING,0,(LPARAM)arFont[i].lfFaceName);
}
if (Option.Rmlogfont.lfHeight == 0) {
idx=0;
} else {
idx=SendDlgItemMessage(hDlg,IDC_RMFONT,CB_FINDSTRING,-1,
(LPARAM)Option.Rmlogfont.lfFaceName);
SetDlgItemInt(hDlg,IDC_RMFONTSIZE,Option.Rmlogfont.lfHeight,FALSE);
}
SendDlgItemMessage(hDlg,IDC_RMFONT,CB_SETCURSEL,idx,0);
SetDlgItemInt(hDlg,IDC_RMLINERATIO,Option.RmLineRatio,FALSE);
sprintf(szCap,"ÁÖ±â:%.1fÃÊ",(double)Option.RmFreq/10);
SetDlgItemText(hDlg,IDC_RMFREQ,szCap);
wsprintf(szCap,"ÁÙ¼ö:%d",Option.RmLineNum);
SetDlgItemText(hDlg,IDC_RMLINENUM,szCap);
SetDlgItemInt(hDlg,IDC_RMMANUAL,Option.RmManual,FALSE);
CheckDlgButton(hDlg,IDC_RMWRAP,Option.RmWrap ? BST_CHECKED:BST_UNCHECKED);
SendDlgItemMessage(hDlg,IDC_RMSPINFONTSIZE,UDM_SETRANGE,0,MAKELPARAM(72,8));
SendDlgItemMessage(hDlg,IDC_RMSPINLINERATIO,UDM_SETRANGE,0,MAKELPARAM(500,100));
SendDlgItemMessage(hDlg,IDC_RMSPINMANUAL,UDM_SETRANGE,0,MAKELPARAM(100,1));
Accel.nSec=1;
Accel.nInc=10;
SendDlgItemMessage(hDlg,IDC_RMSPINLINERATIO,UDM_SETACCEL,1,(LPARAM)&Accel);
SendDlgItemMessage(hDlg,IDC_RMSLFREQ,TBM_SETRANGE,FALSE,MAKELPARAM(1,300));
SendDlgItemMessage(hDlg,IDC_RMSLFREQ,TBM_SETPOS,TRUE,Option.RmFreq);
SendDlgItemMessage(hDlg,IDC_RMSLLINENUM,TBM_SETRANGE,FALSE,MAKELPARAM(1,10));
SendDlgItemMessage(hDlg,IDC_RMSLLINENUM,TBM_SETPOS,TRUE,Option.RmLineNum);
// ApiEditÀÇ ¿É¼Ç º¯°æ
SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_RMWRAP,0),0);
SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_RMLINERATIO,EN_CHANGE),0);
SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_RMFONTSIZE,EN_CHANGE),0);
// ´ëÈ»óÀÚÀÇ À§Ä¡ Á¶Á¤
GetWindowRect(GetParent(hDlg),&wrt);
GetWindowRect(hDlg,&drt);
dx=wrt.right;
dy=wrt.bottom-(drt.bottom-drt.top);
if (dx+(drt.right-drt.left) > GetSystemMetrics(SM_CXSCREEN)) {
dx=GetSystemMetrics(SM_CXSCREEN)-(drt.right-drt.left);
}
if (dy+(drt.bottom-drt.top) > GetSystemMetrics(SM_CYSCREEN)) {
dy=GetSystemMetrics(SM_CYSCREEN)-(drt.bottom-drt.top);
}
SetWindowPos(hDlg,HWND_NOTOPMOST,dx,dy,0,0,SWP_NOSIZE);
SetFocus(GetDlgItem(hDlg,IDC_RMAUTOSCROLL));
return FALSE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_RMAUTOSCROLL:
if (IsDlgButtonChecked(hDlg,IDC_RMAUTOSCROLL)==BST_CHECKED) {
Value=SendMessage(GetDlgItem(hDlg,IDC_RMSLFREQ),TBM_GETPOS,0,0);
SetTimer(hDlg,1,Value*100,NULL);
} else {
KillTimer(hDlg,1);
}
return TRUE;
case IDC_RMWRAP:
if (IsDlgButtonChecked(hDlg,IDC_RMWRAP)==BST_CHECKED) {
Ae->SetWrap(Option.nWrap);
Option.RmWrap=TRUE;
} else {
Ae->SetWrap(0);
Option.RmWrap=FALSE;
}
return TRUE;
case IDC_RMFONT:
if (HIWORD(wParam)==CBN_SELCHANGE) {
idx=SendDlgItemMessage(hDlg,IDC_RMFONT,CB_GETCURSEL,0,0);
if (idx==0) {
Option.Rmlogfont.lfHeight=0;
} else {
SendDlgItemMessage(hDlg,IDC_RMFONT,CB_GETLBTEXT,idx,(LPARAM)szCap);
for (i=0;i<FontNum;i++) {
if (lstrcmp(szCap,arFont[i].lfFaceName) == 0)
break;
}
Option.Rmlogfont=arFont[i];
Option.Rmlogfont.lfHeight=GetDlgItemInt(hDlg,IDC_RMFONTSIZE,NULL,FALSE);
}
tFont=Option.Rmlogfont;
hdc=GetDC(NULL);
tFont.lfHeight=tFont.lfHeight*GetDeviceCaps(hdc,LOGPIXELSY)/72;
tFont.lfWidth=0;
ReleaseDC(NULL,hdc);
Ae->SetFont(&tFont);
}
return TRUE;
case IDC_RMFONTSIZE:
if (HIWORD(wParam)==EN_CHANGE) {
Value=GetDlgItemInt(hDlg,IDC_RMFONTSIZE,NULL,FALSE);
if (Value) {
Option.Rmlogfont.lfHeight=Value;
tFont=Option.Rmlogfont;
hdc=GetDC(NULL);
tFont.lfHeight=tFont.lfHeight*GetDeviceCaps(hdc,LOGPIXELSY)/72;
tFont.lfWidth=0;
ReleaseDC(NULL,hdc);
Ae->SetFont(&tFont);
}
}
return TRUE;
case IDC_RMLINERATIO:
if (HIWORD(wParam)==EN_CHANGE) {
Value=GetDlgItemInt(hDlg,IDC_RMLINERATIO,NULL,FALSE);
if (Value) {
Option.RmLineRatio=Value;
Ae->SetLineRatio(Value);
}
}
return TRUE;
case IDC_RMMANUAL:
if (HIWORD(wParam)==EN_CHANGE) {
Value=GetDlgItemInt(hDlg,IDC_RMMANUAL,NULL,FALSE);
if (Value) {
Option.RmManual=Value;
}
}
return TRUE;
case IDC_RMBTNMANUAL:
Value=GetDlgItemInt(hDlg,IDC_RMMANUAL,NULL,FALSE);
Ae->GetActiveView()->Scroll(Value);
return TRUE;
case IDCANCEL:
EndDialog(hDlg,IDCANCEL);
return TRUE;
}
return FALSE;
case WM_TIMER:
Ae->GetActiveView()->Scroll(Option.RmLineNum);
return TRUE;
case WM_HSCROLL:
if ((HWND)lParam == GetDlgItem(hDlg,IDC_RMSLFREQ)) {
Option.RmFreq=SendMessage(GetDlgItem(hDlg,IDC_RMSLFREQ),TBM_GETPOS,0,0);
sprintf(szCap,"ÁÖ±â:%.1fÃÊ",(double)Option.RmFreq/10);
SetDlgItemText(hDlg,IDC_RMFREQ,szCap);
SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_RMAUTOSCROLL,0),0);
}
if ((HWND)lParam == GetDlgItem(hDlg,IDC_RMSLLINENUM)) {
Option.RmLineNum=SendMessage(GetDlgItem(hDlg,IDC_RMSLLINENUM),TBM_GETPOS,0,0);
wsprintf(szCap,"ÁÙ¼ö:%d",Option.RmLineNum);
SetDlgItemText(hDlg,IDC_RMLINENUM,szCap);
}
return TRUE;
}
return FALSE;
}
Àб⠸ðµå ´ëÈ»óÀÚ´Â ¸ÞÀÎ À©µµ¿ìÀÇ ¿ìÃø ¾Æ·¡¿¡ ¿¸®¸ç ¹Ì¸® ¼³Á¤µÈ ¿É¼Ç´ë·Î Ȱ¼ºÃ¢ÀÇ ¼³Á¤À» º¯°æÇÏ¿© Å« ±Û²Ã°ú ³ÐÀº ÁÙ°£À¸·Î ÀüȯÇÑ´Ù. ¶ÇÇÑ ÀÌ ´ëÈ»óÀÚ¿¡¼ ¿É¼ÇÀ» º¯°æÇϸé Ȱ¼ºÃ¢¿¡ Áï½Ã Àû¿ëµÇ¹Ç·Î ±Û²ÃÀ̳ª ÁÙ°£À» Á¶Á¤Çϱ⵵ ½±´Ù. ÀÚµ¿ ½ºÅ©·Ñ ±â´ÉÀº ±¸ÇöÇϱ⠾ÆÁÖ ½¬¿îµ¥ ŸÀ̸Ӹ¦ ¼³Ä¡ÇØ ³õ°í ÀÏÁ¤ÇÑ °£°ÝÀ¸·Î ½ºÅ©·Ñ ¸Þ½ÃÁö¸¸ º¸³»¸é µÈ´Ù. ±ÛÀ» Àд ¼Óµµ°¡ °¡º¯ÀûÀÎ »ç¶÷Àº ÀÚµ¿ ½ºÅ©·Ñ Áß¿¡µµ ¼öµ¿À¸·Î ½ºÅ©·ÑÇÒ ¼öµµ ÀÖ°í ÀÚµ¿ ½ºÅ©·ÑÀ» Àá½Ã ÁßÁöÇÒ ¼öµµ ÀÖ´Ù.
ÀÌ ´ëÈ»óÀÚ´Â ¸ð´ÞÀ̹ǷΠÀб⠸ðµå »óÅ¿¡¼´Â ¸ÞÀÎ À©µµ¿ì¸¦ Á¶ÀÛÇÒ ¼ö ¾ø´Ù. Àб⠸ðµå¸¦ ³¡³»·Á¸é ´ëÈ»óÀÚ¸¦ ´Ý¾Æ¾ß ÇÑ´Ù. ´ëÈ»óÀÚ°¡ Á¾·áµÇ¸é ReadMode ÇÔ¼ö°¡ ÀúÀåÇØ µÎ¾ú´ø ¿ø·¡ ¼³Á¤°ªÀ» º¹±¸ÇÏ¿© ÆíÁý ¸ðµå·Î º¹±¸ÇÑ´Ù. Àб⠸ðµå¿Í °ü·ÃµÈ ¿É¼ÇµéÀº ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÇ±â´Â ÇÏÁö¸¸ ¼³Á¤ ´ëÈ»óÀÚ¿¡´Â Æ÷ÇԵǾî ÀÖÁö ¾Ê´Ù. ´ë½Å Àб⠸ðµå ´ëÈ»óÀÚ¿¡¼ ½Ç½Ã°£À¸·Î ÀÌ ¿É¼ÇÀ» º¯°æÇϸé ÀÌ °ªÀÌ ±×´ë·Î ¿µ±¸ ÀúÀåµÈ´Ù.
»óŶõÀº ÆíÁýÁß¿¡ ´Ã»ó Âü°íÇÒ¸¸ÇÑ À¯¿ëÇÑ Á¤º¸µéÀÌ Ç¥½ÃµÇ¾î ÀÛ¾÷¿¡ ¸¹Àº Æí¸®ÇÔÀ» ÁØ´Ù. ÇÏÁö¸¸ ´ç±ÙÀÇ »óŶõ¿¡ Ç¥½ÃµÇ´Â Á¤º¸´Â ´Ù¾çÇÏÁö ¸øÇÏ¸ç °íÁ¤µÇ¾î ÀÖ¾î »ç¿ëÀÚ°¡ ²À ÇÊ¿ä·Î ÇÏ´Â Á¤º¸¸¦ ¼±ÅÃÀûÀ¸·Î º¸¿©ÁÖÁö´Â ¸øÇÑ´Ù. Ç¥½ÃÇÒ ÇʵåÀÇ ¸ñ·ÏÀ̳ª Ç¥½Ã ¹æ¹ýÀ» º¯°æÇÒ ¼ö ÀÖ´Ù¸é ¿øÇÏ´Â Á¤º¸¸¦ º¸±â ½¬¿î ÇüÅ·ΠÂüÁ¶ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. »óŶõÀÇ ÇÊµå ¸ñ·ÏÀº ÀÏÁ¾ÀÇ ¼³Á¤°ªÀÌ´Ù. Option.h¿¡ ´ÙÀ½ ±¸Á¶Ã¼¸¦ ¼±¾ðÇÏ°í º¯¼ö¸¦ Ãß°¡ÇÑ´Ù.
struct SStMask
{
bool bShow;
BYTE Order;
short Width;
bool bPop;
BYTE Align;
};
#define STNUM 5
#define STMAX 32
struct SOption
{
int GetStNumByOrder(int Order);
....
SStMask StMask[STMAX];
};
SStMask ±¸Á¶Ã¼´Â »óŶõÀÇ Çʵå Çϳª¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áø´Ù.
|
¸â¹ö |
¼³¸í |
|
bShow |
º¸ÀÏ °ÍÀΰ¡ |
|
Order |
ÇʵåÀÇ ¼ø¼°ª. ÀÛÀ»¼ö·Ï ¿ÞÂÊ¿¡ ³ªÅ¸³´Ù. |
|
Width |
ÆÄÆ®ÀÇ Æø |
|
bPop |
ÆÄÆ®ÀÇ ¸ð¾ç. falseÀ̸é À½°¢, trueÀÌ¸é ¾ç°¢ |
|
Align |
¹®ÀÚ¿ Á¤·Ä ¹æ½Ä. 0ÀÌ¸é ¿ÞÂÊ, 1À̸é Áß¾Ó, 2ÀÌ¸é ¿À¸¥ÂÊ |
ÃÖ´ë 32°³ÀÇ Çʵ带 Á¤ÀÇÇÒ ¼ö ÀÖÀ¸¸ç ÇöÀç 5°³ÀÇ Çʵ尡 Á¤ÀǵǾî Àִµ¥ ±âÁ¸ÀÇ ÇÊµå ¸ñ·ÏÀ» ´ÙÀ½°ú °°ÀÌ ÃʱâÈÇÑ´Ù.
SStMask StMaskInit[STNUM]={
{true,0,100,false,0},
{true,1,120,false,0},
{true,2,80,false,0},
{true,3,80,false,0},
{true,4,80,false,0}
};
void SOption::Init()
{
int i;
....
for (i=0;i<STNUM;i++) {
StMask[i]=StMaskInit[i];
}
}
int SOption::GetStNumByOrder(int Order)
{
int i;
for (i=0;i<STNUM;i++) {
if (StMask[i].Order==Order) {
return i;
}
}
return -1;
}
GetStNumByOrder´Â ¼ø¼°ªÀ¸·ÎºÎÅÍ ÇÊµå ¹øÈ£¸¦ ã´Âµ¥ ÀÌ ÇÔ¼ö°¡ Á¶»çÇÑ ÇÊµå ¹øÈ£¸¦ ÷ÀÚ·Î StMask ¹è¿À» ÂüÁ¶Çϸé ÇʵåÀÇ ¼³Á¤ »óŸ¦ ¾Ë ¼ö ÀÖ´Ù. »óŶõÀÇ ÇÊµå ¼³Á¤°ªÀ» »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ¿É¼ÇÀ̹ǷΠ¿µ±¸ÀûÀ¸·Î ÀúÀåÇØ¾ß ÇÑ´Ù.
void SOption::Load(TCHAR *Key)
{
....
lstrcpy(szKey,Key);
lstrcat(szKey,"Status");
for (i=0;i<STNUM;i++) {
wsprintf(szSub,"Show%d",i);
StMask[i].bShow=SHRegReadInt(SHCU,szKey,szSub,0)==1 ? true:false;
wsprintf(szSub,"Order%d",i);
StMask[i].Order=SHRegReadInt(SHCU,szKey,szSub,0);
wsprintf(szSub,"Width%d",i);
StMask[i].Width=SHRegReadInt(SHCU,szKey,szSub,0);
wsprintf(szSub,"Pop%d",i);
StMask[i].bPop=SHRegReadInt(SHCU,szKey,szSub,0)==1 ? true:false;
wsprintf(szSub,"Align%d",i);
StMask[i].Align=SHRegReadInt(SHCU,szKey,szSub,0);
}
}
void SOption::Save(TCHAR *Key)
{
....
lstrcpy(szKey,Key);
lstrcat(szKey,"Status");
for (i=0;i<STNUM;i++) {
wsprintf(szSub,"Show%d",i);
SHRegWriteInt(SHCU,szKey,szSub,StMask[i].bShow);
wsprintf(szSub,"Order%d",i);
SHRegWriteInt(SHCU,szKey,szSub,StMask[i].Order);
wsprintf(szSub,"Width%d",i);
SHRegWriteInt(SHCU,szKey,szSub,StMask[i].Width);
wsprintf(szSub,"Pop%d",i);
SHRegWriteInt(SHCU,szKey,szSub,StMask[i].bPop);
wsprintf(szSub,"Align%d",i);
SHRegWriteInt(SHCU,szKey,szSub,StMask[i].Align);
}
}
¼³Á¤ »óŰ¡ ¸¹±â ¶§¹®¿¡ º°µµÀÇ Å°¿¡ µû·Î ÀúÀåÇÏ¿´´Ù. ÀÌÁ¦ »óŶõÀ» °ü¸®ÇÏ´Â ÇÔ¼öµéÀº Option.StMask ¹è¿¿¡ ±â·ÏµÈ´ë·Î »óŶõÀ» Ãâ·ÂÇÏ°í °ü¸®ÇØ¾ß ÇÑ´Ù. ToolBar.cppÀÇ »óŶõ °ü·Ã ÇÔ¼ö¸¦ ¼öÁ¤ÇÑ´Ù.
void SetStatusPart()
{
int SBPart[STMAX];
RECT crt;
int i,Num,idx;
int TotalWidth;
GetClientRect(g_hFrameWnd,&crt);
crt.right-=GetSystemMetrics(SM_CYVSCROLL);
if (g_ChildNum) {
// º¸ÀÌ´Â ¸ðµç ÆÄÆ®ÀÇ ÆøÀ» ÇÕÇÔ
for (i=0,TotalWidth=0;i<STNUM;i++) {
if (Option.StMask[i].bShow) {
TotalWidth+=Option.StMask[i].Width;
}
}
SBPart[0]=max(200,crt.right-TotalWidth);
for (i=0,Num=0;i<STNUM;i++) {
if (Option.StMask[i].bShow) {
idx=Option.GetStNumByOrder(i);
if (idx != -1) {
Num++;
SBPart[Num]=SBPart[Num-1]+Option.StMask[idx].Width;
}
}
}
SendMessage(hStatus, SB_SETPARTS, Num+1, (LPARAM)SBPart);
} else {
SBPart[0]=crt.right;
SendMessage(hStatus, SB_SETPARTS, 1, (LPARAM)SBPart);
}
}
°¢ ÆÄÆ®´Â StMask¿¡ ±â¾ïµÇ¾î ÀÖ´Â ÀÚ½ÅÀÇ ÆøÀ» »ç¿ëÇϸç 0¹ø ÆøÀº ³ª¸ÓÁö¸¦ ÀüºÎ »ç¿ëÇÑ´Ù. »óŶõÀÇ ¿À¸¥ÂÊ¿¡ ÀÖ´Â »çÀÌ¡ ±×¸³ÀÇ ÆøÀº »óŶõÀÇ Æø¿¡¼ »©¾ß ÇÑ´Ù. ÇʵåÀÇ ¼ø¼°¡ °íÁ¤µÇ¾î ÀÖÁö ¾Ê±â ¶§¹®¿¡ °¢ Çʵ尡 ¾î¶² ÆÄÆ®¿¡ Ãâ·ÂµÉÁö¸¦ ½Ç½Ã°£À¸·Î °è»êÇÑ´Ù. SetStatusText ÇÔ¼ö´Â ¾Æ¿¹ ±¸Á¶°¡ ¿ÏÀüÈ÷ ¹Ù²ï´Ù.
void SetStatusText(int mask,LPCTSTR Mes/*=NULL*/)
{
TCHAR Text[128];
HWND hActive;
SInfo *pSi;
int byte;
TCITEM tie;
int idx;
int i,stidx,partnum;
TCHAR AlignText[128];
hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);
if (hActive==NULL) {
return;
}
pSi=(SInfo *)GetWindowLong(hActive,0);
if (mask & 1) {
if (Mes==NULL) {
SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"´ç±Ù ÆíÁý±âÀÔ´Ï´Ù");
} else {
SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)Mes);
}
}
// 0¹ø »óŶõ. stidx=Á¤º¸ ¹øÈ£, bitmask=mask¿¡¼ ÇØ´ç »óÅÂÀÇ À§Ä¡
for (stidx=0;stidx<STNUM;stidx++) {
if (!(mask & (1 << (stidx+1)) && Option.StMask[stidx].bShow)) {
continue;
}
switch (stidx) {
case 0:
wsprintf(Text, "%dÁÙ %dÄ",pSi->Ae.GetInfoFromOff(AE_INFO_PARA)+1,
pSi->Ae.GetInfoFromOff(AE_INFO_PARACOL)+1);
break;
case 1:
if (pSi->Ae.GetFormat() != AE_FORMAT_BINARY) {
byte=pSi->Ae.GetTextLength();
if (byte < 10240) {
wsprintf(Text, "ÃÑ %dÁÙ %d ¹ÙÀÌÆ®",
pSi->Ae.GetDocInfo(AE_DOC_TOTALPARA)+1,byte);
} else {
wsprintf(Text, "ÃÑ %dÁÙ %d K¹ÙÀÌÆ®",
pSi->Ae.GetDocInfo(AE_DOC_TOTALPARA)+1,byte/1024);
}
} else {
wsprintf(Text, "ÃÑ %dÁÙ",pSi->Ae.GetDocInfo(AE_DOC_TOTALPARA)+1);
}
break;
case 2:
tie.mask=TCIF_IMAGE;
if (pSi->Ae.GetModified()) {
lstrcpy(Text,"ÆíÁýµÇ¾úÀ½");
tie.iImage=1;
} else {
lstrcpy(Text,"¹ÌÆíÁý");
tie.iImage=0;
}
idx=FindFileTab(pSi->NowFile);
if (idx!=-1) {
TabCtrl_SetItem(hFileTab,idx,&tie);
}
break;
case 3:
switch (pSi->Ae.GetFormat()) {
case AE_FORMAT_WIN:
lstrcpy(Text,"WIN Æ÷¸Ë");
break;
case AE_FORMAT_UNIX:
lstrcpy(Text,"UNIX Æ÷¸Ë");
break;
case AE_FORMAT_MAC:
lstrcpy(Text,"MAC Æ÷¸Ë");
break;
case AE_FORMAT_UNICODE:
lstrcpy(Text,"UNICODE");
break;
case AE_FORMAT_UNIBIG:
lstrcpy(Text,"UNICODE(Big Endian)");
break;
case AE_FORMAT_UTF8:
lstrcpy(Text,"UTF-8");
break;
case AE_FORMAT_BINARY:
lstrcpy(Text,"ÀÌÁø ÆÄÀÏ");
break;
}
break;
case 4:
if (pSi->Ae.GetInsMode()) {
lstrcpy(Text,"°ãħ¸ðµå");
} else {
lstrcpy(Text,"»ðÀÔ¸ðµå");
}
break;
}
switch (Option.StMask[stidx].Align) {
case 0:
lstrcpy(AlignText,"");
break;
case 1:
lstrcpy(AlignText,"\t");
break;
case 2:
lstrcpy(AlignText,"\t\t");
break;
}
lstrcat(AlignText,Text);
for (i=0,partnum=1;i<STNUM;i++) {
if (Option.StMask[i].bShow && Option.StMask[stidx].Order > Option.StMask[i].Order)
partnum++;
}
SendMessage(hStatus, SB_SETTEXT, partnum |
(Option.StMask[stidx].bPop ? SBT_POPOUT:0), (LPARAM)AlignText);
}
}
ÇʵåÀÇ °³¼ö³ª ¼ø¼ µîÀÌ ¾î¶»°Ô µÉÁö ÀüÇô ¿¹ÃøÇÒ ¼ö ¾øÀ¸¹Ç·Î ¸ðµç Çʵ忡 ´ëÇØ ·çÇÁ¸¦ µ¹¸é¼ Ç¥½ÃµÇ¾î ÀÖ´Â Çʵ常 Ãâ·ÂÇÑ´Ù. À½°¢, ¾ç°¢ÀÇ ¸ð¾ç°ú Á¤·Ä ¿É¼Çµµ Àû¿ëÇÑ´Ù. ¿©±â±îÁö ÀÛ¾÷ÇÑ ÈÄ ½ÇÇàÇϸé ÀÌÀüÀÇ »óŶõ°ú ¿ÏÀüÈ÷ °°Àº ¸ð¾çÀÇ »óŶõÀÌ º¸ÀÏ °ÍÀÌ´Ù. ÇÏÁö¸¸ Áö±ÝºÎÅÍ´Â ¼³Á¤ ´ëÈ»óÀÚ¸¦ ÅëÇØ »óŶõÀ» ÀÔ¸À´ë·Î ¶â¾î °íÄ¥ ¼ö ÀÖ´Ù. Config.cppÀÇ ´ÙÀ½ ÇÔ¼ö¸¦ ¿ÏÀüÈ÷ ´Ù½Ã ÀÛ¼ºÇÑ´Ù.
BOOL CALLBACK ToolBarDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
static HWND hListSt;
static int oldidx;
LVCOLUMN COL;
LVITEM LI;
int i,idx;
TCHAR szTemp[32];
static TCHAR *arStName[]={"ÇöÀç À§Ä¡","¹®¼ Å©±â","ÆíÁý ¿©ºÎ","ÆÄÀÏ Æ÷¸Ë","»ðÀÔ ¸ðµå"};
TCHAR tName[64],tShow,tCol[4][12];
switch(iMessage) {
case WM_INITDIALOG:
hListSt=GetDlgItem(hDlg,IDC_LISTSTATUS);
COL.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
COL.fmt=LVCFMT_LEFT;
COL.cx=150;
COL.pszText="Á¤º¸";
COL.iSubItem=0;
ListView_InsertColumn(hListSt,0,&COL);
COL.cx=50;
COL.pszText="Æø";
COL.iSubItem=1;
ListView_InsertColumn(hListSt,1,&COL);
COL.cx=60;
COL.pszText="Á¤·Ä";
COL.iSubItem=1;
ListView_InsertColumn(hListSt,2,&COL);
COL.cx=50;
COL.pszText="¸ð¾ç";
COL.iSubItem=3;
ListView_InsertColumn(hListSt,3,&COL);
ListView_SetExtendedListViewStyle(hListSt, LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES);
SendDlgItemMessage(hDlg,IDC_SLIDERSTWIDTH,TBM_SETRANGE,FALSE,MAKELPARAM(40,200));
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_TOOLBARBIG:
case IDC_TOOLBARTEXT:
PropSheet_Changed(GetParent(hDlg),hDlg);
return TRUE;
case IDC_BTNSTUP:
case IDC_BTNSTDOWN:
idx=ListView_GetNextItem(hListSt,-1,LVNI_ALL | LVNI_SELECTED);
if (idx==-1 || (LOWORD(wParam)==IDC_BTNSTDOWN && idx >= STNUM-1) ||
(LOWORD(wParam)==IDC_BTNSTUP && idx == 0)) {
return TRUE;
}
LI.mask=LVIF_TEXT;
LI.iItem=idx;
LI.iSubItem=0;
LI.pszText=tName;
LI.cchTextMax=64;
ListView_GetItem(hListSt,&LI);
tShow=ListView_GetCheckState(hListSt,idx);
for (i=1;i<=3;i++) {
ListView_GetItemText(hListSt,idx,i,tCol[i],16);
}
ListView_DeleteItem(hListSt,idx);
if (LOWORD(wParam)==IDC_BTNSTUP) {
idx--;
} else {
idx++;
}
LI.iItem=idx;
ListView_InsertItem(hListSt,&LI);
ListView_SetItemState(hListSt,idx,INDEXTOSTATEIMAGEMASK(
(tShow)?2:1),LVIS_STATEIMAGEMASK);
for (i=1;i<=3;i++) {
ListView_SetItemText(hListSt,idx,i,tCol[i]);
}
ListView_SetItemState(hListSt,idx,
LVIS_SELECTED | LVIS_FOCUSED,LVIS_SELECTED | LVIS_FOCUSED);
PropSheet_Changed(GetParent(hDlg),hDlg);
return TRUE;
case IDC_RASTLEFT:
idx=ListView_GetNextItem(hListSt,-1,LVNI_ALL | LVNI_SELECTED);
ListView_SetItemText(hListSt,idx,2,"¿ÞÂÊ");
PropSheet_Changed(GetParent(hDlg),hDlg);
return TRUE;
case IDC_RASTCENTER:
idx=ListView_GetNextItem(hListSt,-1,LVNI_ALL | LVNI_SELECTED);
ListView_SetItemText(hListSt,idx,2,"Áß¾Ó");
PropSheet_Changed(GetParent(hDlg),hDlg);
return TRUE;
case IDC_RASTRIGHT:
idx=ListView_GetNextItem(hListSt,-1,LVNI_ALL | LVNI_SELECTED);
ListView_SetItemText(hListSt,idx,2,"¿À¸¥ÂÊ");
PropSheet_Changed(GetParent(hDlg),hDlg);
return TRUE;
case IDC_CHKPOPOUT:
idx=ListView_GetNextItem(hListSt,-1,LVNI_ALL | LVNI_SELECTED);
ListView_SetItemText(hListSt,idx,3,IsDlgButtonChecked(hDlg,IDC_CHKPOPOUT)
? "¾ç°¢":"À½°¢");
PropSheet_Changed(GetParent(hDlg),hDlg);
return TRUE;
}
break;
case WM_HSCROLL:
if ((HWND)lParam == GetDlgItem(hDlg,IDC_SLIDERSTWIDTH)) {
idx=ListView_GetNextItem(hListSt,-1,LVNI_ALL | LVNI_SELECTED);
wsprintf(szTemp,"%d",SendMessage(GetDlgItem(hDlg,IDC_SLIDERSTWIDTH),TBM_GETPOS,0,0));
ListView_SetItemText(hListSt,idx,1,szTemp);
PropSheet_Changed(GetParent(hDlg),hDlg);
}
return TRUE;
case WM_NOTIFY:
LPNMHDR hdr;
LPNMLISTVIEW nlv;
hdr=(LPNMHDR)lParam;
nlv=(LPNMLISTVIEW)lParam;
if (hdr->hwndFrom == hListSt) {
switch (hdr->code) {
case LVN_ITEMCHANGED:
if (nlv->uChanged == LVIF_STATE && nlv->uNewState == (LVIS_SELECTED | LVIS_FOCUSED)) {
oldidx=nlv->iItem;
ListView_GetItemText(hListSt,nlv->iItem,1,szTemp,32);
SendDlgItemMessage(hDlg,IDC_SLIDERSTWIDTH,TBM_SETPOS,TRUE,atoi(szTemp));
ListView_GetItemText(hListSt,nlv->iItem,2,szTemp,32);
if (lstrcmp(szTemp,"¿ÞÂÊ")==0) {
CheckRadioButton(hDlg,IDC_RASTLEFT,IDC_RASTRIGHT,IDC_RASTLEFT);
} else if (lstrcmp(szTemp,"Áß¾Ó")==0) {
CheckRadioButton(hDlg,IDC_RASTLEFT,IDC_RASTRIGHT,IDC_RASTCENTER);
} else {
CheckRadioButton(hDlg,IDC_RASTLEFT,IDC_RASTRIGHT,IDC_RASTRIGHT);
}
ListView_GetItemText(hListSt,nlv->iItem,3,szTemp,32);
CheckDlgButton(hDlg,IDC_CHKPOPOUT,lstrcmp(szTemp,"¾ç°¢")==0);
}
// üũ ¹Ú½º Ŭ¸¯½Ã. ÄÚµå º¯°æ½Ã´Â ¸·¾Æ¾ß ÇÔ
if (nlv->uChanged == LVIF_STATE && (nlv->uNewState & LVIS_STATEIMAGEMASK) !=
(nlv->uOldState & LVIS_STATEIMAGEMASK)) {
if (!bEditByCode) {
PropSheet_Changed(GetParent(hDlg),hDlg);
}
}
break;
}
return TRUE;
}
switch (hdr->code) {
case PSN_SETACTIVE:
g_StartPage=3;
CheckDlgButton(hDlg,IDC_TOOLBARBIG,NewOption.bToolBarBig);
CheckDlgButton(hDlg,IDC_TOOLBARTEXT,NewOption.bToolBarText);
ListView_DeleteAllItems(hListSt);
bEditByCode=TRUE;
for (i=0;i<STNUM;i++) {
idx=NewOption.GetStNumByOrder(i);
LI.mask=LVIF_TEXT;
LI.iItem=i;
LI.iSubItem=0;
LI.pszText=arStName[idx];
ListView_InsertItem(hListSt,&LI);
ListView_SetItemState(hListSt,i,INDEXTOSTATEIMAGEMASK(
(NewOption.StMask[idx].bShow)?2:1),LVIS_STATEIMAGEMASK);
wsprintf(szTemp,"%d",NewOption.StMask[idx].Width);
ListView_SetItemText(hListSt,i,1,szTemp);
switch (NewOption.StMask[idx].Align) {
case 0:
lstrcpy(szTemp,"¿ÞÂÊ");
break;
case 1:
lstrcpy(szTemp,"Áß¾Ó");
break;
case 2:
lstrcpy(szTemp,"¿À¸¥ÂÊ");
break;
}
ListView_SetItemText(hListSt,i,2,szTemp);
if (NewOption.StMask[idx].bPop) {
ListView_SetItemText(hListSt,i,3,"¾ç°¢");
} else {
ListView_SetItemText(hListSt,i,3,"À½°¢");
}
// ¸¶Áö¸· ¼±ÅÃÇß´ø Ç׸ñÀ» ´Ù½Ã ¼±ÅÃÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é Àû¿ë½Ã Ç×»ó ù Ç׸ñÀÌ ¼±ÅÃµÇ¾î ºÒÆíÇÏ´Ù.
ListView_SetItemState(hListSt,oldidx,
LVIS_SELECTED | LVIS_FOCUSED,LVIS_SELECTED | LVIS_FOCUSED);
ListView_EnsureVisible(hListSt,oldidx,FALSE);
}
bEditByCode=FALSE;
return TRUE;
case PSN_APPLY:
ApplyNow();
return TRUE;
case PSN_KILLACTIVE:
NewOption.bToolBarBig=IsDlgButtonChecked(hDlg,IDC_TOOLBARBIG);
NewOption.bToolBarText=IsDlgButtonChecked(hDlg,IDC_TOOLBARTEXT);
for (i=0;i<STNUM;i++) {
ListView_GetItemText(hListSt,i,0,szTemp,32);
for (idx=0;idx<STNUM;idx++) {
if (lstrcmp(szTemp,arStName[idx])==0)
break;
}
NewOption.StMask[idx].bShow=(ListView_GetCheckState(hListSt,i) ? true:false);
NewOption.StMask[idx].Order=i;
ListView_GetItemText(hListSt,i,1,szTemp,32);
NewOption.StMask[idx].Width=atoi(szTemp);
ListView_GetItemText(hListSt,i,2,szTemp,32);
if (lstrcmp(szTemp,"¿ÞÂÊ")==0) {
NewOption.StMask[idx].Align=0;
} else if (lstrcmp(szTemp,"Áß¾Ó")==0) {
NewOption.StMask[idx].Align=1;
} else {
NewOption.StMask[idx].Align=2;
}
ListView_GetItemText(hListSt,i,3,szTemp,32);
NewOption.StMask[idx].bPop=(lstrcmp(szTemp,"¾ç°¢")==0);
}
return TRUE;
}
break;
}
return FALSE;
}
ÀÌ ´ëÈ»óÀÚ¸¦ ÅëÇØ ÇöÀç »óŶõÀÇ ±¸Á¶¸¦ º¸¿© ÁÖ°í ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. Äڵ尡 ±²ÀåÈ÷ ±æ±â´Â Çѵ¥ StMask ¹è¿ÀÇ ¿©·¯ ¸â¹ö°ªÀ» Á¶ÀÛÇÏ´Â ÀϹÝÀûÀÎ ÄÚµåÀ̹ǷΠµû·Î ºÐ¼®ÀÌ ÇÊ¿äÇÑ Á¤µµ´Â ¾Æ´Ï´Ù. ApplyNow¿¡ Àû¿ë Äڵ带 ÀÛ¼ºÇÑ´Ù.
void ApplyNow()
{
BOOL bChangeStatus=FALSE;
....
if (memcmp(Option.StMask,NewOption.StMask,sizeof(SStMask)*STMAX)!=0) {
bChangeStatus=TRUE;
}
....
Option=NewOption;
if (bRelayout) {
Relayout();
}
if (bChangeStatus) {
SetStatusPart();
SetStatusText(0xffff);
}
}
»óŶõÀÇ Á¤º¸´Â °Å´ëÇÑ ±¸Á¶Ã¼ ¹è¿·Î °ü¸®µÇ´Âµ¥ ¸ðµç ¸â¹öÀÇ º¯°æ ¿©ºÎ¸¦ ÀÏÀÏÀÌ Á¡°ËÇÏ´Â °ÍÀº ³Ê¹« ºñÈ¿À²ÀûÀÌ´Ù. ±×·¡¼ StMask ¹è¿ Àüü¸¦ ¸Þ¸ð¸® ºñ±³ÇÏ¿© Á¶±ÝÀÌ¶óµµ º¯°æµÇ¾úÀ¸¸é »óŶõÀ» ¿ÏÀüÈ÷ ´Ù½Ã °»½ÅÇÑ´Ù. ÀÌÁ¦ ÀÌ ´ëÈ»óÀÚ¸¦ ÅëÇØ Ç¥½ÃÇÒ Çʵ带 ¼±ÅÃÇϰųª ¼ø¼¸¦ ¹Ù²Ü ¼öµµ ÀÖ°í °¢ ÇʵåÀÇ Æø, Á¤·Ä ¹æ½ÄÀ» ¿øÇϴ´ë·Î ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·± ±¸Á¶¸¦ ¸¸µé¾úÀ¸¸é »óŸ¦ Çʵ带 ´Ã¸®´Â °Íµµ ¾ÆÁÖ ½±´Ù. StMask ¹è¿¿¡ Çʵ带 ´õ Ãß°¡Çϱ⸸ ÇÏ¸é µÈ´Ù.
|
Çʵå |
¼³¸í |
|
´ë¼Ò¹®ÀÚ ÀÔ·Â ¸ðµå |
Caps Lock ŰÀÇ »óÅ |
|
ÇÑ±Û ÀÔ·Â ¸ðµå |
ÇÑ±Û ¶Ç´Â ¿µ¹® |
|
¹®ÀÚ ÄÚµå |
ij·µ À§Ä¡ÀÇ ¹®ÀÚ ÄÚµå |
|
¼±Åÿµ¿ª Á¤º¸ |
¼±Åà ¿µ¿ªÀÇ ±æÀÌ |
|
Ŭ¸³º¸µåÀÇ ³»¿ë |
Æ÷¸Ë ¹× ³»¿ë |
|
Àбâ Àü¿ë ¿©ºÎ |
Àбâ Àü¿ë ¿©ºÎ |
|
ÇöÀç ½Ã°£ |
ÇöÀç ½Ã°£. n½Ã:nºÐ Æ÷¸ËÀ¸·Î º¸¿© ÁÖ¸ç ÃÊ´Â »ý·«ÇÑ´Ù. |
|
ÇöÀç ³¯Â¥ |
ÇöÀç ³¯Â¥. n¿ù-nÀÏ(¿äÀÏ) Æ÷¸Ë |
ÆíÁý¿¡ µµ¿òÀÌ µÉ¸¸ÇÑ Á¤º¸µéÀ» ´õ Ãß°¡ÇØ º¸¾Ò´Ù. Option.hÀÇ ÇÊµå °³¼ö¸¦ 13°³·Î ´Ã¸°´Ù.
#define STNUM 13
Option.cppÀÇ StMaskInit ±¸Á¶Ã¼ÀÇ ÃʱⰪµµ À§ µµÇ¥´ë·Î Ãß°¡ ÀÛ¼ºÇß´Ù.
SStMask StMaskInit[STNUM]={
{true,0,100,false,0},
{true,1,120,false,0},
{true,2,80,false,0},
{true,3,80,false,0},
{true,4,80,false,0},
{false,5,50,false,0},
{false,6,40,false,0},
{false,7,80,false,0},
{false,8,80,false,0},
{false,9,120,false,0},
{false,10,65,false,0},
{false,11,70,false,0},
{false,12,90,false,0}
};
Ãß°¡µÈ Çʵå´Â ÀÏ´Ü ¸ðµÎ ¼û°Ü ³õ¾Ò´Âµ¥ ÇÊ¿äÇϸé Ç¥½ÃÇÒ ¼ö ÀÖ´Ù. ³Ê¹« ¸¹Àº Á¤º¸¸¦ ÇѲ¨¹ø¿¡ º¸¿©ÁÖ´Â °Íº¸´Ù´Â ´çÀå ²À ÇÊ¿äÇÑ ¿É¼Ç¸¸ °£°áÇÏ°Ô Ç¥½ÃÇÏ´Â °ÍÀÌ ´õ ±ò²ûÇÏ´Ù. ¼³Á¤ ´ëÈ»óÀÚ¿¡´Â Çʵå À̸§¸¸ ´Ã¸®¸é µÈ´Ù.
BOOL CALLBACK ToolBarDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
....
static TCHAR *arStName[]={"ÇöÀç À§Ä¡","¹®¼ Å©±â","ÆíÁý ¿©ºÎ","ÆÄÀÏ Æ÷¸Ë","»ðÀÔ ¸ðµå",
"´ë¼Ò¹®ÀÚ ÀÔ·Â ¸ðµå","ÇÑ±Û ÀÔ·Â ¸ðµå","¹®ÀÚ ÄÚµå","¼±Åÿµ¿ª Á¤º¸","Ŭ¸³º¸µåÀÇ ³»¿ë","Àбâ Àü¿ë ¿©ºÎ",
"ÇöÀç ½Ã°£","ÇöÀç ³¯Â¥"};
´ÙÀ½Àº Ãß°¡µÈ ÇʵåÀÇ Á¤º¸¸¦ Á¶»çÇÏ´Â Äڵ带 ÀÛ¼ºÇÑ´Ù. ÇÑ±Û ÀÔ·Â ¸ðµå Á¶»ç¸¦ À§ÇØ Util.cpp¿¡ ´ÙÀ½ ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.
BOOL MyGetImeMode(HWND hEdit)
{
HIMC hImc;
DWORD Con, Sen;
hImc=ImmGetContext(hEdit);
ImmGetConversionStatus(hImc,&Con,&Sen);
ImmReleaseContext(hEdit,hImc );
if (Con & IME_CMODE_NATIVE) {
return TRUE;
} else {
return FALSE;
}
}
SetStatusText¿¡ case¸¦ ´Ã·Á »õ·Î Á¤ÀÇÇÑ ÇʵåÀÇ Á¤º¸¸¦ »óŶõ¿¡ Ãâ·ÂÇÑ´Ù.
void SetStatusText(int mask,LPCTSTR Mes/*=NULL*/)
{
....
SYSTEMTIME st;
static TCHAR *arYoil[]={"ÀÏ","¿ù","È","¼ö","¸ñ","±Ý","Åä","ÀÏ"};
int s,e;
HGLOBAL hmem;
TCHAR *ptr;
....
for (stidx=0;stidx<STNUM;stidx++) {
if (!(mask & (1 << (stidx+1)) && Option.StMask[stidx].bShow)) {
continue;
}
switch (stidx) {
....
case 5:
if ((GetKeyState(VK_CAPITAL) & 0x1) != 0) {
lstrcpy(Text,"´ë¹®ÀÚ");
} else {
lstrcpy(Text,"¼Ò¹®ÀÚ");
}
break;
case 6:
if (MyGetImeMode(pSi->Ae.hWnd)) {
lstrcpy(Text,"ÇѱÛ");
} else {
lstrcpy(Text,"¿µ¹®");
}
break;
case 7:
s=pSi->Ae.GetOffset();
pSi->Ae.GetText(AlignText,10,s,s+2);
if (IsDBCSLeadByte(AlignText[0])) {
e=*(WORD *)AlignText;
} else {
e=*(BYTE *)AlignText;
}
wsprintf(Text,"%d(%x)",e,e);
break;
case 8:
pSi->Ae.GetSelect(s,e);
if (s==e) {
lstrcpy(Text,"¼±ÅþøÀ½");
} else {
wsprintf(Text,"±æÀÌ:%d",e-s);
}
break;
case 9:
if (IsClipboardFormatAvailable(CF_TEXT)) {
OpenClipboard(g_hFrameWnd);
hmem=GetClipboardData(CF_TEXT);
ptr=(TCHAR *)GlobalLock(hmem);
lstrcpyn(Text,ptr,64);
ReplaceCtrlString(Text,lstrlen(Text),NULL,0);
GlobalUnlock(hmem);
CloseClipboard();
} else {
lstrcpy(Text,"ºñ¾îÀÖÀ½");
}
break;
case 10:
if (pSi->Ae.GetReadOnly()) {
lstrcpy(Text,"ÀбâÀü¿ë");
} else {
lstrcpy(Text,"¾²±â°¡´É");
}
break;
case 11:
GetLocalTime(&st);
wsprintf(Text,"%d½Ã %dºÐ",st.wHour,st.wMinute);
break;
case 12:
GetLocalTime(&st);
wsprintf(Text,"%d¿ù %dÀÏ(%s)",st.wMonth,st.wDay, arYoil[st.wDayOfWeek]);
break;
}
Űº¸µå »óųª Ŭ¸³º¸µå »óÅ´ Áï½Ã Á¶»çÇÒ ¼ö ÀÖÀ¸¹Ç·Î Á¶»çµÈ °á°ú¸¦ ¹®ÀÚ¿·Î º¯°æÇÏ¿© Çʵ忡 Ãâ·ÂÇÑ´Ù. ÀϺΠÇʵå´Â ÁÖ±âÀûÀ¸·Î °»½ÅµÇ¾î¾ß ÇÑ´Ù. ¹®ÀÚ ÄÚµå¿Í ¼±Åÿµ¿ª Á¤º¸´Â ij·µÀÌ ¿òÁúÀÏ ¶§ÀÎ AEN_MOVE¿¡¼ °°ÀÌ °»½ÅÇÑ´Ù.
LRESULT CALLBACK DGChildProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
....
case WM_COMMAND:
switch (LOWORD(wParam)) {
case 1:
switch (HIWORD(wParam)) {
case AEN_MOVE:
SetStatusText(0x302);
break;
SetStatusTextÀÇ ¿ø·¡ Àμö´Â ÇöÀç ij·µ À§Ä¡¸¦ ÀǹÌÇÏ´Â 0x2¿´´Ù. ¹®ÀÚ ÄÚµå´Â 7¹ø Çʵå, ¼±Åÿµ¿ª Á¤º¸´Â 8¹ø Çʵå, ±×·¡¼ ´ëÀÀµÇ´Â ¸¶½ºÅ©°ªÀº 1 << (7+1), 1 << (8+1)ÀÌ µÇ¸ç ÀÌ µÎ °ª°ú ±âÁ¸ÀÇ 0x2¸¦ ORÇϸé 0x302°¡ µÈ´Ù. ÇÑ±Û ÀÔ·Â ¸ðµå, ´ë¼Ò¹®ÀÚ, Ŭ¸³º¸µå »óÅÂ, Àбâ Àü¿ëÀº ¾ðÁ¦µçÁî º¯°æµÉ ¼ö ÀÖÀ¸¹Ç·Î OnIdle¿¡¼ ÁÖ±âÀûÀ¸·Î °»½ÅÇÑ´Ù.
void OnIdle()
{
....
if (hActive) {
....
SetStatusText(0xcc0);
} else {
....
½Ã°£°ú ³¯Â¥´Â ÁÖ±âÀûÀ¸·Î ¹Ù²î¹Ç·Î OnTimer¿¡¼ °»½ÅÇÑ´Ù. 3ÃÊ °£°ÝÀÇ Å¸À̸Ӹ¦ ¼³Ä¡Çϰí ÀÌ Å¸À̸ӿ¡¼ »óŶõÀ» °»½ÅÇÏ¸é µÈ´Ù.
int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
SetTimer(hWnd,100,1,NULL);
SetTimer(hWnd,3,3000,NULL);
return 0;
}
void OnTimer(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
switch (wParam) {
....
case 3:
SetStatusText(0x3000);
break;
½Ã°£Àº ÃÊ´ÜÀ§·Î ¹Ù²îÁö¸¸ »óŶõÀÇ ½Ã°£ Á¤º¸°¡ ÃÊ´ÜÀ§±îÁö Á¤È®ÇÒ ÇÊ¿ä´Â ¾ø°í ¾îÂ÷ÇÇ ºÐ´ÜÀ§±îÁö¸¸ Ç¥½ÃµÇ¹Ç·Î ´ëÃæ Àû´çÇÑ ½Ã°£ °£°ÝÀ» ¼³Á¤Çß´Ù. »óŶõ ¼³Á¤ ´ëÈ»óÀÚÀÇ ½ÇÇà ¸ð½ÀÀº ´ÙÀ½°ú °°´Ù.

¸®½ºÆ® ºäÀÇ Ã¼Å© ¹Ú½º·Î Ç¥½ÃÇÒ ¸ñ·ÏÀ» ¼±ÅÃÇÏ°í ¿À¸¥ÂÊÀÇ ÄÁÆ®·Ñ·Î ÇʵåÀÇ ¼ø¼¿Í Æø, Á¤·Ä»óÅÂ, Àå½ÄÀ» ¼±ÅÃÇÑ´Ù. ³»ºÎ ±¸Á¶´Â º¹ÀâÇÏÁö¸¸ »ç¿ëÀÚ°¡ ÀÌ ¿É¼ÇÀ» Á¶Á¤Çϱâ´Â ¾î·ÆÁö ¾ÊÀ» °ÍÀÌ´Ù. ´ÙÀ½Àº ¸ðµç »óŶõÀ» ´Ù Ãâ·ÂÇØ º» °ÍÀÌ´Ù.

Ç¥½ÃÇÒ Á¤º¸°¡ ¿ö³« ¸¹±â ¶§¹®¿¡ À©µµ¿ì Å©±â¸¦ ÃæºÐÈ÷ Å©°Ô ÇØ¾ß ¸ðµç Á¤º¸¸¦ ´Ù º¼ ¼ö ÀÖ´Ù. ¹°·Ð ÀÌ·¸°Ô ¸¹Àº Á¤º¸¸¦ ÇѲ¨¹ø¿¡ ´Ù Ç¥½ÃÇØ ³õ°í »ç¿ëÇÒ »ç¶÷Àº ¸¹Áö ¾ÊÀ» °ÍÀÌ´Ù. ²À ÇÊ¿äÇÑ Á¤º¸¸¸ ¿øÇÏ´Â ÇüÅ·Πǥ½ÃÇÏ´Â °ÍÀÌ È¿À²ÀûÀÌ´Ù.
ÄÁÆ®·ÑÀÇ ÆË¾÷ ¸Þ´º´Â ¾ðÁ¦µçÁö ¸¶¿ì½º ¿À¸¥ÂÊ ¹öư¸¸ ´©¸£¸é ³ªÅ¸³ª¹Ç·Î »ç¿ëÀÚ°¡ °¡Àå Á¢±ÙÇϱ⠽¬¿î ÀåÄ¡ÀÌ´Ù. ÇöÀç Ŭ¸³º¸µå °ü·Ã ¸í·É¸¸ µé¾îÀÖ°í ¹®¼¸¦ °ü¸®Çϰųª ÄÁÆ®·Ñ ÀÚü¸¦ °ü¸®ÇÏ´Â ¸í·ÉÀº µé¾î ÀÖÁö ¾Ê´Ù. ¿Ö³ÄÇÏ¸é ÆË¾÷ ¸Þ´ºÀÇ ¸í·ÉÀ» ó¸®ÇÏ´Â ÄÁÆ®·ÑÀÌ ½º½º·Î¸¦ Á¦¾îÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ½ÇÁ¦·Î´Â ÀÌ·± ¸í·ÉµéÀÌ ÄÁÆ®·ÑÀÇ ÆË¾÷ ¸Þ´º¿¡ µé¾î °¥ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¹®Á¦´Â ÄÁÆ®·ÑÀº È£½ºÆ®¿Í´Â ¿ÏÀüÈ÷ µ¶¸³ÀûÀ̶ó´Â Á¡ÀÌ´Ù.
È£½ºÆ®ÀÇ ¸Þ´º Ç׸ñµµ ÄÁÆ®·Ñ¿¡ Ãß°¡ÇÒ ¼ö ÀÖµµ·Ï ÇØ º¸ÀÚ. ÄÁÆ®·ÑÀÌ ÆË¾÷ ¸Þ´º¸¦ Ãâ·ÂÇÒ ¶§ È£½ºÆ®¿¡°Ô ÆË¾÷ ¸Þ´º¿¡ ´ëÇÑ Á¦¾î±ÇÀ» Àá½Ã ¾çº¸ÇÏ¿© È£½ºÆ®°¡ ¿©ºÐÀÇ ¸Þ´º Ç׸ñÀ» ´õ Ãß°¡ÇÒ ¼ö ÀÖµµ·Ï Çϰí ÀÌ ¸Þ´º°¡ ¼±ÅõǸé È£½ºÆ®¿¡°Ô ½ÅÈ£¸¸ º¸³»¸é µÈ´Ù.
void CApiEditText::OnContextMenu(HWND hWnd, HWND hwndContext, UINT xPos, UINT yPos)
{
....
AppendMenu(hPopup,MF_STRING,IDM_AE_PASTE,"ºÙ¿©³Ö±â(&P)");
AppendMenu(hPopup,MF_STRING,IDM_AE_SELALL,"¸ðµÎ¼±ÅÃ(&A)");
SendMessage(GetParent(pFrame->hWnd),pFrame->UserBase+4,(WPARAM)hPopup,0);
....
ÀÚ½ÅÀÇ ¸Þ´º Ç׸ñÀ» ¸ÕÀú Ãß°¡ÇÑ ÈÄ È£½ºÆ®¿¡°Ô UserBase+4 ¸Þ½ÃÁö¸¦ º¸³» À©µµ¿ì ÇÚµéÀ» ³Ñ±ä´Ù. È£½ºÆ®°¡ ÀÌ ¸Þ½ÃÁö¿¡ ¹ÝÀÀÇÏÁö ¾ÊÀ¸¸é ¾Æ¹« Àϵµ ÀϾÁö ¾Ê´Â´Ù. ¸Þ½ÃÁö´Â ó¸®ÇÏÁö ¾Ê´õ¶óµµ µðÆúÆ® 󸮵ȴٴ Á¡¿¡¼ ÇÔ¼öº¸´Ù À¯¿¬ÇÑ´Ù. È£½ºÆ®´Â ÀÌ ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ hPopup¿¡ ´Ù¸¥ Ç׸ñÀ» Ãß°¡ÇÒ ±âȸ¸¦ °¡Áø´Ù. ÀÌ·¸°Ô Ãß°¡µÈ Ç׸ñÀÌ ¼±ÅÃµÇ¸é ´Ù½Ã È£½ºÆ®¿¡°Ô ½ÅÈ£¸¦ º¸³½´Ù.
void CApiEditText::OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch (id) {
....
default:
SendMessage(GetParent(pFrame->hWnd),pFrame->UserBase+5,id,0);
return;
}
}
UserBase+5 ¸Þ½ÃÁö¸¦ º¸³» ¼±ÅÃµÈ Ç׸ñÀÇ ID¸¸ ¾Ë·Á ÁÖ¸é ÀÌ Ç׸ñ¿¡ ´ëÇÑ Ã³¸®´Â È£½ºÆ®°¡ ¾Ë¾Æ¼ ÇÒ °ÍÀÌ´Ù. ´ç±ÙÀÇ °æ¿ì º°·Î Ãß°¡ÇÒ¸¸ÇÑ ¸Þ´º ¸í·ÉÀº ¾ø´Ù. ´Ý±â ¸í·É¸¸ Ãß°¡ÇØ º¸ÀÚ.
LRESULT CALLBACK DGChildProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
....
pSi=(SInfo *)GetWindowLongPtr(hWnd,0);
if (pSi && iMessage > WM_USER) {
....
if (iMessage == pSi->Ae.GetUserBase()+4) {
AppendMenu((HMENU)wParam,MF_SEPARATOR,0,NULL);
AppendMenu((HMENU)wParam,MF_STRING,0,"´Ý±â(&Q)");
return 0;
}
if (iMessage == pSi->Ae.GetUserBase()+5) {
switch (wParam) {
case 0:
PostMessage(hWnd,WM_CLOSE,0,0);
break;
}
}
UserBase+4 ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ±¸ºÐ¼± Çϳª¸¦ Ãß°¡ÇÏ°í ±× ¾Æ·¡¿¡ ¸Þ´º Ç׸ñÀ» ´õ µî·ÏÇÑ´Ù. À̶§ ÁÖ¾îÁö´Â ID´Â ÀÚ½ÅÀÌ ±¸ºÐ¸¸ ÇÒ ¼ö ÀÖÀ¸¸é µÇ¹Ç·Î 0¹øºÎÅÍ ¼ø¼´ë·Î ÁÖ¸é µÈ´Ù. ÄÁÆ®·ÑÀÇ IDM_AE_*¿Í¸¸ Áߺ¹µÇÁö ¾ÊÀ¸¸é ¾î¶² ID¶óµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸Þ´ºÀÇ ÇÚµéÀÌ wParamÀ¸·Î Àü´ÞµÇ¾úÀ¸¹Ç·Î ÀÌ ¸Þ´º´Â ¸¶À½´ë·Î ¶â¾î °íÄ¥ ¼ö ÀÖ´Ù. Ãß°¡ÇÒ ¸í·ÉµéÀÌ ¾ÆÁÖ ¸¹´Ù¸é ¼ºê ¸Þ´º¸¦ ´Ù´Â °Íµµ °¡´ÉÇÏ´Ù.
¸Þ´º°¡ ¼±ÅõǸé UserBase+5 ¸Þ½ÃÁö¸¦ ¹Þ´Âµ¥ À̶§ ÀÚ½ÅÀÌ µî·ÏÇÑ ¸Þ´º Ç׸ñÀÇ ID¿¡ ¹Ì¸® Á¤ÀÇµÈ µ¿ÀÛÀ» ÇÏ¸é µÈ´Ù. 0¹ø Ç׸ñÀº ´Ý±âÀ̹ǷΠÇöÀç ÆíÁýâÀ» ´Ý¾Ò´Ù. À̶§ DestroyWindow µîÀÇ ¸í·ÉÀ¸·Î ¹«Á¶°Ç ÆÄ±«Çؼ´Â ¾ÈµÇ¸ç WM_CLOSE ¸Þ½ÃÁö¸¦ º¸³» ¹ÌÀúÀå ¹®¼ È®ÀÎ ±âȸ¸¦ ÁÖ¾î¾ß ÇÑ´Ù. ¹®¼¸¦ ÀúÀåÇØ¾ß ÇÑ´Ù¸é Ȱ¼ºÃ¢¿¡°Ô ÀúÀå ¸í·ÉÀ» ³»¸± ¼öµµ ÀÖ°í ¿É¼ÇÀ» º¯°æÇÏ´Â °Íµµ ¹°·Ð °¡´ÉÇÏ´Ù.