hey, this code I wrote wont work. The 2nd and 3rd buttons wont show up in the program.

#include <windows.h>

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

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

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 (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Tyson's research project!",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           1200,                 /* The programs width */
           1000,                 /* 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 */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&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_CREATE:
                
                CreateWindow(TEXT("button"), TEXT("Introduction to C++"),
                WS_VISIBLE | WS_CHILD,
                10, 10, 140, 30,
                hwnd, (HMENU) 1, NULL, NULL
                );
                
                case WM_COMMAND:
                     
                     if (LOWORD(wParam) == 1)
                     {
                        MessageBox(hwnd, "C++ is a programming language that not alot of programmers use."
    "  I like to use it because I can understand some of the simple code that you can use."
	"  If you know a programming language, you can consider yourself a bilinguist." 
	"  C++ is an addon to the C language and was created by Bjarne Stroustrup"
    ".  Some people say that C++ is worse than C " 
	"because C++ has a way of creating a large amount of memory in your hard drive " 
	"if you include an infinite loop in a program.  C++ is a very rare programming language.", "Introduction to C++", MB_OK | MB_ICONINFORMATION);
                        }
                     
                     break;
                     
                     switch (message)
    {
           case WM_CREATE:
                     
                CreateWindow(TEXT("button"), TEXT("Some cool C++ features"),
                WS_VISIBLE | WS_CHILD,
                170, 10, 160, 30,
                hwnd, (HMENU) 2, NULL, NULL
                );
                
                
                case WM_COMMAND:
                     if(LOWORD(wParam) == 2)
                     {
                        MessageBox(hwnd, "C++ has some cool features.  I really like to use the beep feature.  You can"
                        " see what it does when you click on the BEEP button in the main menu.  Another feature is the debug feature"
                        ".  It can be really helpful when your creating a large program.  It can find a bug in the program and try to "
                        "run the program again.  Another feature is the infinite loop.  It is the most helpful when making a game."
                        "  What it does is it loops a certain part of a program unlimited times.  There are a ton of other features "
                        " but it would take me forever to explain them all.", "Some cool C++ features", MB_OK | MB_ICONINFORMATION);
                        }
                        }
                        
                        break;
                        
                        
                        switch (message)
                        {
                               case WM_CREATE:
                                    CreateWindow(TEXT("button"), TEXT("Beep feature"),
                                    WS_VISIBLE | WS_CHILD,
                                    350, 10, 120, 30,
                                    hwnd, (HMENU) 3, NULL, NULL
                                    );
                                    
                                    case WM_COMMAND:
                                         if(LOWORD(wParam) == 3)
                                         {
                                                           MessageBox(hwnd,"The button feature is quite annoying.", "Beep feature", MB_OK | MB_ICONINFORMATION);
                                                           Beep (12000, 3000);
                                         }
                                         }
                     
                     
                        

           
        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;
}

are there any solutions?

Recommended Answers

All 2 Replies

are there any solutions?

Without knowing what you want to do, we can't give any.
Learn to properly format the question.

  1. Remove unnecessary code (Code that is not relevant to the problem you are having). For example, the MessageBox calls with 6 to 7 lines of useless text is not relevant to the problem you are having. It just takes up screen space and makes it difficult for us to locate the problematic code. If you really want the Message boxes, at least use shorter strings.
  2. Make the indents consistent. There seems to be 4, 8 and maybe 16 space indents, and makes it difficult for us to read the code. Either use the preview functionality and see if the code looks good before posting, or use the edit functionality to edit it if it doesn't look good after posting. I would recommend using 4 SPACES instead of the TAB character to indent.
  3. Give us more information. I can see a some problems in your code. WM_CREATE is handled multiple times. So only the one at the top is called and the code that handles the WM_CREATE s below it, which are the ones supposed to create the other 2 buttons, are not called. Why do you handle the same message in various parts of the code? I can't judge if it is by mistake or not because you haven't said WHEN you want the buttons to be displayed. If you want to make the buttons appear at startup, try the following. Same goes for the WM_COMMAND s too. No need to handle the same message in seperate switch cases.
/*  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_CREATE:
        CreateWindow(TEXT("button"), TEXT("Introduction to C++"),
                    WS_VISIBLE | WS_CHILD,
                    10, 10, 140, 30,
                    hwnd, (HMENU) 1, NULL, NULL);

        CreateWindow(TEXT("button"), TEXT("Some cool C++ features"),
                    WS_VISIBLE | WS_CHILD,
                    170, 10, 160, 30,
                    hwnd, (HMENU) 2, NULL, NULL);

        CreateWindow(TEXT("button"), TEXT("Beep feature"),
                    WS_VISIBLE | WS_CHILD,
                    350, 10, 120, 30,
                    hwnd, (HMENU) 3, NULL, NULL);
        break;
    case WM_COMMAND:
        if (LOWORD(wParam) == 1)
        {
            MessageBox(hwnd, "Message 1.", "Introduction to C++", MB_OK | MB_ICONINFORMATION);
            break;
        }

        if(LOWORD(wParam) == 2){
            MessageBox(hwnd, "Message 2.", "Some cool C++ features", MB_OK | MB_ICONINFORMATION);

            break;
        }
        if(LOWORD(wParam) == 3)
        {
            MessageBox(hwnd,"Message 3.", "Beep feature", MB_OK | MB_ICONINFORMATION);
            Beep (12000, 3000);
            break;
        }
        break;
    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;
}

Thanks man. That really helped.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.