Menu

Win32 with XP theme

Mini
2009-05-29
2012-09-26
  • Mini

    Mini - 2009-05-29

    Hi!

    I have sometimes problems to create windows applications which support XP themes. Somehow controls disappear if I select "Support Windows XP Themes" from the project options.

    For example, if I compile the code below with XP themes, the control called "button" is not visible and I don't know why. Does anyone else know?

    include <windows.h>

    using namespace std;

    / Declare Windows procedure /
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

    / Make the class name into a global variable /
    char szClassName[ ] = "WindowsApp";
    HWND button;
    int WINAPI WinMain (HINSTANCE hThisInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpszArgument,
    int nFunsterStil)

    {
    HWND hwnd; / This is the handle for our window /
    MSG messages; / Here messages to the application are saved /
    WNDCLASSEX wincl; / Data structure for the windowclass /

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);
    
    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    
    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&amp;wincl))
        return 0;
    
    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           &quot;Windows App&quot;,       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );
    button = CreateWindowEx(WS_EX_TOPMOST,&quot;BUTTON&quot;,&quot;OK&quot;,BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE ,65,65,127,95,hwnd,0,hThisInstance,0);
    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);
    
    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&amp;messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&amp;messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&amp;messages);
    }
    
    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
    

    }

    / This function is called by the Windows function DispatchMessage() /

    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch (message) / handle the messages /
    {
    case WM_DESTROY:
    PostQuitMessage (0); / send a WM_QUIT to the message queue /
    break;
    default: / for messages that we don't deal with /
    return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
    

    }

     
    • Edmund Tudor

      Edmund Tudor - 2009-06-16

      You can try initializing common controls, see this post:

      https://sourceforge.net/forum/message.php?msg_id=2486139

      I remember someone having similar problems before, I don't recall if we ever got a solution, so let us know if this helps.

       

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.