ÀÛ°¡K 4¿ù17ÀÏ 5:44:05
GetWindowLongPtr, SetWindowLongPtr ÇÔ¼ö´Â À©µµ¿ìÀÇ ¿©ºÐ ¸Þ¸ð¸®¸¦ ÀÐ°í ¾²´Â ÇÔ¼öÀÔ´Ï´Ù. °ü·Ã ÀÌ·ÐÀº ¿¹Á¦ ¹Ù·Î À§¿¡ ¼³¸íµÇ¾î ÀÖ°í¿ä ÀÌ µÎ ÇÔ¼ö°¡ µ¿ÀÛÇϱâ À§ÇØ ¿©ºÐ ¸Þ¸ð¸®¾çÀ» ¸ÕÀú ÁöÁ¤ÇØ µÓ´Ï´Ù.
WndClass.cbWndExtra=4;
ÀÌ·¯¸é °¢ À©µµ¿ì¹ú·Î 4¹ÙÀÌÆ®¾¿ÀÇ ¸Þ¸ð¸®¸¦ °¡Áö°Ô µÇ°í ÀÌ À§Ä¡ÀÎ 0¹ø À妽º°¡ °ð 4¹ÙÀÌÆ® º¯¼ö°¡ µË´Ï´Ù. µÎ ÇÔ¼ö´Â ÀÌ °ªÀ» ÀÐ°í ¾¸À¸·Î½á À©µµ¿ì °íÀ¯ÀÇ Á¤º¸¸¦ ÀúÀåÇÕ´Ï´Ù. GetWindowLongPtr(hWnd,0) È£Ãâ¹®Àº 0¹ø ¿©À¯ ¸Þ¸ð¸®ÀÇ °ªÀ» Àд´ٴ ¶æÀÌ°í ±× °ªÀÌ 0 ¾Æ´Ï¸é Ÿ¿øÀ» 0ÀÌ¸é »ç°¢ÇüÀ» ±×¸²À¸·Î½á À©µµ¿ìÀÇ »óŸ¦ º¯°æÇÕ´Ï´Ù.
SetWindowLongPtr(hWnd, 0, !GetWindowLongPtr(hWnd,0)); È£Ãâ¹®Àº ÇöÀç »óŸ¦ ÀÐ¾î ¹Ý´ë·Î µÚÁý¾î ´Ù½Ã ÀúÀåÇÑ´Ù´Â ¶æÀÌ¸ç º¯¼ö·Î Ä¡È¯ÇØ¼ »ý°¢Çϸé a = !a·Î »ý°¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. À̶§ ! ¿¬»êÀÚ´Â ¿©ºÐ ¸Þ¸ð¸®¿¡ ³Ö¾îµÐ°ªÀ» ¿ì¸®°¡ ³í¸®ÀûÀº ÁøÀ§ÇüÀ¸·Î Ãë±ÞÇϱ⠶§¹®Àε¥ ¹Ý´ë·Î µÚÁý´Â´Ù´Â Á¡¿¡ º° ¹®Á¦´Â ¾ø½À´Ï´Ù. ´Ù¸¸ À©µµ¿ì ¿î¿µÃ¼Á¦´Â ŸÀÔ¿¡ ¾ö°ÝÇÏÁö ¾ÊÀºµ¥ ºñÇØ C++ ¾ð¾î´Â ŸÀÔ Ã¼Å©¸¦ ¾ö°ÝÇÏ°Ô Çϱ⠶§¹®¿¡ Á¤¼ö¿¡ ! ¿¬»êÀÌ ÀûÀýÈ÷ ¾Ê´Ù°í °æ°íÇÏ´Â °ÍÀÔ´Ï´Ù. ~¸¦ ¾²´Â °ÍÀº Á¤È®ÇÏÁöµµ ¾ÊÀ» »Ó´õ·¯ µ¿ÀÛÇÏÁöµµ ¾Ê½À´Ï´Ù. Á¤È®ÇÏ°Ô ±â¼úÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇØ¾ß ÇÕ´Ï´Ù.
SetWindowLong(hWnd, 0, GetWindowLong(hWnd, 0)==0 ?1:0);
¿©ºÐ ¸Þ¸ð¸®´Â ÀÓÀÇÀÇ ¸Þ¸ð¸® ¿µ¿ªÀ̸ç ŸÀÔÀÌ µû·Î ¾ø½À´Ï´Ù. ³Ö°í ¾²´Â »ç¶÷ÀÌ ¾Ë¾Æ¼ ÀÐ°í ¾µ »ÓÀÌ¸ç ¿î¿µÃ¼Á¦´Â ¿äûÇѸ¸Å ¸Þ¸ð¸®¸¦ ÁغñÇØ ÁÙ »ÓÀÔ´Ï´Ù. À§ ¿¹Á¦ÀÇ °æ¿ì´Â ¿©ºÐ ¸Þ¸ð¸®¸¦ ÁøÀ§ÇüÀ¸·Î Ãë±ÞÇϴµ¥ ÄÄÆÄÀÏ·¯´Â WORD·Î ŸÀÔÀ» üũÇϱ⠶§¹®¿¡ °æ°í°¡ ¹ß»ýÇÕ´Ï´Ù.
ÀÐ°í ¾²´Â °ªÀ» ´Ù Á¤¼ö·Î ¹Ù²Ù¸é µÇÁö¸¸ API ÀÚü°¡ C ¼öÁØÀÇ ¶óÀ̺귯¸®Àε¥ C++ °æ°í Á¦°Å¸¦ À§ÇØ ±»ÀÌ ÀÌ·¸°Ô±îÁö ÇÒ ÇÊ¿ä´Â ¾ø´Â°ÅÁÒ. °æ°í´Â Á¦¾ÈÀÏ »ÓÀÌ¶ó ¹«½ÃÇÏ¸é µË´Ï´Ù. »óŸ¦ º¯°æÇÑ ÈÄ WM_PAINT ¸Þ½ÃÁö°¡ ³¯¶ó°¡´Â ÀÌÀ¯´Â ¹Ù·Î ¾Æ·§ÁÙ¿¡ InvalidateRect(hWnd, NULL,TRUE); È£Ãâ¹®ÀÌ Àֱ⠶§¹®À̸ç ÀÚµ¿À¸·Î ³¯¶ó°¡Áö´Â ¾Ê½À´Ï´Ù.
|
Ȳ±Ý°¡¹°Ä¡ 4¿ù18ÀÏ 10:14:03
ÀÚ¼¼ÇÑ ¼³¸íÀ¸·Î ÀÌÇØÇß½À´Ï´Ù. ÇѰ¡Áö ´õ ±Ã±ÝÇÑ°Ç ÇÁ·Î±×·¥À» óÀ½ ½ÇÇàÇØ¼ Ÿ¿øÀÌ 9°³°¡ ³ª¿À´Â ÀÌÀ¯´Â
LRESULT CALLBACK ChildProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) {
HDC hdc = { 0 };
PAINTSTRUCT ps = { 0 };
switch (iMessage) {
case WM_CREATE:
SetWindowLongPtr(hWnd, 0, TRUE);
return(0);
case WM_LBUTTONDOWN:
SetWindowLongPtr(hWnd, 0, GetWindowLongPtr(hWnd, 0)==0?1:0);
InvalidateRect(hWnd, NULL,TRUE);
return(0);
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
if (GetWindowLongPtr(hWnd,0)) {
Ellipse(hdc, 10, 10, 90, 90);
}
else{
MoveToEx(hdc, 10, 10, NULL);
LineTo(hdc, 90, 90);
MoveToEx(hdc, 10, 90, NULL);
LineTo(hdc, 90, 10);
}
EndPaint(hWnd, &ps);
return(0);
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
¿¡¼ ÃÖÃÊ WM_CREATE¿¡¼ SetWindowLongPtrÇÔ¼ö·Î °¢ 9°³ "ChildCls"Ŭ·¡½º À©µµ¿ì°¡ TRUE°ªÀÌ ÀúÀåµÇ°í WM_PAINT¿¡¼ GetWindowLongPtrÇÔ¼ö°¡ ÀúÀåµÈ TRUE°ªÀ» Àоî 9°³ÀÇ Å¸¿øÀÌ »ý¼ºµÇ¸ç, ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» ´©¸£¸é TRUE°ª°ú 0ÀÌ ÀÏÄ¡ ¾ÈÇØ SetWindowLongPtrÇÔ¼ö´Â ¼±ÅÃµÈ "ChildCls"Ŭ·¡½º À©µµ¿ì¿¡ 0°ªÀ» ¼¼ÆÃÇÏ¸é¼ x°ªÀÌ ³ª¿À´Â °É·Î ÀÌÇØÇÏ´Â°Ô ¸Â´ÂÁö ±Ã±ÝÇÕ´Ï´Ù. Àß ÀÌÇØÇß´ÂÁö¿ä? |