´ÙÀ̾ó·Î±× º£À̽º¿¡¼ º¸¿©Áà¾ß ÇÒ Ç׸ñÀÌ ¸¹À» ¶§, ¾à°£ ÁöÀúºÐÇØ º¸ÀÌ´Â °æÇâÀÌ Àִµ¥, ´ÜÃ߸¦ Çϳª ´Þ¾Æ¼, ¾È¾²´Â Ç׸ñÀº Á¢¾î ³õ°í º¸¸é, »ó´çÈ÷ ÇÁ·Î±×·¥À» ±ò²ûÇÏ°Ô ÇÒ ¼ö ÀÖ´õ±º¿ä....
±×Àü¿¡ ÇÏ¼Å¾ß ÇÒ ÀÛ¾÷Àº ´ÙÀ½°ú °°½À´Ï´Ù.
1) Àß ¾È¾²ÀÌ´Â Ç׸ñµéÀº Static Box¸¦ Çϳª »ý¼ºÇؼ ¸ð¾Æ ³õ´Â´Ù.
2) StaticBoxÀÇ À̸§À» ID_STATICÀÌ ¾Æ´Ñ ´Ù¸¥ À̸§À» ºÙÀδÙ.(¿©±â¼´Â ID_STATIC_SEP¶ó´Â À̸§À» ºÙ¿´½À´Ï´Ù. )
3) ±× Ç׸ñÀ» º¸¿©Áְųª, ¾Èº¸¿©ÁÖ´Â ±â´ÉÀ» Ãß°¡Çϱâ À§Çؼ ÄÚ¸Çµå ¹öÆ°À̳ª ¸Þ´ºÇ׸ñÀ» Ãß°¡ÇÑ´Ù.( ¿©±â¼´Â IDC_BUTTON_TEST¶ó´Â À̸§ÀÔ´Ï´Ù. )
°£´ÜÇÏÁÒ..?? ÀÌ·¸°Ô ÇÏ½Ã°í ³ ÈÄ¿¡ À©µµ¿ì¿¡ ´ÙÀ½°ú °°Àº ÇÔ¼ö¸¦ Ãß°¡ÇÏ½Ã¸é µË´Ï´Ù.
ÄÚµåÀÇ ³»¿ëÀº ¾Æ±î ¸¸µç Â÷Àϵå À©µµ¿ìÀÇ ¿µ¿ªÀ» ±â¾ïÇؼ, ¹öÆ°À» ÇÑ ¹ø ´©¸£¸é ¿ø·¡ÀÇ À©µµ¿ìÀÇ ¸ð½ÀÀ», µÎ¹ø ´©¸£¸é Â÷ÀÏÀÇ À©µµ¿ì ¿µ¿ªÀ» Á¦¿ÜÇÑ ºÎºÐ¸¸ º¸¿©ÁÖ´Â ±×·± ÀÏÀ» ÇÕ´Ï´Ù.
( ¾Æ±î ¸¸µç ¹öÆ°ÀÇ À̺¥Æ® Çڵ鷯 ÀÔ´Ï´Ù. Âø¿À ¾øÀ¸½Ã±æ... )
void CXXXXDlg::OnExpand()
{
// TODO: Add your control notification handler code
here
static BOOL bExpand = TRUE;
Expanding(IDC_STATIC_SEP, bExpand);
bExpand = !bExpand;
}
void CXXXXDlg::Expanding(int nResourceID, BOOL bExpand)
{
static CRect rcLarge;
static CRect rcSmall;
CString strExpand;
if (rcLarge.IsRectNull()) {
CRect rcLandMark;
CWnd *pWndLandMark = GetDlgItem(nResourceID);
ASSERT(pWndLandMark);
GetWindowRect(rcLarge);
pWndLandMark -> GetWindowRect(rcLandMark);
rcSmall = rcLarge;
rcSmall.bottom = rcLandMark.top;
}
if (bExpand) {
SetWindowPos(NULL, 0 , 0,
rcLarge.Width(), rcLarge.Height(),
SWP_NOMOVE
| SWP_NOZORDER);
strExpand = " <<
Test ";
} else {
SetWindowPos(NULL, 0, 0,
rcSmall.Width(), rcSmall.Height(),
SWP_NOMOVE
| SWP_NOZORDER);
strExpand = " Test >>";
}
SetDlgItemText(IDC_BUTTON_TEST, strExpand);
}
»óŹٿ¡ ±×¸² Ãâ·ÂÇϽ÷Á¸éCreateÇÔ¼ö¿¡
CStatusbarCtrl& m_Status = m_wndStatusBar.GetStatusBarCtrl();
m_Status.SetIcon(ÆäÀÎÀ妽º,
(HICON)LoadImage(AfxGetResourceHandle(),
MAKEINTRESOURCE(±×¸²¾Æµð),
32,32,10));
ÇØÁÖ½Ã¸é µË´Ï´Ù.
´õ ÀÚ¼¼ÇÑ Á¤º¸´Â MSDNã¾Æ º¸¼¼¿ä..
1.¿ä¾à
À©µµ¿ìÁî NT ³ª À©µµ¿ìÁî 98 ¿¡¼ ½Ã½ºÅÛÀ» °Á¦·Î ´Ù¿î½ÃÅ°´Â ¹æ¹ý¿¡ ´ëÇؼ ¾Ë¾Æº¾´Ï´Ù.
2.º»¹®
ÇÊ¿äÇÑ °æ¿ì°¡ °ÅÀÇ ¾ø°ÚÁö¸¸(¹ÙÀÌ·¯½º°¡ ¾Æ´Ï°í¼¾ß. ^^;;), ½Ã½ºÅÛÀ» °Á¦·Î ´Ù¿î½ÃÅ°°íÀÚ ÇÏ´Â °æ¿ì°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± °æ¿ì ¾Æ·¡ÀÇ ¿¹Á¦¿¡¼ ó·³ ¾î¼Àºí¸® Äڵ带 »ç¿ëÇÏ´Â ¹æ¹ý°ú Thread ¸¦ ¿ÍÀåâ ¸¸µé¾î¼ thread ·¯½¬(?)¸¦ ÅëÇؼ ´Ù¿î½ÃÅ°´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. ¾Æ·¡ÀÇ ¿¹Á¦¸¦ Âü°í Çϼ¼¿ä.
3.¿¹Á¦
if(g_bIsWinNT) {
SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
while(1) {
DWORD dwTid;
HANDLE hThread=CreateThread(NULL,0,LockThread,NULL,0,&dwTid);
SetThreadPriority(hThread,THREAD_PRIORITY_TIME_CRITICAL);
}
} else {
lockpoint:
__asm {
cli
jmp lockpoint
}
}
4.Âü°í
BO2K
* cli : Clear Interrupt Flag
--> ÀÌ ¾î¼Àºí¸® ÄÚµå´Â ÇöÀç ½Ã½ºÅÛÀÌ ´Ù¿îµÇ´Â °ÍÀ» ¹æÁöÇϱâ À§Çؼ ¸¸µé¾îÁø
Interrupt Flag ¸¦ Á¦°ÅÇعö¸²À¸·Î½á, ¾Æ¹«µµ ÀÚ½ÅÀ» °Çµå¸± ¼ö ¾ø°Ô ÇÕ´Ï´Ù.
(The Intel Architecture Software Developer's Manual)
<Win9x VS Win2000,WinNT ½Ã½ºÅÛ Á¾·áÇϱâ>
½Ã½ºÅÛÀ» °ü¸®ÇÏ´Â ÇÁ·Î±×·¥¿¡¼ ÀÚÁÖ ¾²ÀÌ´Â ±â´ÉÀ©...
Á» º¸±â ½±°Ô Á¤¸®µÈ ÀÚ·á°¡ ¾ø´Â°Å °°¾Æ¼ ¿Ã·Áº¾´Ï´Ù.....
¸ÕÀú Win9x Series...
°£´ÜÇϴϱî...±×³É ÇÔ¼ö·Î ±¸ÇöÇÑ °Í¸¸ Àû¾î ³õÀ¸²²¿©...
void CUpsManagerApp::Win9XSystemReboot()
{
ExitWindowsEx(EWX_REBOOT,0);
}
void CUpsManagerApp::Win9XSystemPowerOff()
{
ExitWindowsEx(EWX_POWEROFF,0);
}
void CUpsManagerApp::Win9XSystemLogOff()
{
ExitWindowsEx(EWX_LOGOFF, 0);
}
¸ÕÀú WinNT ¹× Win2000 Series...
¿ä°Ç ¹®Á¦°¡ ÂÀ ÀÖ½À´Ï´Ù...
ÇÁ¸®ºô¸®Áö¶ó´Â ³ÑÀ» ¼³Á¤Çؼ ÅäÅ«(¹ö½º ÅäÅ« ¾Æ´Ô --;;;)À̶ó´Â ³ÑÀ» ¼³Á¤Áà¾ß ÇÕ´Ï´Ù.
¹¹ÇÏ´Â ³ÑÀÎÁö´Â MSDN ã¾Æº¸¸é Àß ³ª¿À±¸¿©... ±×³É ½Ã½ºÅÛ ¼öÁØÀÇ ÇÁ·Î¼¼½º ¾×¼¼½º¸¦ ÇÒ·Á¸é... ÀÌ°Å ¼³Á¤Çϱ¸ ÇؾßÇÑ´Ù±¸ ¾Ë°í °è½Ã¸é µÉ°Ì´Ï´Ù.
±Û°í ÀÌ ¼³Á¤¿¡ °üÇÑ ¹æ¹ýÀº ÀÚ·á½Ç¿¡ ÀÌ¹Ì °èÁ¦°¡ µÇ¾î ÀÖ½À´Ï´Ù.
±Ùµ¥.. ¶Ç ±ÛÀ» Àû¾î³í ÀÌÀ¯´Â ¾à°£ÀÇ ºÎ¿¬ ¼³¸íÀ» ´Þ¶ó±¸¿©...
Áö±ÝÀÇ ¼³Á¤´ë·Î Çϸé
ExitWindowsEx(EWX_SHUTDOWN | EWX_REBOOT,0);
ExitWindowsEx(EWX_SHUTDOWN | EWX_POWEROFF,0);
À§ÀÇ µÎ°³ÀÇ ±â´ÉÀº ´ç¿¬È÷ ´Þ¶ó¾ß ÇÕ´Ï´Ù....
±Ùµ¥... µÑ´Ù ¸®ºÎÆÃÀÌ µË´Ï´Ù. ¿ø·¡ Çϳª´Â ÆÄ¿ö ¿ÀÇÁµÇ¾î¾ß Çϴµ¥...
¾Æ¹«¸® ÃßÀûÇØ ºÁµµ ¿Ö ±×·±Áö Àß ¸ð¸£°Ú¾î¿©...
Àü À¯ÇÇ¿¡½º °ü¸® ÇÁ·Î±×·¥ Áö±Ý Â¥°í Àִµ¥...
¹Ù¶¼¸® ¶³¾îÁö¸é... ½Ã½ºÅÛÀ» Á׿©¾ß Çϴµ¥... À̳ÑÀÌ ´Ù½Ã ÄÑÁö¸é °ï¶õÇÏÁö¿©..
±×·Á¼... ExitWindowsEx() ÇÔ¼ö ´ë½Å¿¡ ....
InitiateSystemShutdown() ÇÔ¼ö¸¦ ½á¼ ±¸ÇöÇغýɴõ...
¿£Æ¼4.0Çϱ¸ À©ÀÌõ(Professional ¹öÁ¯)Àº Àß µ¿ÀÛ Çϵçµð...
´Ù¸¥°Ç ¾ÆÁ÷ Å×½ºÆ® ¸øÇغýÀ´Ï´Ù.
void CUpsManagerApp::WinNTSystemReboot()
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID luid;
OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
&hToken);
LookupPrivilegeValue(NULL,"SeShutdownPrivilege",&luid);
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL);
InitiateSystemShutdown(NULL, NULL, 30, FALSE, TRUE);
// ExitWindowsEx(EWX_SHUTDOWN | EWX_REBOOT,0);
}
void CUpsManagerApp::WinNTSystemPowerOff()
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID luid;
OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
&hToken);
LookupPrivilegeValue(NULL,"SeShutdownPrivilege",&luid);
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL);
InitiateSystemShutdown(NULL, NULL, 30, FALSE, FALSE);
// ExitWindowsEx(EWX_SHUTDOWN | EWX_POWEROFF,0);
}
void CUpsManagerApp::WinNTSystemLogOff()
{
ExitWindowsEx(EWX_LOGOFF, 0);
}
<½Ç¼ö ³ª´°¼À ¿¬»êÀ» Á¤¼ö ¿¬»êÀ¸·Î Çϱâ>
1.¿ä¾à
¼Ò¼öÁ¡ÀÌ ÀÖ´Â ³ª´°¼À ¿¬»êÀ» Á¤¼ö·Î °è»êÇÏ¿© °è»ê ¼Óµµ°¡ ºü¸£°í Á¤È®ÇÑ ¼ýÀÚ¸¦ ¾òÀ» ¼ö ÀÖ´Â ¹æ¹ý¿¡ ´ëÇؼ ¾Ë¾Æº¸°Ú½À´Ï´Ù.
2.º»¹®
Á¤¼ö·Î °è»êÀº ¼Ò¼öÁ¡ °è»êº¸´Ù ¿¬»ê ¼Óµµ°¡ ºü¸¨´Ï´Ù. ±×¸®°í Á¤È®ÇÑ ¼ýÀÚ°ªÀ» ¾ò±â À§Çؼ´Â ³ª´©±â Àü¿¡ ¿ÞÂÊÀ¸·Î 16-bit shiftÇÏ°í, µ¿µîÇÑ 16-bitÀÇ 2Áø ¼ýÀÚ¸¦ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ÀÌ°ÍÀº ³ª´©±â Àü¿¡ 100,000À¸·Î °ö¼ÀÀ» ÇÑ È¿°ú°¡ ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¼Ò¼öÁ¡À» °è»êÇÏÁö ¾Ê¾Æµµ µË´Ï´Ù.
3.¿¹Á¦
1) 10 / 85 = x;
10À» 100,000À¸·Î °öÇϸé, 1,000,000ÀÌ ³ª¿Â´Ù.
1,000,000 / 85 = 11764¸¦ ¸ÕÀú °è»êÇÏ°í,
°á°ú°ª 11764¸¦ 100,000À¸·Î ³ª´©¸é 0.11764°¡ ³ª¿Â´Ù.
2)
int ratio = ((( dege - px2) < < 16) / (px1 - px2));
px1 = edge;
py1 = py2 + (((py1 - py2) * ratio) >> 16));
3)
float ratio = (float)((edge - px2) / (px1 - px2));
px1 = edge;
py = py2 + (int)(((float)(py1 - py2) * ratio));
[°á°ú]
2)¿¬»ê¼Óµµ°¡ 3)¿¬»ê¼Óµµº¸´Ù ¾à 2¹èÁ¤µµ ºü¸¥°á°ú°¡ ³ª¿É´Ï´Ù.
4.Âü°í
Real-Time Strategy Game Programming using Ms DirectX p.318
<¿¬°á ÇÁ·Î±×·¥ ã±â ´ÙÀ̾ó·Î±× ¶ç¿ì±â>
[¿ä¾à]
Explorer ¿¡¼ ÆÄÀÏ ¾ÆÀÌÄÜÀ» ´õºíŬ¸¯ÇÒ °æ¿ì ÆÄÀÏÀÇ È®Àå¸í¿¡ µû¶ó ¿¬°áµÇ¾î ÀÖ´Â ÇÁ·Î±×·¥ÀÌ µ¿ÀÛÇÏ°Ô µÇ¾î ÀÖ´Ù. ÇÏÁö¸¸ ¿¬°áµÇ¾î ÀÖ´Â ÇÁ·Î±×·¥ÀÌ ¾øÀ» °æ¿ì "¿¬°á ÇÁ·Î±×·¥ ã±â" ´ÙÀ̾ó·Î±×°¡ ȸ鿡 ³ªÅ¸³´Ù.
[Ãß°¡ Á¤º¸]
ÆÄÀÏ ¾ÆÀÌÄÜ¿¡ ¿¬°áµÈ ÇÁ·Î±×·¥ÀÌ ¾øÀ» °æ¿ì ¿¬°á ÇÁ·Î±×·¥À» ÁöÁ¤Çϵµ·Ï "¿¬°á ÇÁ·Î±×·¥ ã±â" ´ÙÀ̾ó·Î±×¸¦ ÇÁ·Î±×·¥ÀûÀ¸·Î ¶ç¿ì´Â ¹æ¹ýÀº ShellExecuteEx API ¸¦ Call ÇÒ ¶§ "Openas" ¸¦ ÆĶó¹ÌÅÍ·Î »ç¿ëÇÏ¸é µÈ´Ù.
¿ì¼± ShellExecuteEx¸¦ CallÇϱâ Àü¿¡ FindExecutable API¸¦ »ç¿ëÇÏ¿© ÆÄÀÏÀÇ ÇÁ·Î±×·¥ ¿¬°á¿©ºÎ¸¦ ¿ì¼± ¾Ë¾Æº¸µµ·Ï ÇÑ´Ù. ¸¸¾à ¿¬°áµÈ ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ÀÖÀ» °æ¿ì SHELLEXECUTEINFO structure¿¡ "Open" ÆĶó¹ÌÅ͸¦ »ç¿ëÇÏ°í, ±×·¸Áö ¾ÊÀ» °æ¿ì "Openas"¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ÀÌ ÆĶó¹ÌÅÍ¿¡ ÀÇÇØ ShellExecuteEx °¡ "¿¬°á ÇÁ·Î±×·¥ ã±â" ´ÙÀ̾ó·Î±×¸¦ ȸ鿡 ³ªÅ¸³»°Ô µÈ´Ù.
´ÙÀ½Àº À§ ³»¿ë¿¡ ´ëÇÑ Sample codeÀÌ´Ù.
// Get the name of the file to be openend.
CFileDialog dlg(TRUE);
if (dlg.DoModal() == IDOK ) {
CString strFile = dlg.GetPathName();
// See if there is an association for this file.
char strExecutable[FILENAME_MAX];
int result = (int)FindExecutable((LPCTSTR)strFile, NULL,
(LPTSTR)&strExecutable);
if (result == 31) { // No Associated .EXE file
AfxMessageBox("There is no association for the specified file type.
The 'Open With...' dialog box will now be displayed.");
SHELLEXECUTEINFO sei = {sizeof(sei), 0, m_hWnd, "Openas",
(LPCSTR)strFile, NULL, NULL, SW_SHOWNORMAL,
AfxGetApp()->m_hInstance};
// Invoke the "Open With..." dialog box before opening the selected file.
ShellExecuteEx(&sei);
} else if (result >= 32 ) { // Found an Associated .EXE file
AfxMessageBox("The file will now be opened with the associated program...");
SHELLEXECUTEINFO sei = {sizeof(sei), 0, m_hWnd, "Open",
(LPCSTR)strFile, NULL, NULL, SW_SHOWNORMAL,
AfxGetApp()->m_hInstance};
// Open the selected file.
ShellExecuteEx(&sei);
} else { // Error condition.
AfxMessageBox("Some other problem has caused 'FindExecutable' to fail.");
}
}
º¸Åë À©µµ¿ì ApplicationÀº È·ÁÇÑ GUI¸¦ ÀÚ¶ûÇϸç ApplicationÀÌ ¸¸µé¾î Áý´Ï´Ù.
±×·¯³ª ¼¹ö¿¡¼ ½ÇÇàµÇ´Â ÇÁ·Î±×·¥ÀÎ °æ¿ìÇϳªÀÇ ÄÜ¼Ö È¸é¿¡¼ ¿©·¯ GUI¸¦ ¶ç¾î ÀÛ¾÷À» ÇÏ°Ô µÇÁö¿ä.
º¸ÅëÀº ÇϳªÀÇ Application¿¡ ÇϳªÀÇ Äֿܼ¡ ¿©·¯°³ÀÇ À©µµ¿ì¸¦ »ý¼ºÇØ ÇÁ·Î±×·¥ µË´Ï´Ù. ¹°·Ð Äֵܼµ ÇϳªÀÇ À©µµ¿ìÁö¸¸¿ä.
±×·³ ¿©±â¼ °£´ÜÈ÷ À©µµ¿ì Application¿¡¼ ÄܼÖÀ» ¶ç¾î Text Edit¿¡ ÀÖ´Â ¹®ÀÚ¸¦ Äֿܼ¡ Âï´Â API ÇÔ¼ö¸¦ ¼Ò°³ÇÕ´Ï´Ù.
ºñ±³Àû °£´ÜÇÏ°í ¿©·¯±ºµ¥¼ »ç¿ë°¡´ÉÇÏ´Ï ¸¹Àº ÂüÁ¶ ¹Ù¶ø´Ï´Ù.
1. À©µµ¿ì¿¡¼ ÄÜ¼Ö ¶ç¿ì±â
BOOL AllocConsole()
2. »ý¼ºµÈ Äֿܼ¡ ¹®ÀÚ¿ º¸³»±â
CString str;
str = "¹®ÀÚ¿"
DWORD dwWrite;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
WriteFile(hOut, str, str.GetLength(), &dwWrite,
NULL);
3. »ý¼ºµÈ Äܼ־ø¾Ö±â
BOOL FreeConsole()
ÇÔ¼öÀÇ ÀÚ¼¼ÇÑ »ç¿ëÀº MSDN¿¡¼ Âü°íÇϼ¼¿ä.
<Á¦¾îÆÇ¿¡¼ Å«±Û²Ã·Î ¼³Á¤ÇßÀ»°æ¿ì¿¡µµ ÀÏÁ¤ÇÑ Å©±âÀÇ ±Û²Ã ÁöÁ¤>
CDC* pDC = GetDC();
int nSize1 = 100; // ÀÛÀº
±Û²Ã¿¡¼ º¸¿©Áö´Â ±Û²Ã Å©±â
int nSize2 = MulDiv(nSize1, 96, pDC->GetDeviceCaps(LOGPIXELSY));
//
nSize1ÀÇ Å©±â¸¦ ÇöÀç µð½ºÇ÷¹ÀÌÀÇ ÀÎÄ¡´ç Çȼ¿¼ö·Î Àç°è»êÇÑ´Ù.
m_Font.CreatePointFont(nSize2, "±¼¸²Ã¼", pDC);
//
´Ü¼øÈ÷ ÆùÆ®¸í°ú ÆùƮũ±â·Î »ý¼ºÇÒ¶§
m_Button.SetFont(&m_Font);
ÀÌ·¸°Ô Çؼ ¾Õ¿¡ ¿Ã¸° Äڵ带 ´ë½ÅÇϸé Á¦¾îÆÇ¿¡¼ ¼³Á¤ÇÑ Å«±Û²Ã, ÀÛÀº±Û²ÃÀÇ °ª¿¡ »ó°ü¾øÀÌ ÀÏ°üµÈ Å©±âÀÇ ÆùÆ®¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. Å«±Û²Ã·Î ¼³Á¤ÇÏ¸é ±ÛÀÚ°¡ À߸®´Â Çö»óÀ» ¸·À» ¼ö ÀÖÁÒ.
256 Ä®¶óÀÇ ºñÆ®¸ÊÀ» ȸ鿡 »Ñ·ÁÁÝ´Ï´Ù. ¹°·Ð Åõ¸í»öÀ» ÁöÁ¤ÇÏ´Â ¹æ½ÄÀ̱¸¿ä.
±×·³ ¼Ò½º ³ª°©´Ï´Ù.
int CCISBitmap::Width()
{
BITMAP bm;
GetBitmap(&bm);
return bm.bmWidth;
}
int CCISBitmap::Height()
{
BITMAP bm;
GetBitmap(&bm);
return bm.bmHeight;
}
void CCISBitmap::DrawTransparent(HDC hDC, int x, int y, COLORREF crColour)
{
COLORREF crOldBack = SetBkColor(hDC,m_crWhite);
COLORREF crOldText = SetTextColor(hDC,m_crBlack);
CDC dcImage, dcTrans;
// Create two memory dcs for the image and the mask
dcImage.m_hDC = CreateCompatibleDC(hDC);
dcTrans.m_hDC = CreateCompatibleDC(hDC);
// Select the image into the appropriate dc
CBitmap* pOldBitmapImage = dcImage.SelectObject(this);
// Create the mask bitmap
CBitmap bitmapTrans;
int nWidth = Width();
int nHeight = Height();
bitmapTrans.CreateBitmap(nWidth, nHeight, 1, 1, NULL);
// Select the mask bitmap into the appropriate dc
CBitmap* pOldBitmapTrans = dcTrans.SelectObject(&bitmapTrans);
// Build mask based on transparent colour
dcImage.SetBkColor(crColour);
dcTrans.BitBlt(0, 0, nWidth, nHeight, &dcImage,
0, 0, SRCCOPY);
// Do the work - True Mask method - cool if not actual
display
BitBlt(hDC, x, y, nWidth, nHeight, dcImage.m_hDC
, 0, 0, SRCINVERT);
BitBlt(hDC, x, y, nWidth, nHeight, dcTrans.m_hDC
, 0, 0, SRCAND);
BitBlt(hDC, x, y, nWidth, nHeight, dcImage.m_hDC
, 0, 0, SRCINVERT);
// Restore settings
dcImage.SelectObject(pOldBitmapImage);
dcTrans.SelectObject(pOldBitmapTrans);
pOldBitmapImage->DeleteObject();
pOldBitmapTrans->DeleteObject();
SetBkColor(hDC,crOldBack);
SetTextColor(hDC,crOldText);
}
ÀÔ´Ï´Ù.
À½.. ±×·±µ¥ ÀÌ°Ô Á» ´À·Á¿ä. --;.
Åõ¸í»ö ¾øÀÌ Ãâ·ÂÇÏ´Â ·çƾÀº ¾Æ·¡²®´Ï´Ù.
void CCISBitmap::DrawBitmap(HDC hDC, int x, int y)
{
CDC MemDC;
MemDC.m_hDC = CreateCompatibleDC (hDC);
int nWidth = Width();
int nHeight = Height();
CBitmap *pBitmap = (CBitmap *)MemDC.SelectObject
(this);
BitBlt (hDC,x,y,nWidth,nHeight,MemDC.m_hDC,0,0,SRCCOPY);
MemDC.SelectObject (pBitmap);
pBitmap->DeleteObject();
pBitmap = NULL;
}
±×¸®°í Çì´õ´Â ÀÌ·¸°Ô ÇØÁÖ¼¼¿ä.
public:
void DrawBitmap(HDC hDC, int x, int y);
CCISBitmap();
virtual ~CCISBitmap();
// Functions
int Height();
int Width();
virtual void DrawTransparent(HDC hDC, int x, int
y, COLORREF crColour);
private:
COLORREF m_crBlack;
COLORREF m_crWhite;
±×¸®°í¿ä.. ¶Ç.. »ý¼ºÀÚ¿¡ COLORREF ¸¦ ÃʱâÈ ÇØÁÖ½É µÇ±¸¿ä
ÀÌ°Ç CBitmap À» »ó¼Ó¹Þ¾Ò½À´Ï´Ù.
<Æ®·¹ÀÌÀÇ ¾ÆÀÌÄÜÀÌ »ç¶óÁöÁö ¾Ê°Ô>
IE°¡ Á×À» ¶§ Æ®·¹ÀÌÀÇ ¾ÆÀÌÄÜÀÌ ¸ðµÎ »ç¶óÁö´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù.
ƯÈ÷ Æ®·¹ÀÌ¿¡ ¼û¾î¹ö¸®´Â ÇÁ·Î±×·¥ÀÌ ±×·¸°Ô µÇ¸é ÂüÀ¸·Î ³°¨ÇØÁöÁÒ.
IE 4À̻󿡼´Â ±×·± ÀÏÀ» ¸·±â À§Çؼ Á×Àº ÈÄ Å½ºÅ©¹Ù°¡ ¸¸µé¾îÁú ¶§ ¸ðµç top-level À©µµ¿ì¿¡ ¸Þ½ÃÁö¸¦ º¸³»ÁÝ´Ï´Ù. ±× ¸Þ½ÃÁö¸¦ ¹ÞÀ¸¸é Æ®·¹ÀÌ¿¡ »õ·Î ¾ÆÀÌÄÜÀ» ³Ö¾îÁÖ¸é µË´Ï´Ù.
MSDN¿¡ ÀÖ´Â ³»¿ëÀÌÁö¸¸ ¸ð¸£½Ã´Â ºÐµéÀÌ ¸¹´õ±º¿ä.
¼Ò½º¸¦ º¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM
lParam)
{
static UINT s_uTaskbarRestart;
switch(uMessage) {
case WM_CREATE:
s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
break;
default:
if(uMessage == s_uTaskbarRestart)
AddTaskbarIcons();
break;
}
return DefWindowProc(hWnd, uMessage, wParam, lParam);
}
RegisterWindowMessage(TEXT("TaskbarCreated")); ´Â TaskbarCreated¶ó´Â À̸§ÀÇ ¸Þ½ÃÁö¸¦ ½Ã½ºÅÛ¿¡ ´ëÇؼ À¯ÀÏÇÏ°Ô ¸¸µé¾îÁÖ´Â ÇÔ¼öÀÔ´Ï´Ù. ÀÌ¹Ì ÀÌ À̸§À¸·Î ¸Þ½ÃÁö°¡ µî·ÏµÇ¾î ÀÖÀ» °æ¿ì¿¡´Â ±× °ªÀ» µ¹·ÁÁÝ´Ï´Ù.
µû¶ó¼ ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ ¶§ Çѹø ½ÇÇàÇؼ ±× °ªÀ» ÀúÀåÇØÁà¾ß ÇÕ´Ï´Ù.
±×¸®°í ÇØ´ç ¸Þ½ÃÁö°¡ ¿À¸é ±× ¶§ Æ®·¹ÀÌ¿¡ ¾ÆÀÌÄÜÀ» »õ·Î ³ÖÀ¸¸é µÇ°ÚÁÒ.
MFCÀÇ °æ¿ì´Â ¸Þ½ÃÁöÀÇ °ªÀÌ »ó¼ö·Î Á¤ÇØÁ® ÀÖÁö ¾Ê±â ¶§¹®¿¡ ¸Þ½ÃÁö ¸Ê¿¡ ºÙÀÌ´Â °Ç ¾ÈµÉ °Í °°½À´Ï´Ù. CWnd::WindowProcÀ̳ª PretranslateMessage¿¡¼ ¸Þ½ÃÁö °ªÀ» È®ÀÎÇؼ ó¸®ÇØÁÖ¸é µÇ°ÚÁÒ.
- MFCÀÇ °æ¿ì
À©µµ¿ì´Â tray icon¿¡ ÀÖ´Â ¾ÆÀÌÄܵéÀ» º¸¿©ÁÙ¶§. "TaskbarCreated" ¶ó´Â À©µµ¿ì ¸Þ¼¼Áö¸¦ º¸¿©ÁÝ´Ï´Ù...
µû¶ó¼ ¿ì¸®´Â ÀÌ À©µµ¿ì ¸Þ¼¼Áö¸¦ µî·ÏÇؼ »ç¿ëÇÏ¸é µË´Ï´Ù.
UINT g_uShellRestart;
g_uShellRestart = RegisterWindowMessage(__Text("TaskbarCreated"));
ÀÌ·¸°Ô Çؼ..
Message Map ¿¡¼..
ON_REGISTERED_MESSAGE(g_uShellRestart, OnTrayShow)
ÀÌ·±½ÄÀ¸·Î ¸Þ¼¼Áö Çڵ鷯¸¦ ¼³Ä¡ÇϽðí..
LRESULT CMyDlg::OnTrayShow(WPARAM wParam, LPARAM lParam)
{
m_Tray.ShowTray(); //
TrayIconÀ» ´Ù½Ã º¸¿©ÁÝ´Ï´Ù. ShowTray ´Â ÀÓ½Ã.
}
ÀÌ·±½ÄÀ¸·Î ÇØÁÖ½Ã¸é µË´Ï´Ù..
Å×½ºÆ®¸¦ Çغ¸½Ã°í ½ÍÀ¸½Ã´Ù¸é..Ctrl+Alt+Del À» ´·¯¼..Explorer ¸¦ Á×À̼¼¿ä..
±×·¯¸é tray iconµéÀÌ »ç¶óÁúÅÙµ¥..
ÀÌ ¸Þ¼¼Áö¸¦ µî·ÏÇÑ ÇÁ·Î±×·¥µéÀº ..¿©ÀüÈ÷ ³²¾ÆÀÖ´Â ¸ð½ÀÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.
<ƯÁ¤ÇÑ ´ÙÀÌ¾Ë·Î±× ¹Ú½º¿¡ ¹öÆ°À» ´©¸¥ È¿°ú¸¦ ³»±â>
ÀÏ´Ü ´ÙÀÌ¾Ë·Î±× ¹Ú½ºÀÇ ÇÚµéÀ» ¾ò¾î¾ß°ÚÁö¿ä?
HWND hWnd;
hWnd = ::FindWindow("Ŭ·¡½º ¸í", "ŸÀÌƲ ¸í");
º¸Åë ´ÙÀ̾˷α׹ڽº´Â Ŭ·¡½º¸íÀÌ "#32770" ÀÌÁÒ,
µû¶ó¼ ::FindWindow("#32770", NULL); ÀÌ·¸°ÔÇϸé ŸÀÌƲ¿¡ °ü°è¾øÀÌ Ã¹¹ø° ´ÙÀÌ¾Ë·Î±× ¹Ú½º¸¦ ã¾Æ ÇÚµéÀ» ³Ñ°ÜÁÖÁÒ ±×´ã¿£ ¾Æ·¡¿Í °°ÀÌ Çغ¸±æ...
::PostMessage(hWnd, WM_COMMAND, IDOK, 0L); //"OK"
¹öÆ° ´©¸§
::PostMessage(hWnd, WM_COMMAND, IDNO, 0L); //"NO"
¹öÆ° ´©¸§
::PostMessage(hWnd, WM_COMMAND, IDCANCEL, 0L); //"CANCEL"
¹öÆ° ´©¸§
<ÇÁ·Î±×·¥³»¿¡¼ ÇÑ¿µÀüȯÀ» ÇÏ´Â ¹æ¹ý>
ÇØ´ç Çì´õÆÄÀÏ : imm.h ÇØ´ç ¶óÀ̺귯¸® ÆÄÀÏ : imm32.lib
Çѱ۸ðµå¿Í ¿µ¹®¸ðµå¸¦ ÀüȯÇÏ´Â ÇÔ¼ö´Â ´ÙÀ½ µÎ°¡ÁöÀÔ´Ï´Ù.
1. Çѱ۸ðµå·Î ÀüȯÇÏ´Â ¹æ¹ý
void CHanengClass::SetHanMode(HWND hWnd)
{
HIMC hIMC = ImmGetContext(hWnd);
DWORD dwConv, dwSent;
DWORD dwTemp;
ImmGetConversionStatus(hIMC,&dwConv,&dwSent);
dwTemp = dwConv & ~IME_CMODE_LANGUAGE;
dwTemp |= IME_CMODE_NATIVE;
dwConv = dwTemp;
ImmSetConversionStatus(hIMC,dwConv,dwSent);
ImmReleaseContext(hWnd,hIMC);
}
2. ¿µ¹®¸ðµå·Î ÀüȯÇÏ´Â ¹æ¹ý
void CHanengClass::SetEngMode(HWND hWnd)
{
HIMC hIMC = ImmGetContext(hWnd);
DWORD dwConv, dwSent;
DWORD dwTemp;
ImmGetConversionStatus(hIMC,&dwConv,&dwSent);
dwTemp = dwConv & ~IME_CMODE_LANGUAGE;
dwTemp |= IME_CMODE_ALPHANUMERIC;
dwConv = dwTemp;
ImmSetConversionStatus(hIMC,dwConv,dwSent);
ImmReleaseContext(hWnd,hIMC);
}
<DialogÀÇ Min/Max/Close Box¸¦ Run Time Show/Hide>
// ¾Æ·¡ÀÇ ¼¼ ¸Þ¼¼Áö Çڵ鷯´Â
// Dialog Client Area¿¡ ¸¸µç °¢ ButtonÀ» À§ÇÑ°ÍÀÔ´Ï´Ù.
// ÀÌ °¢ ButtonµéÀ» Ŭ¸¯Çϸé Title Bar»óÀÇ ÇØ´ç Box°¡ Show/HideµÇÁÒ.
void CTestDlg::OnBtnMin()
{
// TODO: Add your control notification handler code here
static BOOL bEnable = TRUE;
bEnable = bEnable ? FALSE : TRUE;
if(bEnable)
ModifyStyle(0,WS_MINIMIZEBOX);
else
ModifyStyle(WS_MINIMIZEBOX,0);
PostMessage(WM_NCACTIVATE,TRUE);
}
void CTestDlg::OnBtnMax()
{
// TODO: Add your control notification handler code here
static BOOL bEnable = TRUE;
bEnable = bEnable ? FALSE : TRUE;
if(bEnable)
ModifyStyle(0,WS_MAXIMIZEBOX );
else
ModifyStyle(WS_MAXIMIZEBOX ,0);
PostMessage(WM_NCACTIVATE,TRUE);
}
void CTestDlg::OnBtnClose()
{
// TODO: Add your control notification handler code here
static BOOL bEnable = TRUE;
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
bEnable = bEnable ? FALSE : TRUE;
if(bEnable)
pSysMenu->EnableMenuItem(SC_CLOSE,
MF_ENABLED | MF_BYCOMMAND);
else
pSysMenu->EnableMenuItem(SC_CLOSE,
MF_DISABLED | MF_BYCOMMAND);
}
}
<error LNK2001: unresolved external symbol _main>
error LNK2001: unresolved external symbol _main
ÀÌ ¿¡·¯°¡ ¹ß»ýÇÏ´Â °æ¿ì´Â Å©°Ô µÎ°¡Áö°¡ ÀÖ½À´Ï´Ù.
1. API·Î ÇÁ·Î±×·¡¹ÖÀ» óÀ½ ÇϽô ºÐµéÀÌ ÈçÈ÷ ÇÏ´Â ½Ç¼ö °°½À´Ï´Ù.
À©µµ¿ì¿¡¼ ÇÁ·Î±×·¥Àº Å©°Ô µÎ°¡Áö·Î ºÐ·ùÇÒ ¼ö ÀÖ½À´Ï´Ù.
µµ½ºÃ³·³ console â¿¡ ÅؽºÆ®¸¸À» Ãâ·ÂÇÏ´Â console ÇÁ·Î±×·¥°ú ÈçÈ÷ ¾²´Â GUI¸¦ °¡Áø ÇÁ·Î±×·¥ÀÌ ÀÖÁÒ.
Visual C++¿¡¼ ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé ¶§
Win32 Application : WinMain ÇÔ¼ö¿¡¼ ½ÃÀÛÇÏ°Ô µÇ´Â GUI ÇÁ·Î±×·¥
Win32 Console Application : main ÇÔ¼ö¿¡¼ ½ÃÀÛÇÏ´Â console ÇÁ·Î±×·¥
ÀÌ µÎ°¡Áö°¡ ÀÖ½À´Ï´Ù.
Á¦¸ñ¿¡ ÀûÀº °Í °°Àº ¿¡·¯°¡ ³ª´Â ºÐµéÀº ´ëºÎºÐ GUI ÇÁ·Î±×·¥À» ¸¸µå½Ã·Á°í ÇÏ°í WinMainÀº ¸¸µå¼Ì´Âµ¥, ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé ¶§ console applicationÀ» ¼±ÅÃÇϽŰ̴ϴÙ. ¹Ý´ë·Î WinMainÀÌ ¾ø´Ù°í ¿¡·¯°¡ ³ª¿À¸é GUI ÇÁ·ÎÁ§Æ®¸¦ ¼±ÅÃÇÏ°í¼ main ÇÔ¼ö¸¦ ÀÛ¼ºÇϽŠ°ÍÀÌ°ÚÁÒ.
ÀÚ, ±×·³ ¾î¶»°Ô ÇØ°áÇÏ´À³Ä. ¼³Á¤À» ¹Ù²ãÁÖ¸é µË´Ï´Ù. ÇÁ·ÎÁ§Æ® ¼¼ÆÃ(Alt + F7)¿¡¼ LinkÅÇÀ» ´©¸£¸é Á¦ÀÏ ¾Æ·¡¿¡ ¿¡µðÆ® ¹Ú½º°¡ º¸ÀÌÁÒ? Àß º¸¸é /subsystem:console À̶ó°í ½áÀÖÀ» °Ì´Ï´Ù. ÀÌ°É /subsystem:windows·Î ¹Ù²ãÁÖ¼¼¿ä. (¶Ç´Â »óȲ¿¡ µû¶ó¼ ±× ¹Ý´ë·Î ÇØÁÙ ¼öµµ ÀÖ°ÚÁÒ) ÀÌ ¿É¼ÇÀÇ ¿ªÇÒÀº ¸µÄ¿¿¡°Ô ÀÖ¾î¼ ÀÌ ÇÁ·Î±×·¥ÀÌ ¾î¶² ÇÔ¼ö·ÎºÎÅÍ ½ÃÀÛÇØ¾ß ÇÏ´ÂÁö¸¦ ¾Ë·ÁÁÖ´Â °Ì´Ï´Ù. ÀÌ ¿É¼ÇÀÌ consoleÀ̶ó¸é mainÀ», windows¶ó¸é WinMainÀ» ã¾Æ¼ ±× ÇÔ¼ö¿¡¼ºÎÅÍ ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÏ°Ô Çϴ°ÅÁÒ.
2. ATL¿¡¼ ÄÁÆ®·ÑÀ» ¸¸µé ¶§ ÀÌ ¿¡·¯°¡ ³¯ ¼ö ÀÖ½À´Ï´Ù.
µð¹ö±×¿¡¼´Â Àß ÄÄÆÄÀÏÀÌ µÇ´ø°Ô ¸±¸®Áî·Î ºôµåÇϸé Àú ¿¡·¯°¡ ³¯ ¼ö ÀÖ½À´Ï´Ù. ATL¿¡¼´Â »ý¼ºµÇ´Â ÄÚµåÀÇ Å©±â¸¦ ÃÖ¼ÒÈ Çϱâ À§Çؼ CRT (C RunTime) ÇÔ¼öÀÇ ÀϺθ¦ Á¦ÇÑÇÏ°í Àֱ⠶§¹®ÀÌÁÒ(Á¤È®È÷ ¸»ÇÏÀÚ¸é start up Äڵ带 ³ÖÁö ¾Ê½À´Ï´Ù). ±×·±µ¥ ÇÁ·ÎÁ§Æ®¿¡¼ ƯÁ¤ C ÇÔ¼ö¸¦ »ç¿ëÇϸé ATL¿¡¼ Á¦ÇÑÇÑ CRTÀÇ ±â´ÉÀÌ ÇÊ¿äÇØÁö°í µû¶ó¼ ¿¡·¯°¡ ³ª´Â°Ì´Ï´Ù.
ÀÌ ÇØ°áÃ¥µµ °£´ÜÇÕ´Ï´Ù.
a. ÇÁ·ÎÁ§Æ® ¼¼Æÿ¡¼ predefined keyword¸¦ ã¾Æ¼ _ATL_MIN_CRT¸¦ Áö¿öÁÖ¼¼¿ä.
b. ÃʱâÈ°¡ ÇÊ¿äÇÑ CRT ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¸¶¼¼¿ä. -_-; MSDN¿¡ µû¸£¸é strcmp´ë½Å lstrcmp¸¦ »ç¿ëÇÏ´Â ½ÄÀ¸·Î ÇÇÇØ°¥ ¼ö ÀÖ´Ù°í ÇÕ´Ï´Ù.
ÀÚ¼¼ÇÑ°Ç MSDN¿¡¼ _ATL_MIN_CRT¸¦ ã¾Æº¸¼¼¿ä. (»öÀο¡¼ ÀÔ·ÂÇÏ¸é ³ª¿É´Ï´Ù.)
1.¿ä¾à
ƯÁ¤ Thread ³ª Window ¿¡ ¾Æ¹«·± ¿µÇâÀ» ³¢Ä¡Áö ¾ÊÀ¸¸é¼ ´Ü¼øÈ÷ ±× Thread ³ª Window °¡ »ì¾ÆÀÖ´ÂÁö¸¦ È®ÀÎÇÏ°í ½ÍÀ»¶§ 'Ä£ÀýÇÑ ¸Þ¼¼Áö' ¸¦ »ç¿ëÇÏ½Ã¸é µË´Ï´Ù.
2.º»¹®
MSDN ÀÇ '»öÀÎ' ¿¡´Â ³ª¿ÍÀÖÁö ¾ÊÁö¸¸(MSDN ¿¡¼ ƯÀÌÇÏ´Ù ½ÍÀº°ÍµéÀº ÀϹÝÀûÀ¸·Î '»öÀÎ'¿¡ ¾øÁÒ. ^^), À©µµ¿ì ¸Þ¼¼Áö Á¾·ù¿¡ WM_NULL À̶ó´Â ¸Þ¼¼Áö°¡ Á¸ÀçÇÕ´Ï´Ù. MSDN À̳ª ´Ù¸¥ Ã¥¿¡¼ WM_NULL ¸Þ¼¼Áö¸¦ benign message ¶ó°í ¼Ò°³ÇÏ°í ÀÖ½À´Ï´Ù.
WinUser.H ÆÄÀÏ¿¡ ¾Æ·¡¿Í °°ÀÌ Á¤ÀǵǾî ÀÖ½À´Ï´Ù.
#define WM_NULL 0x0000
ÀÌ ¸Þ¼¼Áö´Â ¸Þ¼¼Áö Å¥¿¡ ³¯¶ó°¡±ä ÇÏÁö¸¸, ¾î´À À©µµ¿ì¿¡¼µµ ÀÌ ¸Þ¼¼Áö¸¦ ó¸®ÇÏÁö ¾Ê±â ¶§¹®¿¡ ±×³É ¸Þ¼¼Áö Å¥¿¡ µé¾î°¡±â¸¸ ÇÏ´Â ¸Þ¼¼ÁöÀÔ´Ï´Ù. ±×·³ À©µµ¿ì´Â ¿Ö ÀÌ·± ¸Þ¼¼Áö¸¦ ¸¸µé¾î ³õÀº °É±î¿ä? Debugging Application ¿¡¼ º¸¸é ÀÌ ¸Þ¼¼Áö¸¦ Á¤ÁöÇØÀִ ȤÀº ¸Þ¼¼ÁöÅ¥°¡ idle »óÅ¿¡ ÀÖ´Â thread ¸¦ ±ú¿ì±â À§Çؼ ( ¸¶Ä¡ ¼ú ¸Ô±â Àü¿¡ ¹ä¸Ô´Â °Íó·³..) »ç¿ëÇÏ°í ÀÖ½À´Ï´Ù. ¶ÇÇÑ ÇØ´ç À©µµ¿ì°¡ Á¤»óÀûÀ¸·Î ¸Þ¼¼Áö¸¦ ¹ÞÀ» ¼ö ÀÖ´Â »óÅÂÀÎÁö ´Ü¼øÈ÷ È®Àθ¸ ÇÏ°í ½ÍÀ»¶§ ( ÀÌ·± °æ¿ì°¡ Á¾Á¾Àִµ¥, ¾î¶² ¸Þ¼¼Áö¸¦ º¸³»¾ß ÇÒÁö ³°¨ÇÒ¶§°¡ ÀÖ½À´Ï´Ù.
3.¿¹Á¦
// ÀÏ¹Ý ¸Þ¼¼Áö º¸³»´Â°Í°ú °°½À´Ï´Ù.
PostMessage(m_hwndTarget, WM_NULL, 0,0);
- the end of this article -