´ÙÀ½Àº ÀúÀåµÈ ¹®¼¸¦ Àоî¿À´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇØ º¸ÀÚ. ÀúÀå°ú´Â ´Þ¸® ¸Å¹ø ÆÄÀÏ À̸§À» ÀÔ·Â¹Þ¾Æ¾ß ÇϹǷΠÇÑ ÇÔ¼ö¿¡¼ ¸ðµç µ¿ÀÛÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù. ÆÄÀÏÀ» ¿©´Â ¹æ¹ýÀÌ ´Ù¾çÇÏ´Ù¸é, ¿¹¸¦ µé¾î µå·¡±× & µå·ÓÀ̳ª MRU µîÀÇ ±â´ÉÀÌ Á¦°øµÈ´Ù¸é ÆÄÀϸíÀ» ¾ò´Â ÇÔ¼ö, ÆÄÀÏÀ» Àд ÇÔ¼ö¸¦ µû·Î ¸¸µé¾î¾ß ÇÑ´Ù.
void Open()
{
FileHeader Header;
OPENFILENAME OFN;
TCHAR lpstrFile[MAX_PATH]="";
HANDLE hFile;
DWORD dwRead;
int idx;
if (ConfirmSave() == IDCANCEL) {
return;
}
memset(&OFN, 0, sizeof(OPENFILENAME));
OFN.lStructSize = sizeof(OPENFILENAME);
OFN.hwndOwner=hWndMain;
OFN.lpstrFilter="ApiDrawFile(*.adr)\0*.adr\0Every File(*.*)\0*.*\0";
OFN.lpstrFile=lpstrFile;
OFN.nMaxFile=256;
OFN.lpstrDefExt="adr";
if (GetOpenFileName(&OFN)==FALSE) {
return;
}
hFile=CreateFile(OFN.lpstrFile,GENERIC_READ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE) {
MessageBox(hWndMain,"ÆÄÀÏÀ» ¿ ¼ö ¾ø½À´Ï´Ù.","¿¡·¯",MB_OK);
return;
}
ReadFile(hFile,&Header,sizeof(Header),&dwRead,NULL);
if (strcmp(Header.szHeader,"ApiDraw File") != 0) {
MessageBox(hWndMain,"ApiDraw ÆÄÀÏÀÌ ¾Æ´Õ´Ï´Ù.","¿¡·¯",MB_OK);
CloseHandle(hFile);
return;
}
if (Header.version != 100) {
MessageBox(hWndMain,"¹öÀüÀÌ 1.0ÀÌ ¾Æ´Õ´Ï´Ù.","¿¡·¯",MB_OK);
CloseHandle(hFile);
return;
}
FreeDoc();
InitDoc();
arNum=Header.arNum;
if (arNum >= arSize) {
arSize=arNum+arGrowBy;
arObj=(DObject **)realloc(arObj,sizeof(DObject *)*arSize);
}
for (idx=0;idx<arNum;idx++) {
arObj[idx]=(DObject *)malloc(sizeof(DObject));
ReadFile(hFile,arObj[idx],sizeof(DObject),&dwRead,NULL);
if (arObj[idx]->Type >= DT_TEXT && arObj[idx]->Type <= DT_META) {
arObj[idx]->Text=(TCHAR *)malloc(arObj[idx]->Len);
ReadFile(hFile,arObj[idx]->Text,arObj[idx]->Len,&dwRead,NULL);
}
}
CloseHandle(hFile);
InvalidateRect(hWndMain,NULL,TRUE);
ChangeCaption(OFN.lpstrFile);
}
ÆÄÀÏÀ» ¿±â Àü¿¡ ¸ÕÀú ConfirmSave¸¦ È£ÃâÇÏ¿© ÆíÁýÇÏ´ø ÆÄÀϺÎÅÍ Ã³¸®ÇÑ´Ù. ÀÌ ÇÔ¼ö È£Ãâ¿¡ ÀÇÇØ »ç¿ëÀÚ´Â ¹ÌÀúÀå ¹®¼¸¦ ÀúÀåÇϰųª ¹ö¸± °ÍÀÌ¸ç ¸¸¾à Ãë¼Ò¸¦ ¼±ÅÃÇÏ¸é ÆÄÀÏ ¿±â µ¿ÀÛµµ Ãë¼ÒÇØ¾ß ÇÑ´Ù. ¹ÌÀúÀå ¹®¼¸¦ ó¸®ÇßÀ¸¸é ÆÄÀÏ ¿±â °øÅë ´ëÈ»óÀÚ·Î ÀÐÀ» ÆÄÀϸíÀ» ÀÔ·Â¹Þ°í ÆÄÀÏÀ» ÀÐÀ» Áغñ¸¦ ÇÑ´Ù. ÀÌ °úÁ¤¿¡¼ ´Ù¼öÀÇ ¿¡·¯ 󸮹®ÀÌ µé¾î°¡´Âµ¥ »ç¿ëÀÚ°¡ ÆÄÀÏ ¿±â ´ëÈ»óÀÚ¿¡¼ Ãë¼Ò¸¦ Ç߰ųª ÁöÁ¤ÇÑ ÆÄÀÏÀ» ¿ ¼ö ¾øÀ» ¶§´Â ¹Ì·Ã¾øÀÌ ¸®ÅÏÇØ¾ß ÇÑ´Ù. Ãë¼Ò½Ã´Â ±»ÀÌ ¸Þ½ÃÁö ¹Ú½º¸¦ ¿ Çʿ䰡 ¾øÁö¸¸ ÆÄÀÏ ¿ÀÇ ½ÇÆÐ½Ã´Â ¸Þ½ÃÁö ¹Ú½º·Î ½ÇÆÐÇßÀ½À» ¾Ë¸®´Â °ÍÀÌ ÁÁ´Ù. ¿¹Á¦¿¡¼´Â ´Ü¼øÈ÷ ½ÇÆÐ »ç½Ç¸¸ ¾Ë·Á ÁÖ¾úÁö¸¸ °¡±ÞÀûÀÌ¸é ¾î¶² ÀÌÀ¯·Î ½ÇÆÐÇß´ÂÁöµµ »ó¼¼ÇÑ Á¤º¸¸¦ Á¦°øÇÏ´Â °ÍÀÌ ´õ ¹Ù¶÷Á÷ÇÏ´Ù.
ÆÄÀÏ ¿±â¿¡ ¼º°øÇßÀ¸¸é ¸ÕÀú Çì´õ¸¦ ÀÐ¾î º¸°í ó¸® °¡´ÉÇÑ ÆÄÀÏÀÎÁö¸¦ ¸ÕÀú È®ÀÎÇØ¾ß ÇÑ´Ù. ApiDraw¹®¼´Â ÆÄÀÏ ¼±µÎ¿¡ ¹Ýµå½Ã "ApiDraw File"À̶ó´Â ¹®ÀÚ¿ÀÌ ±â·ÏµÇ¾î ÀÖ¾î¾ß Çϴµ¥ ÀÌ ¹®ÀÚ¿ÀÌ ¾øÀ¸¸é ApiDraw ÆÄÀÏÀÌ ¾Æ´Ï´Ù. ¶ÇÇÑ ¼³»ç ¸Â´Ù°í ÇÏ´õ¶óµµ ¹öÀüÀÌ 1.0ÀÌ ¾Æ´Ï¸é ÀÌ ¹®¼µµ ¿ª½Ã ÀÐÀ» ¼ö ¾ø´Ù. Àå·¡¿¡ ApiDraw°¡ È®ÀåµÇ¾î 1.5³ª 2.0ÀÌ °î¼±, ´Ù°¢Çü, JPG µîÀÇ °´Ã¼µéÀ» ´õ ó¸®ÇÒ ¼ö ÀÖ´Ù¸é ApiDrawÀÇ ÇöÀç ¹öÀüÀº ÀÌ ¹®¼¸¦ Á¦´ë·Î ó¸®ÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù.
ApiDrawÀÇ ´ÙÀ½ ¹öÀüµµ ¶È°°Àº È®ÀåÀÚ adrÀ» »ç¿ëÇÒ °ÍÀ̹ǷΠÀÌ·± °è»êÀÌ Ã³À½ºÎÅÍ µé¾î°¡¾ß ÇÑ´Ù. ÇöÀçÀÇ ÇÁ·Î±×·¥ÀÌ ¹Ì·¡¿¡ ¸¸µé¾îÁú »óÀ§ ¹öÀüÀÇ ¹®¼¸¦ ¿Áö ¸øÇÏ´Â °ÍÀº ´ç¿¬ÇÑ ÀÏÀÌÁö¸¸ ÃÖ¼ÒÇÑ ¿¡·¯ 󸮴 Á¦´ë·Î ÇØ¾ß ÇÏ´Â °ÍÀÌ´Ù. ApiDrawÀÇ »óÀ§ ¹öÀüÀº ¾Æ¸¶µµ 1.0°ú ȣȯ¼ºÀÌ Àְųª, ÀÚ·á ±¸Á¶ÀÇ º¯È·Î ÀÎÇØ Á÷Á¢ ÀÐÀ» ¼ö ¾ø´õ¶óµµ º¯È¯ ÇÊÅ͸¦ Á¦°øÇÏ°Ô µÉ °ÍÀÌ´Ù. Çì´õ Á¤º¸°¡ ÀÌ ÇÁ·Î±×·¥°ú ¸ÂÁö ¾ÊÀ» °æ¿ì ÆÄÀÏÀ» ´Ý°í Áï½Ã ¸®ÅÏÇÑ´Ù.
¿ÀÇÂÇÑ ÆÄÀÏÀÌ Ã³¸® °¡´ÉÇÑ ÆÄÀÏÀÓÀÌ È®ÀεǾúÀ¸¸é FreeDoc, InitDoc ÇÔ¼ö¸¦ ¼ø¼´ë·Î È£ÃâÇÏ¿© ¹®¼¸¦ ÀçÃʱâÈÇÑ´Ù. ÀÌÀü¿¡ ÆíÁýÇÏ´ø ¹®¼ÀÇ µµÇüµéÀº ¸ðµÎ »èÁ¦µÉ °ÍÀ̸ç arObj¹è¿Àº Ãʱâ Å©±â¸¸Å ÇÒ´çµÉ °ÍÀÌ´Ù. ÀÌ µÎ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ½ÃÁ¡¿¡ ÁÖÀÇÇϵµ·Ï ÇÏÀÚ. ÆÄÀÏÀ» ¿ ¶§ ¹®¼¸¦ ÀçÃʱâÈÇÒ Çʿ䰡 ºÐ¸íÈ÷ ÀÖÀ¸¹Ç·Î Open ÇÔ¼öÀÇ ¼±µÎ¿¡¼ ÀÌ ÇÔ¼öµéÀ» È£ÃâÇÒ ¼öµµ Àִµ¥ ÀÌ´Â Çö¸íÇÏÁö ¸øÇÏ´Ù. ÆÄÀÏÀ» ÀÐÀ» ¼ö ÀÖ´Ù´Â »ç½ÇÀÌ ¿ÏÀüÈ÷ È®Á¤µÇ±â Àü¿¡´Â ÀÌÀü ¹®¼¸¦ ÀÏ´ÜÀº °¡Áö°í ÀÖ¾î¾ß »ç¿ëÀÚÀÇ Ãë¼Ò³ª ¿¡·¯ »óȲ¿¡ ´ëºñÇÒ ¼ö ÀÖ´Ù.
·¹Äڵ带 Àоî¿Ã ¶§´Â AppendObject¸¦ ÀÏÀÏÀÌ È£ÃâÇÏÁö ¾Ê°í ÇÊ¿äÇÑ ¸Þ¸ð¸®¸¦ ¹Ì¸® È®Àå ÇÒ´çÇÑ ÈÄ ÇѲ¨¹ø¿¡ ÀоîµéÀ̵µ·Ï Çß´Ù. °´Ã¼ÀÇ ¼ö°¡ ´ë´ÜÈ÷ ¸¹À» ¶§´Â ¸Å¹ø ÀçÇÒ´çÇØ°¡¸ç ¹è¿¿¡ Ãß°¡ÇÏ´Â °ÍÀÌ ºñÈ¿À²ÀûÀ̱⠶§¹®ÀÌ´Ù. ¸Å ¿ÀºêÁ§Æ®¸¶´Ù DObject ±¸Á¶Ã¼¸¦ ÇÒ´çÇÏ°í °´Ã¼¸¦ ÀÐ¾î µéÀ̸ç ÅØ½ºÆ®, ºñÆ®¸Ê, ¸ÞŸÀÎ °æ¿ì´Â °ü·Ã µ¥ÀÌÅ͵µ º°µµÀÇ ¸Þ¸ð¸®¸¦ ÇÒ´çÇØ¼ Àоîµé¿´´Ù. ÀúÀåÇÒ ¶§ °´Ã¼ÀÇ µ¥ÀÌÅÍ ±æÀ̸¸Å Á¤È®ÇÏ°Ô ÀúÀåÇßÀ¸¹Ç·Î ÀÐÀ» ¶§µµ ±æÀ̸¸Å¸¸ ÀоîµéÀÌ¸é ¿ÀÂ÷¾øÀÌ ·¹Äڵ带 ¼ø¼´ë·Î ÀÐÀ» ¼ö ÀÖ´Ù.
¸ðµç ·¹Äڵ带 ´Ù ÀÐ¾î µé¿´À¸¸é »õ·Î ÀÐÀº ÆÄÀϸíÀ» ŸÀÌÆ² ¹Ù¿¡ Ãâ·ÂÇϰí ȸéÀ» ¹«È¿ÈÇÏ¿© »õ·Î ÀÐÀº ¹®¼¸¦ Ãâ·ÂÇÑ´Ù. OnPaint´Â »õ·Î ¸¸µé¾îÁø arObjÀÇ ³»¿ëÀ» ±×´ë·Î ȸéÀ¸·Î Ãâ·ÂÇÒ °ÍÀÌ´Ù. ´ÙÀ½Àº ¼¼ °³ÀÇ µµÇü°ú ÇϳªÀÇ ºñÆ®¸ÊÀ¸·Î ±¸¼ºµÈ °¡»óÀÇ ¹®¼¸¦ ÆÄÀÏ·Î Ãâ·ÂÇÏ´Â ¿¹¸¦ º¸ÀÎ °ÍÀÌ´Ù.
arObj ¹è¿¿¡ ÀÔüÀûÀ¸·Î ±¸Á¶Ã¼¿Í À̹ÌÁö µ¥ÀÌÅÍ µîÀÌ Àü°³µÇ¾î Àִµ¥ ÀÌ µ¥ÀÌÅ͵éÀ» ÆÄÀÏ¿¡ ¼±ÇüÀûÀ¸·Î ±â·ÏÇß´Ù. ÀÐÀ» µéÀÏ ¶§´Â ¹Ý´ë·Î ¼±ÇüÀÇ ÆÄÀϷκÎÅÍ Àоîµé¿© ¸Þ¸ð¸®¿¡ ÀÔüÀûÀ¸·Î Àü°³ÇÏ¸é ¿ø·¡ ¹®¼°¡ º¹¿øµÈ´Ù. ÆÄÀÏ ÀÔÃâ·Â ÇÔ¼öµéÀÌ ¸ðµÎ ÀÛ¼ºµÇ¾úÀ¸¸ç ÀÌÁ¦ ¸Þ´º ¼±Åýà ÀûÀýÇÑ ÇÔ¼ö¸¸ È£ÃâÇÏ¸é µÈ´Ù.
LRESULT Main_OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
switch(LOWORD(wParam)) {
case IDM_FILE_NEW:
New();
break;
case IDM_FILE_OPEN:
Open();
break;
case IDM_FILE_SAVE:
Save();
break;
case IDM_FILE_SAVEAS:
SaveAs();
break;
....
°¢ ¸í·ÉÀÇ ¾×¼¿·¯·¹ÀÌÅÍ¿Í Åø ¹öưµµ µ¿ÀÏÇÑ ID·Î Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î »ç¿ëÀÚ´Â ÆíÇÑ ¹æ¹ýÀ¸·Î ¸í·ÉÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ÆÄÀÏ ÀÔÃâ·Â°ú °ü·ÃµÈ ¸¶Áö¸· ÀÛ¾÷Àº ¹ÌÀúÀå ¹®¼¸¦ È®ÀÎÇÏ´Â °ÍÀÌ´Ù. ÆíÁýÁß¿¡ ÇÁ·Î±×·¥À» Á¾·áÇÒ ¶§ ÀÌ ¹®¼ÀÇ ÀúÀå ¿©ºÎ¸¦ »ç¿ëÀÚ¿¡°Ô ¹°¾î º¸¾Æ¾ß ÇÑ´Ù. ¸ÞÀÎ À©µµ¿ì°¡ WM_CLOSE ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ¹ÌÀúÀå ¹®¼¸¦ ó¸®ÇÑ´Ù.
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
....
#ifndef _DEBUG
case WM_QUERYENDSESSION:
case WM_CLOSE:
if (ConfirmSave() == IDCANCEL) {
return TRUE;
} else {
break;
}
#endif
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
ConfirmSave¶ó´Â ÇÔ¼ö°¡ ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ÀÌ ÇÔ¼ö¸¸ È£ÃâÇÏ¸é µÈ´Ù. »ç¿ëÀÚ°¡ ÀÌ ÇÔ¼ö¿¡¼ Ãë¼Ò¸¦ ´©¸£¸é ÇÁ·Î±×·¥ÀÇ Á¾·á¸¦ °ÅºÎÇØ¾ß Çϴµ¥ À̶§´Â WM_CLOSE°¡ DefWindowProcÀ¸·Î °¡Áö ¸øÇϵµ·Ï ¸·±â¸¸ ÇÏ¸é µÈ´Ù. WM_QUERYENDSESSION ¸Þ½ÃÁö´Â ¿î¿µÃ¼Á¦¸¦ Á¾·áÇÒ ¶§ º¸³»Áö´Âµ¥ À̶§µµ ¹ÌÀúÀå ¹®¼¸¦ È®ÀÎÇØ¾ß ÇÑ´Ù. ¿î¿µÃ¼Á¦°¡ Á¾·áµÉ ¶§´Â ºü¸¥ Á¾·á¸¦ À§ÇØ °¢ ÇÁ·Î¼¼½º¸¦ ÀÏÀÏÀÌ Á¾·áÇÏÁö ¾Ê±â ¶§¹®¿¡ º°µµÀÇ ¸Þ½ÃÁö¸¦ ¹Þ¾Æ¾ß ÇÑ´Ù.
µÎ ¸Þ½ÃÁö¿¡ ´ëÇÑ Ã³¸® ÄÚµå´Â _DEBUG ¸ÅÅ©·Î°¡ Á¤ÀǵǾî ÀÖÁö ¾ÊÀ» ¶§¸¸ ÄÄÆÄÀÏÇϵµ·Ï ÇÏ¿© °³¹ßÁß¿¡´Â ¹ÌÀúÀå ¹®¼¸¦ È®ÀÎÇÏÁö ¾Êµµ·Ï Çß´Ù. °³¹ßÁß¿¡´Â Å×½ºÆ®¸¦ À§ÇØ Àӽà ¹®¼¸¦ ¸¹ÀÌ ¸¸µé¾î º¸´Âµ¥ ÀÌ ¹®¼´Â µû·Î ÀúÀåÇÏÁö ¾Ê¾Æµµ º° »ó°üÀÌ ¾ø´Ù. ÀÌ·± ¹®¼¿¡ ´ëÇØ¼µµ ÀÏÀÏÀÌ ÀúÀåÀ» Áú¹®ÇÏ¸é °³¹ßÀÚ°¡ ¹«Ã´ ÇǰïÇØÁú °ÍÀÌ´Ù. µð¹ö±ëÁßÀÇ ¹®¼´Â ÀúÀå ´ë»óÀÌ ¾Æ´Ï¶ó ´Ü¼øÇÑ Å×½ºÆ® ´ë»óÀÏ »ÓÀÌ´Ù.