Áú¹®°ú ´äº¯

À©µµ¿ìÁî apiÁ¤º¹ 1±Ç 379~380p ¿¹Á¦°¡ ÀÌÇØ°¡ ¾ÈµË´Ï´Ù. ³¯Â¥:2023-4-16 9:39:44 Á¶È¸¼ö:270
ÀÛ¼ºÀÚ : Ȳ±Ý°¡¹°Ä¡
Æ÷ÀÎÆ® : 49
°¡ÀÔÀÏ : 2022-05-06 15:33:18
¹æ¹®È½¼ö : 45
±Û 7°³, ´ñ±Û 7°³
¼Ò°³ : ¾È³çÇϼ¼¿ä. À©µµ¿ìÁîapi¸¦ °øºÎÇϱâÀ§ÇÏ¿© °¡ÀÔÇß½À´Ï´Ù. Àß ºÎʵ右´Ï´Ù.
ÀÛ¼º±Û º¸±â
ÂÊÁö º¸³»±â
À©µµ¿ìÁî apiÁ¤º¹ 1±Ç 379~380p ¿¹Á¦°¡ ÀÌÇØ°¡ ¾ÈµË´Ï´Ù.
SetWindowLongPtr°ú GetWindowLongPtrÀÌ ÀÌÇØ°¡ Àß ¾ÈµË´Ï´Ù.

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));
        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));
}

¹ØÁÙ±×Àº ºÎºÐÀÌ ÀÌÇØ°¡ Àß ¾ÈµË´Ï´Ù. GetWindowLongPtrÀÇ À©µµ¿ì Á¤º¸¸¦ ¾ò¾î¿À´Â ÇÔ¼öÀε¥ ¿ÞÂÊ ¸¶¿ì½º ¹öưÀ» ´©¸£¸é ¹Ý´ë°ªÀÌ µÇ¸é¼­ SetWindowLongPtr¿¡¼­ À©µµ¿ì ¼Ó¼ºÀ» !GetWindowLongPtrÀ¸·Î º¯°æÇϰí WM_PAINT·Î ³»·Áº¸³»´Â °ÍÀ¸·Î ÀÌÇØÇÏ¸é µÇ´Â Áö ±Ã±ÝÇÕ´Ï´Ù. ¶ÇÇÑ ºñÁÖ¾ó½ºÆ©µð¿À 2022¿¡¼­ !GetWindowLongPtrÇÏ¸é °æ°í°¡ ¶ß´Âµ¥ °æ°í¸¦ ¶ßÁö¾Ê°Ô ÀÛ¼º¹æ¹ýÀÌ ¾øÀ»±î¿ä? ~GetWindowLongPtr+0x00000001À¸·Î ÇØºÃ´Âµ¥ ¾È µË´Ï´Ù. ´äº¯ ºÎʵ右´Ï´Ù.




±è¹Î¼ö

¸ñ·Ïº¸±â »èÁ¦ ¼öÁ¤ ½Å°í ½ºÅ©·¦

ÀÛ°¡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°ªÀÌ ³ª¿À´Â °É·Î ÀÌÇØÇÏ´Â°Ô ¸Â´ÂÁö ±Ã±ÝÇÕ´Ï´Ù. Àß ÀÌÇØÇß´ÂÁö¿ä?


·Î±×ÀÎÇÏ¼Å¾ß ´ñ±ÛÀ» ´Þ ¼ö ÀÖ½À´Ï´Ù.