Áú¹®°ú ´äº¯

À©µµ¿ìÁîAPI Á¤º¹ 1±Ç 172p ±×¸®±â ¸ðµå ¿¹Á¤ ÁúÀǵ帳´Ï´Ù. ³¯Â¥:2023-12-10 3:39:34 Á¶È¸¼ö:521
ÀÛ¼ºÀÚ : Ȳ±Ý°¡¹°Ä¡
Æ÷ÀÎÆ® : 86
°¡ÀÔÀÏ : 2022-05-06 15:33:18
¹æ¹®È½¼ö : 68
±Û 12°³, ´ñ±Û 13°³
¼Ò°³ : ¾È³çÇϼ¼¿ä. À©µµ¿ìÁîapi¸¦ °øºÎÇϱâÀ§ÇÏ¿© °¡ÀÔÇß½À´Ï´Ù. Àß ºÎʵ右´Ï´Ù.
ÀÛ¼º±Û º¸±â
ÂÊÁö º¸³»±â
#include<Windows.h>

int sx, sy, oldx, oldy;
BOOL bNowDraw;

HINSTANCE g_hInst;
LPCTSTR MyClassName = TEXT("FistClass");

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) {
    
    WNDCLASS wndclass{};
    HWND hWnd{};
    MSG msg{};
    g_hInst = hInstance;

    wndclass.lpfnWndProc = WndProc;
    wndclass.lpszClassName = MyClassName;
    wndclass.hInstance = hInstance;
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.cbWndExtra = 0;
    wndclass.cbClsExtra = 0;
    wndclass.lpszMenuName = NULL;
    wndclass.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(255, 255, 255));
    wndclass.style = CS_HREDRAW | CS_VREDRAW;

    RegisterClass(&wndclass);

    hWnd = CreateWindowExW(NULL, MyClassName, MyClassName,WS_OVERLAPPEDWINDOW|WS_VSCROLL|WS_HSCROLL,CW_USEDEFAULT, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT, NULL,(HMENU)NULL,hInstance,NULL);

    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return((int)msg.wParam);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) {

    HDC hdc{};
    bNowDraw = FALSE;

    switch (iMessage){
    
    case WM_LBUTTONDOWN:
        sx = lParam & 0x0000FFFF;
        sy = (lParam>>16) & 0x0000FFFF;
        oldx = sx;
        oldy = sy;
        bNowDraw = TRUE;
        return(0);
    case WM_MOUSEMOVE:
        if (bNowDraw == TRUE) {
            hdc = GetDC(hWnd);
            SetROP2(hdc, R2_NOT);
            MoveToEx(hdc, sx, sy, NULL);
            LineTo(hdc, oldx, oldy);
            oldx = lParam & 0x0000FFFF;
            oldy = (lParam >> 16) & 0x0000FFFF;
            MoveToEx(hdc, sx, sy, NULL);
            LineTo(hdc, oldx, oldy);
            ReleaseDC(hWnd, hdc);
        }
        return(0);
    case WM_LBUTTONUP:
        bNowDraw = FALSE;
        hdc = GetDC(hWnd);
        MoveToEx(hdc, sx, sy, NULL);
        LineTo(hdc, oldx, oldy);
        return(0);
    case WM_DESTROY:
        PostQuitMessage(0);
        return(0);
    }
    return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}

--------------------------------------------------------------------------------------------------------------------------------------
Àü¿ªº¯¼ö·Î ÁöÁ¤µÈ BOOL bNowDraw »ó¿¡ FALSE¸¦ ´ëÀÔ½ÃŰÁö ¾Ê°í WndProcÇÔ¼ö¾È¿¡¼­ bNowDraw¸¦ FALSE·Î Á¤ÀÇÇϸé 
±×¸®±â°¡ ¾È µÇ´Âµ¥ ÀÌÀ¯¸¦ ¾Ë°í½Í½À´Ï´Ù. ¶ÇÇÑ Ã¥ ¿¹Á¦¿¡ WM_LBUTTONUP ³»¿¡ MoveToEx¿Í LineTo°¡ ¾ø¾îµµ Á¦´ë·Î ÀÛµ¿µÇ´Âµ¥ ÇØ´ç ºÎºÐÀº ¿ÀŸÀÎÁö ±Ã±ÝÇÕ´Ï´Ù. ´äº¯ ºÎʵ右´Ï´Ù.



±è¹Î¼ö
403 Forbidden403 Forbidden

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

ÀÛ°¡K 12¿ù10ÀÏ 11:28:50  

bNowDraw¸¦ WndProc ¾È¿¡¼­ Á¤ÀÇÇϸé Áö¿ª º¯¼ö°¡ µÇ¸ç WndProcÀÌ È£ÃâµÉ ¶§¸¶´Ù, Áï ¸Þ½ÃÁö°¡ ¹ß»ýÇÒ ¶§¸¶´Ù FALSE·Î ÃʱâÈ­µÇ¾î ¹ö¸³´Ï´Ù. ±×·¯¸é ¸¶¿ì½º ¹öưÀ» ´­·¶À» ¶§ ÀÌ °ªÀ» TRUE·Î ¹Ù²Ù¾îµµ ±× »ç½ÇÀ» ±â¾ïÇÏÁö ¸øÇÏ¸ç ¸¶¿ì½º À̵¿½Ã ¹öưÀ» ´­·È´Ù´Â »ç½ÇÀ» ¾ËÁö ¸øÇϹǷΠ±×¸®±â¸¦ ÇÏÁö ¾Ê°Ô µË´Ï´Ù. bNowDrawº¯¼ö´Â ¹öưÀ» ´©¸¥ ä·Î À̵¿ÁßÀ̶ó´Â °ÍÀ» ±â¾ïÇÏ´Â ¿ªÇÒÀ» ÇϹǷΠÀü¿ªÀ̰ųª Á¤Àû º¯¼ö¿©¾ß ÇÕ´Ï´Ù.
WM_LBUTTONUP ³»¿¡ MoveToEx¿Í LineTo´Â ¸¶Áö¸· ¼±À» ¿Ï¼ºÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. MOVE¿¡¼­ ROP¸ðµå¸¦ NOTÀ¸·Î ¼³Á¤ÇÏ¿© ±âÁ¸ ¼±À» ¹ÝÀü½Ã۸ç Áß°£°úÁ¤À» ±×¸®´Âµ¥ ÀÌ »óÅ·ΠÁ¾·áÇØ ¹ö¸®¸é ¸¶Áö¸· ±×¸° ¼±°ú °ãÃÄÁø ´Ù¸¥ ¼±Àº Áö¿öÁ® ¹ö¸³´Ï´Ù. ±×·¡¼­ ¹öưÀ» ³õÀ» ¶§ ÃÖÁ¾ ¼±ºÐÀ» Çѹø ´õ ±×·Á¾ß ÇÕ´Ï´Ù. ÀÌ°Ô Àß ÀÌÇØ°¡ ¾ÈµÇ¸é ¼± Çϳª ±×·Á³õ°í ºñ½ºµëÇÏ°Ô ´Ù¸¥ ¼±À» Çϳª ´õ ±×·Á º¸¸é¼­ µ¿ÀÛÀ» Àß °üÂûÇØ º¸¼¼¿ä.

Ȳ±Ý°¡¹°Ä¡ 12¿ù11ÀÏ 11:42:33  

Ä£ÀýÇÑ ¼³¸í °¨»çÇÕ´Ï´Ù.


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