°­ÁÂ¿Í ÆÁ

ŸÀÌÆ² ¹Ù¸¦ °ËÁ¤»öÀ¸·Î ¹Ù²Ù±â ³¯Â¥:2023-4-19 12:36:29 Á¶È¸¼ö:793
ÀÛ¼ºÀÚ : daypark
Æ÷ÀÎÆ® : 1200
°¡ÀÔÀÏ : 2020-02-14 10:42:05
¹æ¹®È½¼ö : 253
±Û 177°³, ´ñ±Û 29°³
¼Ò°³ : ÀÚ±â¼Ò°³¸¦ ÀÔ·ÂÇϽʽÿÀ.
ÀÛ¼º±Û º¸±â
ÂÊÁö º¸³»±â
À©µµ¿ì ºñ½ºÅ¸ ÀÌÀü¿¡´Â WM_NCPAINT ¸Þ½ÃÁö¿¡¼­ ºñÀÛ¾÷ ¿µ¿ªÀ» ¸¶À½´ë·Î ±×¸± ¼ö ÀÖ¾ú´Ù. ±×·¯³ª ºñ½ºÅ¸ ÀÌÈÄ¿¡´Â DWM(Desktop Window Manager)À» µµÀÔÇÏ¿© È­¸é¿¡ ±×¸®´Â ¹æ¹ýÀÌ ¹Ù²î¾ú´Ù. DC¿¡ Á÷Á¢ ±×¸®´Â °ÍÀº Çã¶ôµÇÁö ¾ÊÀ¸¸ç ¸Þ¸ð¸® ³»ºÎ¿¡¼­ À̹ÌÁö¸¦ ±×¸° ÈÄ È­¸éÀ» Á¶ÇÕ(Composition)ÇÏ¿© È­¸éÀ¸·Î ³ª°£´Ù. ÀÌ·± Á¶ÇÕ¿¡ ÀÇÇØ °æ°è¼± ¾Æ·¡¿¡ ÀÔüÀûÀÎ ±×¸²ÀÚ°¡ ±ò¸®´Â È¿°ú¸¦ ³»¸ç 3Â÷¿ø â Àüȯ ¾Ö´Ï¸ÞÀÌ¼Ç µîµµ °¡´ÉÇØÁ³´Ù.
À©µµ¿ìÀÇ ¸ð¾çÀ» º¯°æÇÏ·Á¸é ´ÙÀ½ ÇÔ¼ö·Î ·»´õ¸µ ¼Ó¼ºÀ» Á¶Á¤ÇÑ´Ù. ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ·Á¸é dwmapi.h¸¦ Æ÷ÇÔÇϰí Dwmapi.lib¸¦ ¿¬°áÇØ¾ß ÇÑ´Ù. 

HRESULT DwmSetWindowAttribute(
       HWND    hwnd,
       DWORD   dwAttribute,
  [in] LPCVOID pvAttribute,
       DWORD   cbAttribute
);

´ë»ó À©µµ¿ì, º¯°æÇÒ ¼Ó¼º, ¼Ó¼ºÀÇ °ª, ¼Ó¼º°ªÀÇ Å©±â¸¦ Àμö·Î Àü´ÞÇÑ´Ù. ¼Ó¼ºÀ» ¼³Á¤¸¸ ÇÏ´Â °ÍÀÌ ¾Æ´Ï°í Á¶»çµµ Çϱ⠶§¹®¿¡ Æ÷ÀÎÅÍ·Î °ªÀ» Àü´ÞÇÏ¸ç ¾ÈÀü»óÀÇ ÀÌÀ¯·Î Å©±âµµ ¹àÇô¾ß ÇÑ´Ù. ¸®ÅϰªÀº HRESULT ŸÀÔÀ̸ç À©µµ¿ì ¹öÀüÀÌ ³·°Å³ª Á¶ÇÕ ±â´ÉÀ» ²¨ ³õ¾ÒÀ¸¸ç ½ÇÆÐ¸¦ ¸®ÅÏÇÏ¸ç ±×·¸Áö ¾ÊÀ¸¸é S_OK¸¦ ¸®ÅÏÇÑ´Ù. 
¼Ó¼º°ªÀÇ Á¾·ù´Â ·¹ÆÛ·±½º¸¦ Âü°íÇÑ´Ù. DWMWA_USE_IMMERSIVE_DARK_MODE ¸ðµå´Â ¾îµÎ¿î Å׸¶¸¦ »ç¿ëÇϸç ÇÁ·¹ÀÓÀ» £°Ô ±×¸°´Ù. º¸ÅëÀº °ËÁ¤ÀÌÁö¸¸ ¿î¿µÃ¼Á¦ ¹öÀü¿¡ µû¶ó ´Þ¶óÁú ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â À©µµ¿ìÀÇ ³», ¿ÜºÎ »ö»óÀ» °ËÁ¤À¸·Î º¯°æÇÑ´Ù.

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass = TEXT("DarkMode");

int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance
    , _In_ LPSTR lpszCmdParam, _In_ int nCmdShow)
{
    HWND hWnd;
    MSG Message;
    WNDCLASS WndClass;
    g_hInst = hInstance;
    HBRUSH hBack = CreateSolidBrush(RGB(0, 0, 0));

    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.hbrBackground = hBack;
    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    WndClass.hInstance = hInstance;
    WndClass.lpfnWndProc = WndProc;
    WndClass.lpszClassName = lpszClass;
    WndClass.lpszMenuName = NULL;
    WndClass.style = CS_HREDRAW | CS_VREDRAW;
    RegisterClass(&WndClass);

    hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX ,
        CW_USEDEFAULT, CW_USEDEFAULT, 450, 600,
        NULL, (HMENU)NULL, hInstance, NULL);
    ShowWindow(hWnd, nCmdShow);

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

#include <dwmapi.h>
#pragma comment(lib, "Dwmapi.lib")
BOOL USE_DARK_MODE = true;
HRESULT ret;

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    UINT nHit;

    switch (iMessage) {
    case WM_CREATE:
        hWndMain = hWnd;
        ret = DwmSetWindowAttribute(
            hWndMain, DWMWINDOWATTRIBUTE::DWMWA_USE_IMMERSIVE_DARK_MODE,
            &USE_DARK_MODE, sizeof(USE_DARK_MODE));
        return 0;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        EndPaint(hWnd, &ps);
        return 0;
    case WM_NCHITTEST:
        nHit = DefWindowProc(hWnd, iMessage, wParam, lParam);
        if (nHit == HTCLIENT)
            nHit = HTCAPTION;
        return nHit;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}

DWMWA_USE_IMMERSIVE_DARK_MODE ¼Ó¼ºÀº À©µµ¿ì11ºÎÅÍ Áö¿øÇÏ´Â °ÍÀ¸·Î µÇ¾î ÀÖÁö¸¸ À©µµ¿ì10¿¡¼­µµ ¹®¼­È­¸¸ µÇ¾î ÀÖÁö ¾ÊÀ» »Ó Áö¿øÀº Çß¾ú´Ù°í ÇÑ´Ù. ¸¸¾à SDK¿¡ ÀÌ ¿­°ÅÇüÀÌ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù¸é »ó¼ö°ª 20À» ¹Ù·Î »ç¿ëÇÏ¸é µÈ´Ù. ½ÇÇà °á°úÀÌ´Ù.



ÀÌ ¿Ü¿¡ À©µµ¿ì11¿¡¼­´Â °æ°è¼±ÀÇ »ö»ó, ĸ¼ÇÀÇ »ö»ó µîÀ» ¹ø°æÇÒ ¼ö ÀÖ´Ù. Win32 API´Â °ÅÀÇ ¹Ù²îÁö ¾ÊÁö¸¸ ¿î¿µÃ¼Á¦ ¹öÀüÀÌ ¹Ù²ð ¶§ ¼ÒÆø Ãß°¡µÇ°Å³ª ¹Ù²î´Â °æ¿ì°¡ °¡²û ÀÖ´Ù. º¯°æµÈ API¸¦ ±×¶§ ±×¶§ ã¾Æ Àû¿ëÇÏ¸é µÈ´Ù. 403 Forbidden403 Forbidden

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


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