Áú¹®°ú ´äº¯

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

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

HWND hWndMain,hC1,hC2,hC3;
HBRUSH hRedBrush, hBlueBrush, hGreenBrush;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ChildLeftProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ChildTopProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ChildBottomProc(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;

    hRedBrush = (HBRUSH)CreateSolidBrush(RGB(255,0,0));
    hGreenBrush = (HBRUSH)CreateSolidBrush(RGB(0,255,0));
    hBlueBrush = (HBRUSH)CreateSolidBrush(RGB(0,0,255));


    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 = NULL;
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    RegisterClass(&wndclass);

    wndclass.hbrBackground = hRedBrush;
    wndclass.lpfnWndProc = ChildLeftProc;
    wndclass.lpszClassName = TEXT("ChildLeft");
    RegisterClass(&wndclass);

    wndclass.hbrBackground = hGreenBrush;
    wndclass.lpfnWndProc = ChildTopProc;
    wndclass.lpszClassName = TEXT("ChildTop");
    RegisterClass(&wndclass);

    wndclass.hbrBackground = hBlueBrush;
    wndclass.lpfnWndProc = ChildBottomProc;
    wndclass.lpszClassName = TEXT("ChildBottom");
    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);

    hWndMain = hWnd;

    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    DeleteObject(hRedBrush);
    DeleteObject(hGreenBrush);
    DeleteObject(hBlueBrush);

    
    return((int)msg.wParam);
}

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

    RECT crt{};

    switch (iMessage){
    case WM_CREATE:
        hC1 = CreateWindowExW(NULL, TEXT("ChildLeft"), NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,
            0, 0, 0, 0, hWnd, (HMENU)0, g_hInst, NULL);
        hC2 = CreateWindowExW(NULL, TEXT("ChildTop"), NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,
            0, 0, 0, 0, hWnd, (HMENU)0, g_hInst, NULL);
        hC3 = CreateWindowExW(NULL, TEXT("ChildBottom"), NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,
            0, 0, 0, 0, hWnd, (HMENU)0, g_hInst, NULL);
        return(0);
    case WM_SIZE:
        if (wParam != SIZE_MINIMIZED) {
            GetClientRect(hWnd, &crt);
            MoveWindow(hC1,0,0,300,crt.bottom,TRUE);
            MoveWindow(hC2,300,0,crt.right-300,150,TRUE);
            MoveWindow(hC3,300,150,crt.right-300,crt.bottom-150,TRUE);
        }
        return(0);
    case WM_DESTROY:
        PostQuitMessage(0);
        return(0);
    }
    return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}

------------------------------------------------------------------------------------------------------------

1) hRedBrush, hBlueBrush, hGreenBrush´Â wWinMainÇÔ¼ö¿¡¼­ ÀÚµ¿À¸·Î »èÁ¦°¡ ¾ÈµÇ´Â Áö¿ä? ÀÚµ¿À¸·Î »èÁ¦°¡ ¾ÈµÇ±â¿¡
    DeleteObject¸¦ »ç¿ëÇÏ´ÂÁö ±Ã±ÝÇÕ´Ï´Ù.
2) hRedBrush, hBlueBrush, hGreenBrush´Â DeleteObject·Î »èÁ¦ÇÏ´Â °ÍÀÌ ¸Â´ÂÁö ±Ã±ÝÇÕ´Ï´Ù. hdc¸¦ »ý¼ºÇÏ¿© selectobject·Î
   ¼±ÅÃÈÄ ´Ù¸¥ OldhRedBrushµîÀ» »ý¼ºÇÏ¿© Àç¼±ÅÃÇÑÈÄ »èÁ¦ÇÏ´Â°Ô ¾Æ´Ñ Áö ±Ã±ÝÇÕ´Ï´Ù. Ã¥ 164pó·¯ ÇØ¾ß ÇÏ´Â °Íó·³
   ¹è¿ü´Âµ¥ ¿©±â¼­´Â ¹Ù·Î »èÁ¦ÇÏ´Ï ±Ã±ÝÇÕ´Ï´Ù. hdc¸¦ »ý¼ºÇÏ¿© ¹è°æÀ» ÁÖÁö ¾Ê¾Æ ¸Þ¸ð¸® ¿µÇâ¿¡ ³¢Ä¡´Â °ÍÀÌ ¾ø¾î Àú·¸°Ô
   »èÁ¦ÇÏ´Â °ÍÀÎÁö ±Ã±ÝÇÕ´Ï´Ù.
3) hC1,hC2,hC3ÀÇ À©µµ¿ì »ý¼º ½Ã hParent(ºÎ¸ðÀ©µµ¿ì)´Â WndProcÀÇ ÀÎÀÚ hWnd·Î »ç¿ëÇÏ´Â °ÍÀÌ ¸Â´ÂÁö ±Ã±ÝÇÕ´Ï´Ù. ¾Õ¿¡¼­
   ÇØ´ç hWnd´Â ¸Þ½ÃÁö ÀÔ·Â ÀÎÀÚ·Î ¹è¿ü´Âµ¥ ÇØ´ç ÀÎÀÚ°¡ ºÎ¸ð À©µµ¿ì ÀÎÀÚ·Î ÀÌÇØÇÏ¸é µÇ´ÂÁö ±Ã±ÝÇÕ´Ï´Ù. hInstance´Â
   wWinMainÀÎÀÚ·Î »ç¿ëÇßÁö¸¸ ºÎ¸ðÀ©µµ¿ì´Â WndProcÀ¸·Î »ç¿ëÇØ¼­ ±Ã±ÝÇÕ´Ï´Ù. À§ÀÇ hWndMainÀÌ ºÎ¸ðÀ©µµ¿ì ÀÎÀÚ·Î
  »ý°¢Çߴµ¥ ¾Æ¿¹ ±×·ÁÁöÁöµµ ¾Ê°í ±Ã±ÝÇÕ´Ï´Ù.
4) wParam!=SIZE_MINIMIZED´Â ¿Ö »ç¿ëÇÏ´ÂÁö ±Ã±ÝÇÕ´Ï´Ù. ¾Ë·ÁÁֽñ⠹ٶø´Ï´Ù.



±è¹Î¼ö
403 Forbidden403 Forbidden

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

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

1) º¯¼ö¸¦ »èÁ¦ÇÏ´Â °Í°ú ±× º¯¼ö°¡ ±â¾ïÇÏ´Â °´Ã¼¸¦ »èÁ¦ÇÏ´Â °ÍÀº ´Ù¸¨´Ï´Ù. hRedBrush°¡ Áö¿ª º¯¼ö¿©¼­ º¯¼ö ÀÚü´Â WinMainÀÌ Á¾·áµÇ¸é »èÁ¦µÇÁö¸¸ ÀÌ º¯¼ö¿¡ ÀúÀåÇØ ³õÀº »¡°£»ö ºê·¯½Ã´Â »èÁ¦µÇÁö ¾Ê½À´Ï´Ù. ±×·¡¼­ ¿ø·ÐÀûÀ¸·Î ¸¸µç °´Ã¼´Â Á÷Á¢ »èÁ¦ÇØ Áà¾ß ÇÕ´Ï´Ù.

2) ±×¸®±â¿¡ Á÷Á¢ »ç¿ëÇÑ °´Ã¼¶ó¸é DC¿¡¼­ ¸ÕÀú ¼±ÅÃ ÇØÁ¦ÇÑ ÈÄ »èÁ¦ÇÏ´Â °ÍÀÌ ¸Â½À´Ï´Ù. ±×·¯³ª ÀÌ ¿¹Á¦ÀÇ ¼¼ ºê·¯½Ã´Â DC¿¡ ¼±ÅÃÇÑ°Ô ¾Æ´Ï¶ó À©µµ¿ì Ŭ·¡½ºÀÇ ¹è°æ ºê·¯½Ã·Î ÁöÁ¤ÇÑ °ÍÀ̹ǷΠ¼±ÅÃÇØÁ¦ÇÒ ¹æ¹ýÀÌ ¾ø½À´Ï´Ù. À©µµ¿ì´Â Àá½Ã ÈÄ ÆÄ±«µÉ ¿¹Á¤À̰í À©µµ¿ì Ŭ·¡½ºµµ »ç¶óÁú ¿¹Á¤À̹ǷΠ±×³É »èÁ¦ÇÏ¸é µË´Ï´Ù.

3) WM_CREATE ¸Þ½ÃÁö¸¦ ¹ÞÀº ÁÖü°¡ ¸ÞÀÎ À©µµ¿ìÀ̹ǷΠWndProcÀÇ Àμö·Î Àü´ÞµÈ hWnd°¡ ºÎ¸ð À©µµ¿ì ¸Â½À´Ï´Ù. ¸ÞÀÎ À©µµ¿ì¸¦ »ý¼ºÇÏ´Â Áß¿¡ Â÷Àϵ带 »ý¼ºÇÏ´Â °Ì´Ï´Ù. hWndMainµµ ºÎ¸ð À©µµ¿ì°¡ ¸ÂÀ¸¸ç ¾îµð¼­³ª ¸ÞÀÎ À©µµ¿ì·Î ÂüÁ¶ÇÒ ¼ö ÀÖ´Â º¯¼öÀÔ´Ï´Ù. ±×·¯³ª ÀÌ °ªÀ» ´ëÀÔÇÏ´Â ½ÃÁ¡ÀÌ CreateWindowExº¸´Ù ´Ê±â ¶§¹®¿¡ WM_CREATE ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â Áß¿¡´Â ¾ÆÁ÷ °ªÀÌ ´ëÀÔµÇÁö ¾ÊÀº »óÅÂÀÔ´Ï´Ù. CreateWindowEx°¡ »ý¼ºÇÑ À©µµ¿ì ÇÚµéÀ» ¸®ÅÏÇØ¾ß ¸ÞÀÎ À©µµ¿ì¸¦ ¾Ë ¼ö ÀÖÀ¸¹Ç·Î »ý¼ºÁß¿¡´Â WndProcÀ¸·Î Àü´ÞµÇ´Â hWnd¸ª ¸¯´Â ¹æ¹ý¹Û¿¡ ¾ø½À´Ï´Ù.

4) ¸ÞÀÎ À©µµ¿ìÀÇ Å©±â°¡ º¯°æµÇ¸é WM_SIZE ¸Þ½ÃÁö°¡ ³¯¶ó¿À°í À̶§ Â÷ÀϵåÀÇ ¿µ¿ªÀ» Àû´çÈ÷ Á¶Á¤Çϵµ·Ï Çß½À´Ï´Ù. ´Ù¸¸, À©µµ¿ì°¡ ÃÖ¼ÒÈ­µÉ ¶§´Â ¾îÂ÷ÇÇ ¾È º¸À̱⠶§¹®¿¡ ºÒÇÊ¿äÇÑ µ¿ÀÛÀ» ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. ¹°·Ð ÇØµµ »ó°ü¾ø½À´Ï´Ù¸¸ ºÎ¸ð À©µµ¿ìÀÇ Å©±â°¡ 0ÀÌ µÇ¹Ç·Î Â÷Ä©Çϸé 0À¸·Î ³ª´©±â ¿¡·¯°¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. 

Ȳ±Ý°¡¹°Ä¡ 12¿ù12ÀÏ 12:07:50  

1¹ø, 2¹ø, 3¹ø ¼³¸íÀº ¸íÄèÇÑ ÇØ´äÀ» Áּż­ °¨»çÇÕ´Ï´Ù. ¾ÆÁ÷ 4¹øÀº wParamÀº Űº¸µå °ªÀÔ·ÂÀ¸·Î ¾Ë°í Àִµ¥ ¾ÆÁ÷µµ Çò°¥¸®³×¿ä.
Á»´õ °øºÎÇÑ µÚ ´Ù½Ã Áú¹®µå¸®µµ·Ï ÇϰڽÀ´Ï´Ù.

gcyong 12¿ù26ÀÏ 4:04:15  

4¹ø¿¡¼­ wParamÀº Űº¸µå °ªÀÔ·ÂÀÌ ¾Æ´Õ´Ï´Ù. Àü´ÞµÇ´Â ¸Þ½ÃÁö Á¾·ù(iMessage)¿¡ µû¶ó ´Ù¸£¸ç, iMessage°¡ WM_SIZEÀÎ °æ¿ì Å©±â°¡ º¯°æ ¿äûµÈ ŸÀÔÀÔ´Ï´Ù. (https://learn.microsoft.com/en-us/windows/win32/winmsg/wm-size)

Áï, ¿¹Á¦¿¡¼­´Â Å©±â Á¶Á¤ À̺¥Æ®°¡ ¹ß»ýÇßÀ» ¶§ Â÷Àϵå À©µµ¿ìÀÇ Å©±â¸¦ Á¶Á¤ÇϵÇ, ÃÖ¼ÒÈ­ÀÏ °æ¿ì È­¸é»ó¿¡ ±×·ÁÁöÁö ¾ÊÀ¸¹Ç·Î ºÒÇÊ¿äÇÑ µ¿ÀÛÀÌ µÇ¾î ±»ÀÌ ÇÏÁö ¾Êµµ·Ï Á¶°ÇÀ¸·Î üũ ÇÑ °ÍÀÔ´Ï´Ù.

wParamÀÌ ÀÔ·ÂÇÑ Å° °ªÀÎ °æ¿ì´Â iMessage°¡ WM_KEYDOWN °°Àº ¸Þ½ÃÁöÀÏ ¶§¸¸ ¸Â´Â ¸»¾¸ÀÔ´Ï´Ù.


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