<¹æÆÐ ¸ð¾ç À©µµ¿ì ¸¸µé±â>

 À©µµ¿ìÀÇ ¸ð¾çÀ» °³¼ºÀÖ°Ô ¸¸µé±â À§ÇØ ³ëÅÏ Å©·¡½Ã °¡µåÀÇ ¸ð¾çó·³ ¹æÆÐ ¸ð¾çÀÇ À©µµ¿ì¸¦ ¸¸µé·Á°í ÇÕ´Ï´Ù. 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¿¡¼­ ¸Þ´º¸¦ Á¦°ÅÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß Çϳª¿ä?

°£´ÜÇÕ´Ï´Ù. 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 -