none
Need a simple application which displays the current system colours. RRS feed

  • Question

  • I am trying to create a basic visual c++ windows desktop application which will retrieve the current system colours. 

    Microsoft include some example code that uses GetSysColors and SetSysColors at https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setsyscolors 

    I have used this example to make a test application however I saw nothing being displayed or any changes.

    Any information would be great!

    Wednesday, August 28, 2019 10:51 AM

All replies

  • GetImmersiveColorFromColorSetEx seems to work for me (Windows 10 - 1803, 17134.829)

    UISettings Class should work, but I tested some values and I got 0...

    Wednesday, August 28, 2019 1:54 PM
  • Hello,

    Thank you for posting here.

    >>I have used this example to make a test application however I saw nothing being displayed or any changes.

    To some extent, it has changed. But it didn't change the theme color. I've taken a couple of examples below, and you can find that the color really changed.

     

    Best Regards,

    Suarez Zhou



    Thursday, August 29, 2019 7:45 AM
  • Hello,

    you could write a small dialog app, insert many CStatic controls and paint them in the GetSysColor colors.

    Here is an example: https://www.codeproject.com/Articles/1035/Using-Colors-in-CEdit-and-CStatic

    Change this app by inserting many CStatic controls and set the color of each control with SetBkColor.

    Regards, Guido


    Friday, August 30, 2019 5:58 AM
  • Can you please share your test application you have made with me. I would really like to try that myself.
    Tuesday, September 3, 2019 3:45 PM
  • Can you please share your test application you have made with me. I would really like to try that myself.

    Hello,

    you start asking this again: https://social.msdn.microsoft.com/Forums/en-US/4b77a6b1-2766-4817-9ab2-04035cd5e9ab/get-system-colours-information-getsyscolor?forum=vclanguage

    But there you present more information.

    What do you mean with "Can you please share your test application you have made with me. I would really like to try that myself." ? The link I gave you is a test application how to set colors for (CStatic) controls. To set the color you wish, you call GetSysColor and put this into the SetBkColor function of the control.

    Regards, Guido


    Wednesday, September 4, 2019 6:13 AM
  • Hello,

    Thank you for posting here.

    >>I have used this example to make a test application however I saw nothing being displayed or any changes.

    To some extent, it has changed. But it didn't change the theme color. I've taken a couple of examples below, and you can find that the color really changed.

     

    Best Regards,

    Suarez Zhou



    I was reffering to Suarez Zhou. I wanted their test application please
    • Proposed as answer by KdotC122 Monday, September 9, 2019 1:44 PM
    Wednesday, September 4, 2019 10:48 AM
  • Hello,

    >>I was reffering to Suarez Zhou. I wanted their test application please.

    I used the example code in following link. The link is provide by you. So did it mean that the code didn't work on your PC?

    https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setsyscolors

    Best Regards,

    Suarez Zhou


    Thursday, September 5, 2019 6:06 AM
  • What I mean to say is I am not sure where to put the sample code within this test application to get it working. Can you tell me that please.

    // WindowsProject5.cpp : Defines the entry point for the application.
    //
    
    #include "stdafx.h"
    #include "WindowsProject5.h"
    
    #define MAX_LOADSTRING 100
    
    // Global Variables:
    HINSTANCE hInst;                                // current instance
    WCHAR szTitle[MAX_LOADSTRING];                  // The title bar text
    WCHAR szWindowClass[MAX_LOADSTRING];            // the main window class name
    
    // Forward declarations of functions included in this code module:
    ATOM                MyRegisterClass(HINSTANCE hInstance);
    BOOL                InitInstance(HINSTANCE, int);
    LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
    INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
    
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPWSTR    lpCmdLine,
                         _In_ int       nCmdShow)
    {
        UNREFERENCED_PARAMETER(hPrevInstance);
        UNREFERENCED_PARAMETER(lpCmdLine);
    
        // TODO: Place code here.
    
        // Initialize global strings
        LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadStringW(hInstance, IDC_WINDOWSPROJECT5, szWindowClass, MAX_LOADSTRING);
        MyRegisterClass(hInstance);
    
        // Perform application initialization:
        if (!InitInstance (hInstance, nCmdShow))
        {
            return FALSE;
        }
    
        HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT5));
    
        MSG msg;
    
        // Main message loop:
        while (GetMessage(&msg, nullptr, 0, 0))
        {
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    
        return (int) msg.wParam;
    }
    
    
    
    //
    //  FUNCTION: MyRegisterClass()
    //
    //  PURPOSE: Registers the window class.
    //
    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
        WNDCLASSEXW wcex;
    
        wcex.cbSize = sizeof(WNDCLASSEX);
    
        wcex.style          = CS_HREDRAW | CS_VREDRAW;
        wcex.lpfnWndProc    = WndProc;
        wcex.cbClsExtra     = 0;
        wcex.cbWndExtra     = 0;
        wcex.hInstance      = hInstance;
        wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT5));
        wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
        wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
        wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT5);
        wcex.lpszClassName  = szWindowClass;
        wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
    
        return RegisterClassExW(&wcex);
    }
    
    //
    //   FUNCTION: InitInstance(HINSTANCE, int)
    //
    //   PURPOSE: Saves instance handle and creates main window
    //
    //   COMMENTS:
    //
    //        In this function, we save the instance handle in a global variable and
    //        create and display the main program window.
    //
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       hInst = hInstance; // Store instance handle in our global variable
    
       HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
    
       if (!hWnd)
       {
          return FALSE;
       }
    
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);
    
       return TRUE;
    }
    
    //
    //  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
    //
    //  PURPOSE: Processes messages for the main window.
    //
    //  WM_COMMAND  - process the application menu
    //  WM_PAINT    - Paint the main window
    //  WM_DESTROY  - post a quit message and return
    //
    //
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_COMMAND:
            {
                int wmId = LOWORD(wParam);
                // Parse the menu selections:
                switch (wmId)
                {
                case IDM_ABOUT:
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                    break;
                case IDM_EXIT:
                    DestroyWindow(hWnd);
                    break;
                default:
                    return DefWindowProc(hWnd, message, wParam, lParam);
                }
            }
            break;
        case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hWnd, &ps);
                // TODO: Add any drawing code that uses hdc here...
                EndPaint(hWnd, &ps);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
    }
    
    // Message handler for about box.
    INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        UNREFERENCED_PARAMETER(lParam);
        switch (message)
        {
        case WM_INITDIALOG:
            return (INT_PTR)TRUE;
    
        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
            }
            break;
        }
        return (INT_PTR)FALSE;
    }
    

    Friday, September 6, 2019 2:59 PM
  • What you are asking is about as basic a beginner's question as can be.

    Do you have any experience writing code using MFC or the Win32 API?

    Friday, September 6, 2019 3:19 PM
  • Hi,

    I'm sorry I didn't reply to you in time. The example code is a console application. What you give is Win32 application. If you want to use SetSysColors(), Create Windows console application and add the code into it.

    Best Regards,

    Suarez Zhou

    Monday, September 9, 2019 5:23 AM
  • No i am beginner still learning and only understand the basics.
    Monday, September 9, 2019 9:34 AM
  • No i am beginner still learning and only understand the basics.

    All of this seems to be driven by a need to update an MFC application that is primarily used in vehicles as per https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/ee0ae0d9-2b93-4ae1-a92a-ea07a8a872b7/how-to-work-setsyscolors-in-windows-10?forum=windowsuidevelopment

    Perhaps a more experienced developer should be assigned to this project.

    Monday, September 9, 2019 9:40 AM
  • Suarez 

    Thank you for your support and patience! I have figured out what I was doing wrong and I am making progress. Thanks again.

    Monday, September 9, 2019 1:44 PM
  • Hi,

    You are welcome. 

    If your issue is solved, please "Mark as answer" or "Vote as helpful" post to the appropriate answer , so that it will help other members to find solution quickly if they faces similar issue.

    Best Regards,

    Suarez Zhou

    Tuesday, September 10, 2019 1:07 AM