<´Ù¸¥ ÇÁ·ÎÁ§Æ®·ÎºÎÅÍ ¸®¼Ò½º º¹»ç>
´Ù¸¥ ÇÁ·ÎÁ§Æ®¿¡ ÀÖ´Â ¸®¼Ò½º¸¦ ÇöÀç ÇÁ·ÎÁ§Æ®¿¡ º¹»çÇÏ°í ½Í½À´Ï´Ù. ¸®¼Ò½º¸¦ µå·¡±× ¾Ø µå·ÓÀ̳ª ÀÓÆ÷Æ®·Î ³ÖÀ» ¼ö ÀÖ´ÂÁö¿ä.
¹°·Ð °¡´ÉÇÕ´Ï´Ù. ´Ù¸¥ ÇÁ·ÎÁ§Æ®·ÎºÎÅÍ ¸®¼Ò½º¸£ »ç¿ëÇÏ´Â ¹æ¹ý¿¡´Â ¸®¼Ò½º¸¦ ÀÓÆ÷Æ®(Import)ÇÏ´Â ¹æ¹ý°ú ´Ù¸¥ ÇÁ·ÎÁ§Æ®ÀÇ ¸®¼Ò½º ½ºÅ©¸³Æ® ÆÄÀÏ(.rc)¿¡¼ Á÷Á¢ ¸®¼Ò½º¸¦ º¹»çÇØ ¿À´Â µÎ °¡Áö ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.
¸®¼Ò½º¸¦ ÀÓÆ÷Æ®ÇÏ·Á¸é ÀÓÆ÷Æ® ¸Þ´º¿¡¼ 'Insert->Resource' ¸¦ ¼±ÅÃÇÑ ÈÄ 'Insert Resource'¶õ ´ÙÀ̾ó·Î±×°¡ ³ª¿À¸é ¸®¼Ò½º ŸÀÔÁß¿¡ Çϳª¸¦ ´õºíŬ¸¯ÇÕ´Ï´Ù. ±×·¯¸é »õ·Î¿î ¸®¼Ò½º°¡ Ãß°¡µË´Ï´Ù. ±âÁ¸ ÇÁ·ÎÁ§Æ®¿¡¼ ºñÆ®¸Ê(*.bmp, *.dib) ÆÄÀÏ, ¾ÆÀÌÄÜ ÆÄÀÏ(*.ico), Ä¿¼ ÆÄÀÏ(*.cur), ¿þÀ̺ê ÆÄÀÏ(*.wav), ºñÁÖ¾ó º£ÀÌÁ÷ Æû ÇüÅÂÀÇ ¸®¼Ò½º¸¦ º¹»çÇÏ·Á¸é 'Import' ¹öÆ°À» ´©¸£¸é °£´ÜÈ÷ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.
´Ù¸¥ ÇÁ·ÎÁ§Æ®ÀÇ ¸®¼Ò½º ½ºÅ©¸³Æ®·ÎºÎÅÍ Á÷Á¢ º¹»çÇÏ´Â °úÁ¤Àº ¾ÆÁÖ °£´ÜÇÕ´Ï´Ù. ¿ì¼± 'File->Open'À» ¼±ÅÃÇÏ°í, ¿øº»ÀÌ µÇ´Â ¸®¼Ò½º ½ºÅ©¸³Æ® ÆÄÀÏ(*.rc) À» ¿¬ÈÄ À©µµ¿ì Ž»ö±â¿¡¼ º¹»çÇϵíÀÌ µå·¡±× ¾Ø µå·ÓÀ¸·Î ÇÁ·ÎÁ§Æ® â(Project Workspace)¿¡ ¿Å°Ü ÁÖ¸é µË´Ï´Ù. ´Ü <Ctrl>Å°¸¦ ´©¸£Áö ¾Ê°í ¿Å±â¸é, ÀÌÀü ÇÁ·ÎÁ§Æ®ÀÇ ¸®¼Ò½º°¡ »ç¶óÁö´Â °Í¿¡ À¯ÀÇÇØ¾ß ÇÕ´Ï´Ù. Resource.h ÆÄÀÏÀÇ ID°ü¸®´Â µðº§·ÓÆÛ ½ºÆ©µð¿À°¡ ³»ºÎÀûÀ¸·Î ÇØ°áÇØ ÁֹǷΠ½Å°æ¾²Áö ¾Ê¾Æµµ µË´Ï´Ù.
¹ÙÅÁȸ鿡 ±×¸²À» ±×¸®·Á ÇÕ´Ï´Ù. ±×¸®°í ÀÏ¹Ý À©µµ¿ì¿¡ ±×¸®´Â °Í°úÀÇ Â÷ÀÌÁ¡µµ ¾Ë°í ½Í½À´Ï´Ù.
¿ì¼± ¹ÙÅÁȸ鵵 ÇϳªÀÇ À©µµ¿ìÀ̹ǷΠ¹ÙÅÁȸéÀÇ À©µµ¿ì ÇÚµéÀ» ¾Ë¾Æ¾ß ÇÕ´Ï´Ù. Áï ÀϹÝÀ©µµ¿ì¿¡ ±×¸®´Â °Í°ú ÀüÇô ´Ù¸¦°Ô ¾ø½À´Ï´Ù .¹ÙÅÁ È£¸é¿¡ Á÷Á¢ ±×¸²À» ±×¸®°Ô µÇ¸é ȸ鿡 ¶° ÀÖ´Â ¸ðµç À©µµ¿ì¿¡ °ãÃÄÁ®¼ ±×·ÁÁö¹Ç·Î ¹ÙÅÁ ȸé¶Ç´Â ÀÏ¹Ý À©µµ¿ì¿¡¸¸ ±×¸®°í ½Í´Ù¸é º°µµÀÇ ÀÛ¾÷ÀÌ ÇÊ¿äÇÕ´Ï´Ù.
¿©±â¿¡¼´Â È¸é ¿ÞÂÊ À§ºÎÅÍ ºø±ÝÀÌ ±×¾îÁö´Â ¿¹·Î ÇÊ¿äÇÑ ºÎºÐ¸¸ º¸À̱â À§ÇØ À©µµ¿ì¸¦ ¸¸µéÁö ¾Ê¾Ò½À´Ï´Ù.
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrev, LPSTR lpszArgs, int nWinMode)
{
HWND
hwnd = GetDesktopWindow();
//
¹ÙÅÁȸéÀÇ À©µµ¿ì ÇÚµé ¾ò±â
HDC
hdc = GetWindowDC(hwnd);
//
¹ÙÅÁȸéÀÇ DC ÇÚµé ¾ò±â
//
GetWindowDC¸¦ ¾´´Ù.
HPEN
hPen;
register int i;
for(i=0;
i<=255; i++) {
hPen
= CreatePen(PS_SOLID, 0, RGB(i, i, i));
//
¿øÇÏ´Â »öÀ¸·Î Ææ ¸¸µé±â
HGDIOBJ
hOldPen = SelectObject(hdc, hPen);
//
ÆæÀ» ÇöÀç DC¿¡¼ ¼±ÅÃ
//
Ææ ÇÚµé º¸°ü
MoveToEx(hdc,
i*3, 0, NULL);
LineTo(hdc,
0, i*3);
//
¼±ÅÃµÈ ÆæÀ¸·Î ¼±À» ±ß´Â´Ù.
SelectObject(hdc,
hOldPen);
//
¿ø·¡´ë·Î Ææ µ¹·Á³õ±â
DeleteObject(hPen);
//
ÇÊ¿ä¾ø´Â Ææ Á¦°Å
}
ReleaseDC(hwnd,
hdc);
// DC¸¦ ¹Ý³³ÇÏ°í ±×¸®±â
ÀÛ¾÷À» ¸¶Ä£´Ù.
}
À©µµ¿ì ¸Þ¸ðÀå¿¡¼ ÇöÀç ij·µÀ¸·ÎºÎÅÍ ºí·°À» ¼³Á¤ÇÑ ÈÄ Å¬¸³º¸µå·Î º¹»çÇÒ ¼ö ÀÖ°Ô Ä³·µÀ§Ä¡¸¦ ±¸ÇÏ´Â ÇÔ¼ö¸¦ ¾Ë°í ½Í½À´Ï´Ù.
GetSel()Àº ÇöÀç ¿¡µðÅÍ ³»¿¡¼ ij·µÀÇ À§Ä¡(¿°ú Çà ¶Ç´Â À妽º)¸¦ ±¸ÇÏ´Â ÇÔ¼ö·Î ¿¡µðÅÍ¿¡ ¼±ÅÃµÈ ºÎºÐÀÌ ¾ø´õ¶óµµ ÀÌ ÇÔ¼ö¸¦ ¾µ ¼ö ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì´Â ¼±Åà ºÎºÐÀÇ ½ÃÀÛ À§Ä¡¿Í ³¡À§Ä¡°¡ °°À¸¹Ç·Î ºí·°À» ¼³Á¤Çϸé ÇöÀç ij·µÀÇ À§Ä¡¸¦ À妽º·Î »ï¾Æ ¶óÀÎ À§Ä¡·Î ¹Ù²ã ÁÝ´Ï´Ù. ÀÌ °æ¿ì »ç¿ëÇÏ´Â ÇÔ¼ö°¡ LineFromChar()ÀÔ´Ï´Ù. ±×¸®°í ¸î ¹ø° Ä÷³¿¡ Àִ°¡´Â ij·µÀ§Ä¡¿¡¼ LineIndex() ·Î ¾òÀº °ªÀ» »©´Â ½ÄÀ¸·Î µÎ ÇÔ¼ö¸¦ Á¶ÇÕÇÏ¸é ¾Ë¾Æ³¾ ¼ö ÀÖ½À´Ï´Ù.
ȸ鿡 ±×·ÁÁø »ç°¢ÇüÀ» ƯÁ¤ ¹öÆ°À» ´·¯ ÇÁ¸°Æ®·Î Ãâ·ÂÇÏ°í ½Í½À´Ï´Ù.
»ç°¢ÇüÀ» Ãâ·ÂÇÏ´Â Á¤µµ¶ó¸é ¾ÖÇø®ÄÉÀÌ¼Ç À§Àúµå°¡ »ý¼ºÇØ ÁÖ´Â ÇÁ¸°Æ® ¼Ò½º·Î ÃæºÐÇÕ´Ï´Ù. óÀ½ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µé ¶§ ÇÁ¸°Æ® ±â´ÉÀ» Ãß°¡Çϸé CView¿¡ OnPrint ÇÔ¼ö°¡ »ý±é´Ï´Ù. ÀÌ ÇÔ¼ö´Â DC¸¦ OnDraw() ·Î ³Ñ°ÜÁִµ¥, ¿©±â¼ OnDraw() ´Â ÁÖ¾îÁø DC¸¦ ȸéÀ̶ó »ý°¢ÇÏ°í ±×¸®°Ô µË´Ï´Ù. ±×¸®°í ¹öÆ°À» ´©¸£¸é ¹ß»ýÇÏ´Â ¹öÆ° Ŭ¸¯ À̺¥Æ®¿¡ SendMessage(WM_COMMAND, ID_FILE_PRINT); ¶Ç´Â SendMessage(WM_COMMAND, ID_FILE_PRINT_PREVIEW);¸¦ µ¡ºÙÀ̸é ÆÄÀÏ¿¡¼ ÇÁ¸°Æ®·Î º¸³¾ ¼ö ÀÖ½À´Ï´Ù.
Âü°í·Î ¿©·¯ ÆäÀÌÁöÀÇ µµÅ¥¸ÕÆ®¶óµç°¡ ȤÀº Å« ȸéÀ» ¿©·¯ ÀåÀ¸·Î ³ª´² Âï´Â º¹ÀâÇÑ ÇÁ¸°Æ®¸¦ ¿øÇÑ´Ù¸é OnPrint() ÀÇ µµ¿ò¸»À» ÂüÁ¶Çϱ⠹ٶø´Ï´Ù.
ºñÁÖ¾ó C++/MFC 4.0 À¸·Î ÀÛ¼ºÇÑ ÇÁ·Î±×·¥À» Á¦°¡ § ÇÁ·Î±×·¥¿¡¼ ½ÇÇàÇÏ°í, ÇÊ¿ä¿¡ µû¶ó¼´Â Á¦¾îÇÏ°í ½Í½À´Ï´Ù. ¸»ÇÏÀÚ¸é IPC(InterProcess Communication)°¡ µÇµµ·Ï ÇÏ´Â °ÅÁÒ. ¸¶Ä¡ À©µµ¿ì ¸Å´ÏÀú°¡ ƯÁ¤ ÇÁ·Î±×·¥À» Á×ÀÏ ¼ö ÀÖ´Â °Íó·³ Á¦ ÇÁ·Î±×·¥¿¡¼ ´Ù¸¥ ÇÁ·Î±×·¥À» ¼Õ½±°Ô Á¦¾îÇÏ°í ½Í½À´Ï´Ù.
CreateProcess µµ¿ò¸»À» º¸¸é ¾Ë°ÚÁö¸¸ ¼¼ºÎ »çÇ×À» Á¶¸ñÁ¶¸ñ ÁöÁ¤ÇØ ÇÁ·Î¼¼½º¸¦ ½ÃÀÛÇÒ ¼ö ÀÖÀ¸¹Ç·Î ´Ù¸¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦¾îÇϴµ¥ ¹®Á¦°¡ ¾øÀ» °ÍÀÔ´Ï´Ù. ¹°·Ð Á¦¾îÇÒ ÇÊ¿ä°¡ ¾ø´Â Ç׸ñÀº µðÆúÆ®·Î ÁÖ¸é µË´Ï´Ù.
Âü°í·Î ÀÌ ÇÔ¼öÀÇ 10¹ø° ÀμöÀÎ lpProcessInformation¿¡´Â ÀÌ ÇÁ·Î¼¼½ºÀÇ ½ÃÀÛ Á¤º¸°¡ µé¾îÀִµ¥, ¿©±â¿¡ ½ÃÀÛ ÇÁ·Î¼¼½º ÇÚµé°ú ¸ÞÀÎ ¾²·¹µå ÇÚµéÀÌ ´ã°ÜÁ® ¸®Åϵ˴ϴÙ. Âü°í·Î ´ÙÀ½ SuspendThread()¿Í ResumeThread()¸¦ »ç¿ëÇÏ¸é ¸ÞÀÎ ¾²·¹µå¸¦ Àá±ñ ¸ØÃâ ¼öµµ ÀÖ°í, TerminateThread()·Î ÇÁ·Î¼¼½ºÀÇ ¸ðµç ¾²·¹µå¸¦ Á¾·áÇÏ´Â µî ´Ù¸¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ½±°Ô Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù.
<ÄÁÆ®·ÑÀ» »ç¿ëÇÒ ¼ö ¾ø°Ô ó¸®ÇÏ·Á¸é>
Æûºä¿¡ ÀÖ´Â ¶óµð¿À ¹öÆ°À» ¼±ÅÃÇÒ °æ¿ì ȸéÀÇ ´Ù¸¥ ÄÁÆ®·Ñ Áß ÀϺθ¦ ¿ÏÀüÈ÷ ±×·¹ÀÌ(gray)·Î ó¸®ÇÏ°í ½Í½À´Ï´Ù. Áï ¿¡µðÆ® ÄÁÆ®·Ñ ÀÔ·ÂÀ̳ª ¶óµð¿À ¹öÆ°À» üũÇÏÁö ¸øÇÏ°Ô ÇÏ´Â ½ÄÀ¸·Î ÄÁÆ®·Ñ¿¡ Á¢±ÙÇÒ ¼ö ¾øµµ·Ï ÇÏ°íÀÚ ÇÕ´Ï´Ù.
¾î¶² ¶óµð¿À ¹öÆ°À» ¼±ÅÃÇßÀ» °æ¿ì¿¡ ƯÁ¤ ÄÁÆ®·ÑÀ» ¾µ ¼ö ¾ø°Ô ¸¸µå´Â ÀÏÀº »ý°¢º¸´Ù ½±½À´Ï´Ù. DDX(Dialog Data eXchange) ¸ÞÄ«´ÏÁòÀ» ÀÌ¿ëÇؼ ÄÁÆ®·Ñ°ú ¸ÊÇεǴ º¯¼ö¸¦ ÀÌ¿ëÇϰųª ȤÀº GetDlgItem()¸¦ »ç¿ëÇØ ÄÁÆ®·ÑÀÇ Æ÷ÀÎÅ͸¦ ¾òÀº ÈÄ ¸â¹ö ÇÔ¼ö EnableWindow(BOOL)·Î ÇØ°áÇÏ¸é µË´Ï´Ù.
À©µµ¿ì 95ÀÇ 'ã±â'ó·³ Æûºä¸¦ ¸¸µé¾ú´Âµ¥ À©µµ¿ì Å©±â¸¦ º¯°æÇÒ °æ¿ì ÇÔ²² ³»ºÎÀÇ ÄÁÆ®·Ñ Å©±âµµ º¯ÇÏ°Ô ÇÏ°í ½Í½À´Ï´Ù.
¸¸¾à À©µµ¿ì 95¿¡¼¸¸ ¾´´Ù¸é WM_SIZE ¿¡¼ ó¸®ÇØÁÖ¸é µÇÁö¸¸, Ç÷¯½ºÆÑÀ» ¼³Ä¡Çߴٰųª À©µµ¿ì NT 4.0¿¡¼ »ç¿ëÇÏ´Â °æ¿ì´Â °ï¶õÇÕ´Ï´Ù. ¿Ö³Ä Çϸé À©µµ¿ì Å©±â¸¦ Á¶ÀýÇÒ ¶§ À©µµ¿ì´Â µ¿ÀûÀ¸·Î °è¼Ó ±×·ÁÁö¹Ç·Î WM_SIZE¿¡¼ ó¸®ÇØ ÁÖ¸é Å©±âÁ¶ÀýÀÌ ³¡³ª°í ³ª¼¾ß ÄÁÆ®·ÑÀ» ´Ù½Ã ±×¸®¹Ç·Î ÁÁÀº ¹æ¹ýÀ̶ó ÇÒ ¼ö ¾øÁÒ. ±×·¯¹Ç·Î ÄÁÆ®·ÑÀ» ´Ù½Ã ±×·ÁÁÖ´Â ºÎºÐÀÌ ÇÊ¿äÇÕ´Ï´Ù.
ÇÑ ¹øÀº ²À È£ÃâµÇ´Â OnInitDialog()¿¡¼ ¹Ù·Î ó¸®ÇÏ´Â °Íº¸´Ù µû·Î ºÐ¸®Çؼ ÀÛ¼ºÇÑ ÈÄ È£ÃâÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. ¿ì¼± ÇÊ¿äÇÑ ÄÁÆ®·ÑÀº ¸ðµÎ DDX¸¦ ÀÌ¿ëÇØ ÄÁÆ®·Ñ º¯¼ö·Î ¸¸µé¾î ÁÝ´Ï´Ù (API¿¡¼´Â GetDlgItem()µîÀÇ ÇÔ¼ö ÀÌ¿ë).
void ResizeControlToParent(void) {
CRect
rect;
GetClientRect(&rect);
m_List1.MoveWindow(rect.left+10,
rect.top+10,
(rect.right-rect.left)/2,
(rect.bottom-rect.top)/3, TRUE);
m_Edit1.MoveWindow(...........................)
...
return;
}
ÀÌ·¸°Ô ¸¸µç ÇÔ¼ö¸¦ OnInitDialog()¿Í OnSize() ¶Ç´Â OnSizing()¿¡¼ ºÒ·¯ ÁÖ¸é µÇ´Â °ÅÁÒ.
Âü°í·Î À©µµ¿ì°¡ ÃÖ¼Ò鵃 °æ¿ì¸¸ À¯³äÇÏ¸é µË´Ï´Ù. °¡·É À©µµ¿ì Å©±â¸¦ ¾ò¾î¼ ÄÁÆ®·ÑÀ» ±×¸± ¶§ 'rect.right-50' ½ÄÀ¸·Î '50'À» Á¤¼ö ó¸®Çϸé ÃÖ¼Ò鵃 ¶§ °ªÀÌ À½¼ö°ªÀÌ µÇ¹Ç·Î 'Assertion Failure' ¶Ç´Â 'ÀÌ ÇÁ·Î±×·¥ÀÌ À߸øµÈ ¿¬»êÀ» ¼öÇàÇÏ¿©...'¶ó´Â ¸Þ½ÃÁö¸¦ ¸¸³ª°Ô µË´Ï´Ù.
<ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÈ µð·ºÅ丮¸¦ ãÀ¸·Á¸é>
ºñÁÖ¾ó C++·Î ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´ø Áß ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÈ °æ·Î¸¦ ¾Ë¾Æ¾ß ÇÒ ÇÊ¿ä°¡ »ý°å½À´Ï´Ù.
ÇÁ·¹ÀÓ¿÷Àº ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÃʱâÈ °úÁ¤¿¡¼ GetModuleFilesNameÀ» È£ÃâÇÏ°í µµ¿ò¸» ÆÄÀÏ¿¡ ´ëÇÑ °æ·Î¸¦ CWinApp::m_pszHelpFilePath¿¡ ÀúÀåÇÕ´Ï´Ù.
ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÈ µð·ºÅ丮¸¦ ã±â À§ÇØ ÀÌ µ¥ÀÌÅÍ ¸â¹ö¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù. ¿©±â¼ _splitpath°¡ ½ÇÇà·çƾÀ̸ç, _MAX_DIR°ú _MAX_DRIVE´Â Çì´õÆÄÀÏÀÎ STDLIB.H¿¡ Á¤ÀǵŠÀÖ½À´Ï´Ù.
void GetLaunchDir(CString& strLaunched)
{
TCHAR
szDir[_MAX_DIR];
TCHAR szDrive[_MAX_DRIVE];
_splitpath(AfxGetApp()->m_pszHelpFilePath,
szDrive,
szDir, NULL, NULL);
strLaunched.Format(_T("%s%s"),
szDrive, szDir);
}
- the end of this article -