À©µµ¿ìÀÇ ¸ð¾çÀ» °³¼ºÀÖ°Ô ¸¸µé±â À§ÇØ ³ëÅÏ Å©·¡½Ã °¡µåÀÇ ¸ð¾çó·³ ¹æÆÐ ¸ð¾çÀÇ À©µµ¿ì¸¦ ¸¸µé·Á°í ÇÕ´Ï´Ù. SetWindowRgn() ÇÔ¼ö¸¦ »ç¿ëÇ϶ó°í ÇÏ´øµ¥ ÀÌ ÇÔ¼ö´Â CreateEllipsRgn() µîÀÇ ÇÔ¼ö¸¦ ÀÌ¿ëÇØ ¿µ¿ªÀ» ¸¸µé¾î¾ß ÇÏ´õ±º¿ä. ÇÏÁö¸¸ ÀÌ·± ¿µ¿ªÀ» ¸¸µå´Â ÇÔ¼ö°¡ ¸¸µé ¼ö ÀÖ´Â ¿µ¿ªÀÇ ¸ð¾çÀº Ÿ¿ø, »ç°¢Çü, µÕ±×·± »ç°¢Çü, ´Ù°¢Çü, ´ÙÁß´Ù°¢Çü µîÀÇ ¸ð¾ç ¹Û¿¡ ¾ÈµË´Ï´Ù. ÀÌ·± Á¤µµÀÇ ÇÔ¼ö·Î ÀÚÀ¯·Î¿î ¸ð¾çÀÇ À©µµ¿ì¸¦ Á¦ÀÛÇÒ ¼ö´Â ¾ø³ª¿ä?
°¡²û ÀÌ»óÇÑ ¸ð¾çÀÇ À©µµ¿ì¸¦ º¸°Ô µÉ °ÍÀÔ´Ï´Ù. ´ëÇ¥ÀûÀ¸·Î ÀÚÁÖ º¸°Ô µÇ´Â °ÍÀÌ MP3 Ç÷¹À̾î·Î °¢±¤¹Þ°í ÀÖ´Â WinAmp¸¦ ¿¹¸¦ µé ¼ö ÀÖÁÒ. ÀÌ·± À©µµ¿ìµéÀ» º¸¸é ¾î¶»°Ô ±¸ÇöÇß´ÂÁö Âü ±Ã±ÀÇÕ´Ï´Ù. ÀÌ·± Á¾·ùÀÇ À©µµ¿ìµéÀº ´ëºÎºÐ À©µµ¿ì¿¡ ºñÆ®¸Ê(Bitmap)À» µ¤¾î ¾º¿ö ±¸ÇöÇÕ´Ï´Ù. ÀÏ´Ü ÀÌ·± Á¾·ùÀÇ À©µµ¿ì¸¦ ±¸ÇöÇÏ·Á¸é ÁÂÇ¥ ¿µ¿ªÀ» °è»êÇØ¾ß µÇ±â ¶§¹®¿¡ »ó´çÈ÷ ÀܼÕÀÌ ¸¹ÀÌ °¡°Ô µË´Ï´Ù. ±¸Çö¿ø¸®´Â ÀÌ·¸½À´Ï´Ù.¸ÕÀú ¸î°¡Áö NC(Non-Client ¿µ¿ª)¿¡ ´ëÇÑ ¸Þ½ÃÁöµéÀ» ó¸®ÇØ¾ß ÇÕ´Ï´Ù.
À©µµ¿ìÀÇ Ä¸¼Ç¹Ù¸¦ º¯°æÇÏ·Á¸é ¿ì¼± À©µµ¿ì°¡ È°¼ºÈµÇ´Â °æ¿ì ¸ðµÎ ¼¼ °¡Áö°¡ Àִµ¥ ÀÌ·² ¶§ ĸ¼Ç ºÎºÐÀ» WindowDC·Î ±×·ÁÁÖ¸é µË´Ï´Ù(WindowDC¿¡ ´ëÇÑ ¼³¸íÀº MSDNÀ» ÂüÁ¶). PreCreate ¸Þ½ÃÁö Çڵ鷯¿¡¼ À©µµ¿ì ½ºÅ¸ÀÏÀ» WS_VISIBLE, WS_CAPTION, WS_THICKFRAME ÀÌ ¼¼°¡Áö ½ºÅ¸Àϸ¸ ÀÖ°Ô Á¤ÀÇÇÏ°í, ´ÙÀ½°ú °°ÀÌ ¸ÞÀÎ ÇÁ·¹ÀÓ ¸Þ½ÃÁö Çڵ鷯¿¡ Á¤ÀÇÇϸé ù° ÆĶó¹ÌÅÍ nStart´Â ¼¼ °¡ÁöÀÇ ÆĶó¹ÌÅÍ°¡ ³Ñ¾î¿É´Ï´Ù.
afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
WA_ACTIVE : Ŭ¸¯ ÀÌ¿Ü ´Ù¸¥ À©µµ¿ì°¡ Àξ×Ƽºê µÅ ÀÚ½ÅÀÌ z-orderÀÇ ¸Ç ¾ÕÀ¸·Î ¿ÔÀ»
¶§ ¹ß»ý
WA_CLICKACTIVE : Ŭ¸¯¿¡ ÀÇÇØ ¾×ƼºêµÉ ¶§ ¹ß»ý
WA_INACTIVE : Àξ×Ƽºê »óÅÂ
ÀÌ ÆĶó¹ÌÅÍ °ªÀ» üũÇÏ°í ¸ðµç °æ¿ì¿¡ ´ëÇØ ¾Ë¸ÂÀº ±×¸²À» ±×·ÁÁÖ¸é µË´Ï´Ù. ±×¸²À» ±×¸± ¶§ ¾à°£ÀÇ Å×Å©´ÐÀÌ ÇÊ¿äÇÕ´Ï´Ù. ºñÆ®¸ÊÀ» Á¦¾îÇØ º» µ¶ÀÚ´Â ¾Ë°ÚÁö¸¸ ¸¹Àº ¾çÀÇ ºñÆ®¸ÊÀ» ±×¸± °æ¿ì ȸéÀÇ ±ô¹ÚÀÓ Çö»óÀ» º¼ ¼ö Àִµ¥, ÀÌ·± ±ô¹ÚÀÓ Çö»óÀ» ¾ø¾Ö·Á¸é memDC¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù. memDC¸¦ »ç¿ëÇÏ´Â °ÍÀº ¿ì¼± ¸Þ¸ð¸® »ó¿¡ °¡»óÀÇ ºñÆ®¸ÊÀ» ¸¸µé°í °Å±â¿¡ ¸ðµç ±×¸²À» ±×¸° ´ÙÀ½ ȸ鿡 ÇÑ ¹ø¿¡ »Ñ¸®¸é È¸é ±ô¹ÚÀÓÀÌ ¾ø¾îÁö°Ô µË´Ï´Ù.
CRect rect;
GetWindowRect(&rect);
CBitmap bmpCaption; //
ĸ¼Ç ±×¸²À» ±×¸®´Â ºñÆ®¸Ê
bmpCaption.LoadBitmap(IDB_CAPTION);
CWindowDC
capDC(this); // â¿¡ ±×¸± DC¸¦ ¼±ÅÃ
CDC capMemDC;
CDC
bufDC;
capMemDC.CreateCompatibleDC(&capDC);
CBitmap bufBitmap; //
¸Þ¸ð¸® »óÀÇ °¡»ó ºñÆ®¸Ê
// À©µµ¿ì Å©±â¸¸ÅÀÇ ¸Þ¸ð¸® ºñÆ®¸ÊÀ» ¸¸µç´Ù.
bufBitmap.CreateCompatibleBitmap(&capDC,
rect.Width(), 48);
CBitmap* pOldBitmap1 = (CBitmap*)bufDC.SelectObject(&bufBitmap);
CBitmap*
pOldBitmap2 = (CBitmap*)capMemDC.SelectObject(&bmpCaption);
bufDC.BitBlt(0,
0, 120, 48, &capMemDC, 0, 0, SRCCOPY);
for(int i = 120; i<rect.Width()-120;
) {
bufDC.BitBlt(i, 0, 10, 48, &capMemDC,
100, 0, SRCCOPY);
i += 10; //
Å©±â°¡ 10 Çȼ¿ÀÎ ºñÆ®¸ÊÀ» ĸ¼Ç¿¡ ±×¸°´Ù.
}
capDC.BitBlt(0, 0,
rect.Width(), 48, &bufDC, 0, 0, SRCCOPY);
ÀÌ·± ½ÄÀ¸·Î ºñÆ®¸Ê ÆÄÀÏÀ» Çڵ鸵ÇÏ°í WM_NCPAINT ¸Þ½ÃÁö¿¡¼ ÀûÀýÈ÷ ó¸®ÇØÁÖ¸é µË´Ï´Ù.
afx_msg OnNcCalcsize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
À§ÀÇ ÇÔ¼ö´Â WM_NCCALCSIZE ¶ó´Â ¸Þ½ÃÁö Çڵ鷯Àε¥, ÀÌ ÇÔ¼öÀÇ µÎ ¹ø° ÇÔ¼ö ÀÎÀÚ´Â CRectÀÌ ¼¼ °³·Î ±¸¼ºµÈ structÀÌ°í ÀÌ Áß¿¡ ù ¹ø°°¡ Ŭ¶óÀ̾ðÆ® ¿µ¿ªÀ» Ç¥½ÃÇÏ´Â ºÎºÐÀÔ´Ï´Ù. ÀÌ ÀÎÀÚÀÇ °ªÀ» Á¶Á¤ÇØÁÖ¸é ¿øÇϴ Ŭ¶óÀ̾ðÆ® ¿µ¿ªÀ¸·Î Á¶Á¤ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.
afx_msg UINT OnNcHitTest(CPoint point);
afx_msg UINT OnHitTest(. . . .
.);
ÀÌ·± ½ÄÀ¸·Î À©µµ¿ìÀÇ ¸ð¾çÀ» ÀÚÀ¯·Ó°Ô ¸¸µé ¼ö ÀÖ½À´Ï´Ù. À©µµ¿ì¿¡ ºñÆ®¸ÊÀ» ¾º¿ö À©µµ¿ì ¸ð¾çÀ» ¹Ù²Ù¸é ÇÁ·¹ÀÓ¿÷¿¡¼ ´õ ÀÌ»ó üũ¸¦ ¸øÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ÀÏÁ¤ÇÑ ¿µ¿ª¿¡ ¸¶¿ì½º°¡ µé¾î¿Ô´ÂÁö, Ŭ¸¯ÀÌ µÆ´ÂÁö µîµîÀÌÁö¿ä. ±×·¸´Ù¸é À̰͵µ ´Ù ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù. ÀÌ·² ¶§ À§ÀÇ ¸Þ½ÃÁö Çڵ鷯¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù. ¿ì¸®°¡ ºñÆ®¸ÊÀ» ¾º¿ö ¸¸µç À©µµ¿ì¿¡ ¾î´À ¿µ¿ª¿¡ ¸¶¿ì½º, Å°º¸µå µîÀÇ À̺¥Æ®°¡ ¹ß»ýÇß´ÂÁö¸¦ üũÇÏ¸é µË´Ï´Ù. ¾Õ¼ ¼µÎ¿¡¼ ¸»ÇÑ Áö·çÇÑ ÀÛ¾÷ÀÌ ¹Ù·Î ÀÌ°ÍÀÔ´Ï´Ù. ÀÌ·± ½ÄÀ¸·Î ĸ¼Ç ºÎºÐ(À§ÂÊ), »óŹ٠ºÎºÐ(¾Æ·¡ÂÊ), Ŭ¶óÀ̾ðÆ® ºÎºÐ(ºä), Å׵θ® ºÎºÐ µî ¾î´À ºÎºÐÀ̳ª ¸ð¾çÀ» ÀÚÀ¯·ÎÀÌ º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Ù º¸¸é À©µµ¿ì ȸéÀÌ ¹Ø¿¡ ±ò¸®°í ±× À§¿¡¼ ¿©·¯ °¡Áö ÀϵéÀÌ ¹ú¾îÁöÁö ¾Ê½À´Ï±î? ±×·±µ¥ ±× À©µµ¿ì ȸéÀ» ¾Èº¸ÀÌ°í ±×³É ÄÄÆ÷³ÍÆ®µé¸¸ º¸ÀÌ°Ô ÇÏ·Á¸é ¾î¶² ¼³Á¤À» ÇØ¾ß Çϳª¿ä? Áï À©µµ¿ì ȸéÀ» Åõ¸íÇÏ°Ô Ã³¸®ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÀÖ´ÂÁö¿ä.
Åõ¸íÇÑ À©µµ¿ì´Â ¸¹ÀÌ »ç¶÷µéÀÌ ÇÑ ¹øÂë Çغ¸·Á°í ÇÏ´Â °ÍÀε¥, ´äºÎÅÍ ¸»ÇÏÀÚ¸é °¡´ÉÇϱ⵵ ÇÏ°í ±×·¸Áö ¾Ê±âµµ ÇÕ´Ï´Ù. Åõ¸íÀÇ Àǹ̰¡ ¹è°æÀÌ ±×³É º¸Àδٴ °ÍÀ¸·Î º¸¸é ¹è°æÀ» Ä¥ÇÒ ¶§ ¾Æ¹«°Íµµ ¾È ±×¸®¸é µÞ ¹è°æÀÌ ±×³É º¸ÀÌÁö¿ä. ±×·±µ¥ ÀÌ·¸°Ô ÇÏ¸é ±× µÞ ¹è°æÀÌ °è¼Ó º¸°üµÅ¼ ¸¶Ä¡ ´Ù¿îµÈ À©µµ¿ì¸¦ º¸´Â °Í °°¾Æ¼ ¾î»öÇÕ´Ï´Ù.
´Ù¸¥ ¹æ¹ýÀ¸·Î´Â SetWindowRgnÀ» »ç¿ëÇØ »ç°¢ÇüÀÌ ¾Æ´Ñ À©µµ¿ì¸¦ ¸¸µå´Â °ÍÀÔ´Ï´Ù. ÀÌ·¸°Ô Çϸé Åõ¸íÇÑ À©µµ¿ì°¡ ¾Æ´Ï¶ó ±¸¸Û¶Õ¸° À©µµ¿ì¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ±×·°Àú·° Åõ¸íÇÑ È¿°ú¸¦ º¼ ¼ö ÀÖ½À´Ï´Ù¸¸, ¿©±â¿¡´Â Ä¡¸íÀûÀÎ ´ÜÁ¡ÀÌ ÀÖ½À´Ï´Ù. ÀÚ½Ä À©µµ¿ì´Â ºÎ¸ð À©µµ¿ì°¡ º¸ÀÌ´Â °÷¿¡¸¸ º¸ÀÏ ¼ö ÀÖ´Ù´Â °ÍÀÌÁÒ. ±¸¸Û ¶Õ¸° °÷¿¡´Â ÀÚ½Ä À©µµ¿ì°¡ À־ ±×°ÍÀÌ È¸é¿¡ ³ªÅ¸³ªÁö ¾Ê½À´Ï´Ù. ÀÌ·² °æ¿ì Á» º¹ÀâÇØÁöÁö¸¸ ¹æ¹ýÀÌ ¾øÁø ¾Ê½À´Ï´Ù. ÀÚ½Ä À©µµ¿ì°¡ ÀÖ´Â °÷¿¡ ºÎ¸ð À©µµ¿ì°¡ º¸ÀÌ°Ô ¸¸µé¸é µË´Ï´Ù. ¿¹¸¦ µé¾î ÀÚ½Ä À©µµ¿ì°¡ 2°³°¡ ÀÖ°í °¢°¢
RECT = { 100, 100, 200, 200 }, { 100, 300, 200, 400 }
¿¡ ÀÖ´Ù¸é ºÎ¸ð À©µµ¿ì¸¦ ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÕ´Ï´Ù.
HRGN hRgn1 = CreateRectRgn( 100, 100, 200, 200 );
HRGN hRgn2 = CreateRectRgn(
100, 300, 200, 400 );
CombineRgn( hRgn1, hRgn1, hRgn2, RGN_OR );
SetWindowRgn(
hParentWnd, hRgn1, TRUE );
ÀÌÁ¦ ºÎ¸ð À©µµ¿ìÀÇ ´Ù¸¥ ºÎºÐÀº ¸ðµÎ ±¸¸ÛÀÌ ¶Õ¸®°í ´ÜÁö µÎ °³ÀÇ ÀÚ½Ä À©µµ¿ì ¹Ù·Î ¹Ø¿¡¸¸ ¸·ÇôÀÖ´Â ±×·± À©µµ¿ì°¡ µË´Ï´Ù. ½ÇÁ¦·Î »ý±ä ¸ð½ÀÀ» º¸ÀÚ¸é ³×¸ðÄ µÎ °³°¡ ÀÖÀ¸´Ï±î À©µµ¿ì 2°³°¡ ¾Æ´Ñ°¡ ÇÏ°ÚÁö¸¸ ±×·¸Áö ¾Ê½À´Ï´Ù. ¿©±â¿¡ ÀÚ½Ä À©µµ¿ì 2°³¸¦ ¸¸µé¸é º¸±â¿¡´Â ÀÚ½Ä À©µµ¿ì 2°³°¡ °øÁß¿¡ ¶° ÀÖ´Â °Í °°ÀÌ º¸ÀÌ°Ô µË´Ï´Ù.
<ÅؽºÆ® ÆÄÀÏ¿¡¼ ÇÑ ÁÙ¾¿ Àоî¿Í Ãâ·ÂÇÏ·Á¸é>
ºñÁÖ¾ó C++¿¡¼ ŸÀÚ¿¬½À ÇÁ·Î±×·¥À» ¸¸µé·Á ÇÕ´Ï´Ù. ÅؽºÆ® ÆÄÀÏ¿¡ ÀÖ´Â ¹®ÀåÀ» ÇÑ ÁÙ¾¿ °¡Á®¿Í Ãâ·ÂÇÏ·Á Çϴµ¥,
±î¸¶±Í ³¯ÀÚ ¹è ¶³¾îÁø´Ù<EnterÅ°>
¼ö¿°ÀÌ ¼®ÀÚ¶óµµ ¸Ô¾î¾ß.....<EnterÅ°>
À§¿Í °°Àº ÅؽºÆ® ÆÄÀÏÀÌ ÀÖÀ» ¶§ ÇÑ ÁÙ¾¿ Àоî¿Í Ãâ·ÂÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÏ´ÂÁö ¾Ë°í ½Í½À´Ï´Ù(EnterÅ° ¾ÕÀÇ ¹®Àå±îÁö¸¸ Àоî¿À°í ´ÙÀ½ ÁÙµµ EnterÅ° ¾ÕÀÇ ¹®Àå±îÁö¸¸ Àоî¿À´Â ¹æ¹ý).
´ÙÀ½À» Âü°íÇϼ¼¿ä.
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include
<afxtempl.h>
CFile m_File;
CFileStatus status;
char *cBuff,
*token, seps[] = "\r\n";
CString data, msg;
CStringArray m_sLineStringArray;
if(m_File.Open(m_sDataFile,
CFile::modeRead, NULL) == 0 ) {
msg.Format("Can't
Open %s File!", m_sDataFile);
AfxMessageBox(msg,
MB_ICONEXCLAMATION);
return FALSE;
}
m_File.GetStatus(
status );
// µ¥ÀÌÅÍ ÆÄÀÏÀ» ÀÐÀ½
cBuff = (char *)calloc(status.m_size
+ 1, sizeof(char));
m_File.Read(cBuff, status.m_size);
data = cBuff;
free(cBuff);
token
= strtok((LPTSTR)(LPCTSTR)data, seps);
m_sLineStringArray.RemoveAll();
while(token
!= NULL) {
m_sLineStringArray.Add(token);
token
= strtok(NULL, seps);
}
// ÆÄÀÏ ´ÝÀ½
m_File.Close();
MFC¿¡¼ ¸Þ´º¸¦ Á¦°ÅÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß Çϳª¿ä?
°£´ÜÇÕ´Ï´Ù. MFC¿¡¼ ¸Þ´º¸¦ ¾ø¾Ö·Á¸é BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)¿¡¼ csÀÇ cs.hMenu = NULL ·Î ÇØÁÖ½Ã¸é ¸Þ´º°¡ ¶ßÁö ¾Ê½À´Ï´Ù.
µµ½º ½ÃÀý¿¡´Â ÀÎÅÍ·´Æ®¸¦ ÅëÇØ ¿øÇÏ´Â µð½ºÅ© ¼½ÅÍ·ÎÀÇ Àб⠾²±â°¡ ½±°Ô ÇØ°áµÆ¾ú´Âµ¥ À©µµ¿ì 95»ó¿¡¼´Â ÀÌ°ÍÀ» ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ¸ð¸£°Ú½À´Ï´Ù. ÇØ´ç ÀÎÅÍ·´Æ®µµ À©µµ¿ì 95¿¡¼´Â ¸·¾Æ³õÀº °Í °°°í ³ëÅÏ À¯Æ¼¸®Æ¼Á¶Â÷ µð½ºÅ© ¿¡µðÅÍ°¡ µµ½º¿ëÀ¸·Î¸¸ ¹öÀü¾÷µÇ°í À©µµ¿ì ¿ëÀ¸·Î´Â ³ª¿ÀÁö ¾Ê´Â °Í °°´øµ¥, À©µµ¿ì 95¿¡¼´Â ¼½ÅÍ·ÎÀÇ ¾²±â ¹æ¹ýÀÌ ¾ø´ÂÁö ±Ã±ÝÇÕ´Ï´Ù. ÀÌÀü ÇÁ·Î±×·¥ÀÌ ±ä ÆÄÀÏÀ̸§ ±¸Á¶¸¦ Æı«ÇÏÁö ¸øÇϵµ·Ï ÀÌÀüÀÇ µð½ºÅ© Á÷Á¢ ¿¢¼¼½º µ¿ÀÛÀ» ¸·¾Æ³õ¾Ò´Ù¸é ´ç¿¬È÷ ´Ù¸¥ ±æÀ» ¿¾î³õ¾ÒÀ» °Í °°Àºµ¥¿ä?
MS µµ½º´Â ¸®¾ó¸ðµå(Real-Mode)¿¡¼ µ¿ÀÛÇϸç À©µµ¿ì 95ÀÌ»óÀº ÇÁ·ÎÅØƼµå ¸ðµå¿¡¼ ÀÛµ¿ÇÕ´Ï´Ù. º¸È£ ¸ðµå¿¡¼ ¸»ÇϽŠ°Í°ú °°Àº ÀÛ¾÷À» ÇÏ·Á¸é Ưº°ÇÑ ±ÇÇÑ(ring0)ÀÌ ÇÊ¿äÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î À©µµ¿ì ¾ÖÇø®ÄÉÀ̼ÇÀº ring3¿¡¼ µ¿ÀÛÇϹǷΠ¸»ÇϽŠ°Í°ú °°Àº ÀÛ¾÷À» ÇÏ·Á¸é ÇÁ·ÎÅØ¼Ç ¿¡·¯(Protection Error)°¡ ¹ß»ýÇÒ °ÍÀÔ´Ï´Ù.
±×¿Í °°Àº ±â´ÉÀ» ±¸ÇöÇÏ·Á¸é µå¶óÀ̹ö¸¦ ÀÛ¼ºÇؾßÇÕ´Ï´Ù. VXD ȤÀº WDMÀ» ÀÛ¼ºÇØ¾ß ÇÑ´Ù´Â ¸»ÀÌÁÒ. ÀÚ¼¼ÇÑ ³»¿ëÀº ÀÎÅÚ ¾ÆÅ°ÅØó ¼ÒÇÁÆ®¿þ¾î µðº§·ÎÆÛ ¸Å´º¾ó(www.intel.com)°ú ½Ã½ºÅÛ ÇÁ·Î±×·¡¹Ö for À©µµ¿ì 95/98 DDK ¹®¼, NT DDK ¹®¼ µîÀ» Âü°íÇϱ⠹ٶø´Ï´Ù.
Âü°í·Î ÀÎÅÚ x86 °è¿ÀÇ ÇÁ·Î¼¼¼´Â ¼¼ ´Ü°èÀÇ Æ¯±Ç ·¹º§(Privilege Level)À» °¡Áö°í ÀÖÀ¸¸ç, ring0, ring3 ó·³ ºÒ¸®¿ó´Ï´Ù. ring0 °¡ Ư±Ç ·¹º§ÀÌ °¡Àå ³ôÀ¸¸ç, µð¹ÙÀ̽º µå¶óÀ̹ö µîÀÌ ring0 ¿¡¼ µ¿ÀÛÇÕ´Ï´Ù.
< <Ctrl-Alt-Del>·Î ÇÁ·Î±×·¥À» Á¾·áÇÏÁö ¸øÇÏ°Ô>
<Ctrl-Alt-Del>·Î ÇÁ·Î±×·¥ Á¾·áÇÏÁö ¸øÇÏ°Ô ¸¸µé ¼ö ÀÖ´Â ¹æ¹ýÀ» ¾Ë°í ½Í½À´Ï´Ù. WM_KEYDOWNÀ» ÀÌ¿ëÇØ ÀÔ·ÂµÈ Å°¸¦ Tab Å°·Î º¯È¯½ÃÄѵµ ½ÇÇàµÇ´øµ¥, ¾î¶»°Ô ÇØ¾ß Çϳª¿ä?
´ÙÀ½°ú °°ÀÌ Çغ¸¼¼¿ä.
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, TRUE, NULL, NULL);
±×¸®°í ÇØÁ¦ÇÒ ¶§´Â ´ÙÀ½°ú °°ÀÌ ÇÕ´Ï´Ù.
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, FALSE, NULL, NULL);
¿©±â¼ ÁÖÀÇÇÒ Á¡Àº ÀÌ°Ç ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿¡¼´Â ÀüÇô ±ÇÀåÇÑ ÀûÀÌ ¾ø´Â º¯Ä¢ÀûÀÎ ¹æ¹ýÀ̶ó´Â °ÍÀÔ´Ï´Ù. À̸¦ Á¦´ë·Î ±¸ÇöÇÏ·Á¸é ¸Þ½ÃÁö ÈÄÅ·À» °øºÎÇØ¾ß ÇÕ´Ï´Ù.
ÇöÀç ½Ã°£À» Àоî ȸ鿡 Ç¥½ÃÇÏ´Â °ÍÀ» ÇÏ°í Àִµ¥, ¿¬¿ùÀϽúÐÃÊ µîÀ» ³ªÅ¸³»°í 1000ºÐÀÇ 1ÃÊ(milliseconds) ´ÜÀ§µµ Ç¥ÇöÇÏ°í ½ÍÀºµ¥ ¾î¶»°Ô ÇØ¾ß ÇÏ´ÂÁö ¹æ¹ýÀ» ¾Ë·ÁÁÖ¼¼¿ä.
´ÙÀ½°ú °°ÀÌ ÇÏ¸é µË´Ï´Ù. º¼·£µå C++À» ÀÌ¿ëÇÑ´Ù¸é ¾Æ·¡ÀÇ _timeb ±¸Á¶Ã¼¿Í _ftime ÇÔ¼ö ´ë½Å¿¡ timeb ±¸Á¶Ã¼¿Í ftime ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. MSÀÇ ÄÄÆÄÀÏ·¯(¿¹¸¦ µé¾î Visual C++) ¿¡¼´Â ¾Æ·¡ÀÇ ÄÚµå´ë·Î ¹®Á¦¾øÀÌ µ¹¾Æ°¥°Ì´Ï´Ù.
/* FTIME.C : This program uses _ftime to obtain the current
*
time and then stores this time in timebuffer.
*/
#include <stdio.h>
#include
<sys\timeb.h>
#include <time.h>
void main(void)
{
struct
_timeb timebuffer;
char *timeline;
_ftime(
&timebuffer );
timeline = ctime( &(timebuffer.time)
);
printf("The time is %.19s.%hu %s",
timeline, timebuffer.millitm,
&timeline[20]
);
}
=== output ===
The time is Tue Mar 21 15:26:41.341
1995
µµÅ¥¸ÕÆ® Ŭ·¡½º¿¡¼ ºä Ŭ·¡½ºÀÇ º¯¼ö¿¡ °ªÀ» ¹Ù²ãÁÖ·Á°í ÇÕ´Ï´Ù. ¾î¶»°Ô ÇØ¾ß Çϳª¿ä.
ºä(View)´Â µµÅ¥¸ÕÆ®(Doc)ÀÇ Æ÷ÀÎÅ͸¦ °¡Áö°í ÀÖ¾î GetDocument·Î µµÅ¥¸ÕÆ®ÀÇ ÀÎÀÚµéÀ» »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ µµÅ¥¸ÕÆ®¿¡¼ ºä¸¦ »ç¿ëÇÏ·Á¸é ¿ì¼± SDIÀÎ °æ¿ì¿¡´Â ¸ÞÀÎ ÇÁ·¹ÀÓÀÇ Æ÷ÀÎÅ͸¦ ¾ò°í °Å±â¼ ºä Ŭ·¡½ºÀÇ Æ÷ÀÎÅ͸¦ ¾ò¾î¾ß ÇÕ´Ï´Ù.
CView *pView;
pView = (CView*)((CMainFrame*)(AfxGetApp()->m_pMainWnd))->GetActiveView();
MDIÀÎ °æ¿ì¿¡´Â
CMDIFrameWnd *pFrame =
(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
CMDIChildWnd
*pChild =
(CMDIChildWnd*)pFrame->GetActiveFrame();
CView
*pView = (CView*)pChild->GetActiveView();
À§¿Í °°Àº ¹æ½ÄÀ¸·Î ¾ò¾î¿À¸é µË´Ï´Ù. ±×·¯¸é ¼·Î ÂüÁ¶°¡ °¡´ÉÇÕ´Ï´Ù.
- the end of this article -