Hi to all ,
I have a problem i can't see my message box.

Here is the TEST2.cpp

#include <windows.h>
#include <winuser.h>
#include "TEST2.h"
BOOL EndDialog(HWND hDlg,INT_PTR nResult);
/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK ToolDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam);
/*  Make the class name into a global variable  */
char szClassName[ ] = "szClassName";
HWND TOLL = NULL;
HWND MB=NULL;
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 = MAKEINTRESOURCE(IDMENU);                 /* 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 */
           "Windows App",       /* 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 */
           );

    /* 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_COMMAND:
           {
           switch(LOWORD(wParam))
           {case IDEXIT:
                SendMessage(hwnd,WM_CLOSE,0,0);
               break;
            case IDSHOW:
                TOLL=CreateDialog(GetModuleHandle(NULL),MAKEINTRESOURCE(IDDIALOGEX),hwnd,
                ToolDlgProc);
                break;
            case IDHIDE:
       EndDialog(TOLL,0);
          break;
          case IDPRESS:
    MessageBox(NULL,"TOO","bre",MB_OK  | MB_ICONINFORMATION);
break;
             default:
                     break;
                     }
                     break;}
case WM_CLOSE:
     DestroyWindow(hwnd);
     break;
case WM_DESTROY:
     PostQuitMessage(0);
     break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }


    return 0;
}
BOOL CALLBACK ToolDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
     switch(Message){
     case  WM_INITDIALOG:
           ShowWindow(hwnd,SW_SHOW);
         return TRUE;
     default:
             return FALSE;}
}

Recommended Answers

All 9 Replies

TEST2.h

#define IDMENU    1
#define IDEXIT    2
#define IDSHOW    3
#define IDHIDE    4

#define   IDPRESS  5
#define   IDORPRESS 6
#define   IDDIALOGEX 7

TEST2.rc

#include "TEST2.h"
#include <winuser.h>
#include <windows.h>
#define IDMENU    1
#define IDEXIT    2
#define IDSHOW    3
#define IDHIDE    4


IDMENU MENU
BEGIN
POPUP "&FILE"
      BEGIN
      MENUITEM "&EXIT",IDEXIT
      END
POPUP "&TOOL"
      BEGIN
      MENUITEM "&SHOW",IDSHOW
      MENUITEM "&HIDE",IDHIDE
      END
END

#define   IDPRESS   5
#define   IDORPRESS 6
#define   IDDIALOGEX  7




IDDIALOGEX DIALOGEX 10,10,100,70
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "MY DIALOGEX"
FONT 8,"MS Shell Dlg"
{
     PUSHBUTTON "&PRESS",5,7,7,30,10
     PUSHBUTTON "&OR PRESS",6,7,23,30,11
}

Is this the messagebox you speak of?
MessageBox(NULL,"TOO","bre",MB_OK | MB_ICONINFORMATION);

#include <winuser.h>
--That is unnecessary as it is included through <windows.h>

Also, try putting that line of code into your main function to see if it shows up then... To me it appears as though nothing is wrong with you call to MessageBox, but there may be. Also, if it does show up when placed in main, then thre is a no problem with your messagebox, but rather with when the message box is called.

Hi,
I need MesssageBox to show up when i click
on IDPRESS.

Ok... did you try putting it in main to see if there are problems with messagebox, or if you just screwed up somewhere else... I asume you are using Dev-C++ -- I will try to compile&run your code.

What woud i gain if i put MEssageBox it in the Win main if i do that ,than that woud't be what i want.

No... but you will be able to see if there is a problem with the MessageBox function, or if the problem lies elsewhere... When I say "put it in main", I don't mean "Put it in main PERMANENTLY", but rather, just as a temporary thing to help find your problem.

The reason you are not seeing your message box is because you are using the wrong Windows Procedure
You need to use the ToolDlgProc that you have created... this handles messages sent from your child window.
First add this switch to the switch(Message) inside of ToolDlgProc
switch(LOWORD(wParam))
then inside of that swith is where you will need your code for handling IDPRESS
You will simply need to add a case for IDPRESS (and whatever else you want) to the switch found in ToolDlgProc
Also

LRESULT CALLBACK ToolDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   //Whatever
   switch(Message)
   {
      //Whatever other cases
      case WM_COMMAND:
         switch(LOWORD(wParam))
         {
             //Whatever other cases
             case IDPRESS:
                 MessageBox(NULL,"TOO","bre",MB_OK  | MB_ICONINFORMATION);
              break;
           //Default case and such
       }
   }
}
/*
The above is just a general idea, it should, but may not work.
*/
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.