Thread: open dlg box

  1. #1
    Sanity is for the weak! beene's Avatar
    Join Date
    Jul 2006
    Posts
    321

    open dlg box

    hi all
    i have put a dialog box in my program in the previous post, but when i run my program, the dialog box appears straight away, is there a way that i can make the dialog box appear when i click the open button in the menu?

    Code:
    /* main.cpp */
    #include "resource.h"
    #include <windows.h>
    
    /*  Declare Windows procedure  */
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    
    /*  Make the class name into a global variable  */
    char szClassName[ ] = "BeenePad";
    
    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(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON)); 
        wincl.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 16, 16, 0);
        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
        wincl.lpszMenuName = MAKEINTRESOURCE(IDR_MYMENU);
        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 */
               "Beenepad",          /* 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);
       
        BOOL ShowOpenFileDlg(HWND hwnd, LPSTR lpstrFileName, LPSTR lpstrTitleName);
        {
            OPENFILENAME ofn;
            char szFileName[MAX_PATH] = "";
    
            ZeroMemory(&ofn, sizeof(ofn));
    
            ofn.lStructSize = sizeof(ofn); /* SEE NOTE BELOW */
            ofn.hwndOwner = hwnd;
            ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0";
            ofn.lpstrFile = szFileName;
            ofn.nMaxFile = MAX_PATH;
            ofn.Flags = OFN_EXPLORER | 
                        OFN_FILEMUSTEXIST | 
                        OFN_HIDEREADONLY | 
                        OFN_ALLOWMULTISELECT |
                        OFN_CREATEPROMPT |
                        OFN_EXTENSIONDIFFERENT;
            ofn.lpstrDefExt = "txt";
    
            if(GetOpenFileName(&ofn))
            {
                /* Do something usefull with the filename stored in szFileName */
            }
        }
    
        /* 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:
            {
                HFONT hfDefault;
                HWND hEdit;
    
                hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", 
                    WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 
                    0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_EDIT, GetModuleHandle(NULL), NULL);
                if(hEdit == NULL)
                    MessageBox(hwnd, "Could not create edit box.", "Error", MB_OK | MB_ICONERROR);
    
                hfDefault = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
                SendMessage(hEdit, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0));
            }
            break;
            case WM_SIZE:
            {
                HWND hEdit;
                RECT rcClient;
    
                GetClientRect(hwnd, &rcClient);
    
                hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT);
                SetWindowPos(hEdit, NULL, 0, 0, rcClient.right, rcClient.bottom, SWP_NOZORDER);
            }
            break;
           	case WM_COMMAND:
    		switch(LOWORD(wParam))
    		{
                case ID_FILE_EXIT:
                    PostMessage(hwnd, WM_CLOSE, 0, 0);
                break;
                case ID_FILE_OPEN:
                    
                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;
    }

  2. #2
    Registered User kryptkat's Avatar
    Join Date
    Dec 2002
    Posts
    638
    Sw_show
    Sw_hide

  3. #3
    Sanity is for the weak! beene's Avatar
    Join Date
    Jul 2006
    Posts
    321
    im afraid i don't understand, is that all?

  4. #4
    Registered User Ktulu's Avatar
    Join Date
    Oct 2006
    Posts
    107
    You placed the ShowOpenFileDlg function in the middle of your WinMain function, that's bad and now you can only call it in the WinMain function, you should put 'above' your WinMain function so you can call it from anywhere. ShowOpenFileDlg is called before your own window is drawn, you should call when the user clicks on a certain button.
    This parameter is reserved

  5. #5
    Sanity is for the weak! beene's Avatar
    Join Date
    Jul 2006
    Posts
    321
    right, ive made the dialog not appear ata the start of the program, but now i'm confused, how would i go about amking it appear when the user clicks the open button in the menu?

  6. #6
    Registered User
    Join Date
    Mar 2005
    Posts
    16
    Handle the BN_CLICKED notification in your WM_COMMAND handler.

  7. #7
    Sanity is for the weak! beene's Avatar
    Join Date
    Jul 2006
    Posts
    321
    i have done that, but the dialog box won't appear
    here is the edited code:
    Code:
    /* main.cpp */
    #include "resource.h"
    #include <windows.h>
    #include <tchar.h>
    
    /*  Declare Windows procedure  */
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    
    /*  Make the class name into a global variable  */
    char szClassName[ ] = "BeenePad";
    
    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 */
        HWND hwndTextView;
        TCHAR szFileName[MAX_PATH];
        TCHAR szFileTitle[MAX_PATH];
        
        BOOL ShowOpenFileDlg(HWND hwnd, PSTR *pstrFileName, PSTR *pstrTitleName);
        {
            OPENFILENAME ofn;
            char szFileName[MAX_PATH] = "";
    
            ZeroMemory(&ofn, sizeof(ofn));
    
            ofn.lStructSize = sizeof(ofn); /* SEE NOTE BELOW */
            ofn.hwndOwner = hwnd;
            ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0";
            ofn.lpstrFile = szFileName;
            ofn.nMaxFile = MAX_PATH;
            ofn.nMaxFileTitle	= _MAX_FNAME + _MAX_EXT;
            ofn.Flags = OFN_EXPLORER | 
                        OFN_FILEMUSTEXIST | 
                        OFN_HIDEREADONLY | 
                        OFN_ALLOWMULTISELECT |
                        OFN_CREATEPROMPT |
                        OFN_EXTENSIONDIFFERENT;
            ofn.lpstrDefExt = "txt";
    
            if(GetOpenFileName(&ofn))
            {
                
            }
        }
        
        /* 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(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON)); 
        wincl.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 16, 16, 0);
        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
        wincl.lpszMenuName = MAKEINTRESOURCE(IDR_MYMENU);
        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 */
               "Beenepad",          /* 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_CREATE:
            {
                HFONT hfDefault;
                HWND hEdit;
    
                hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", 
                    WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 
                    0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_EDIT, GetModuleHandle(NULL), NULL);
                if(hEdit == NULL)
                    MessageBox(hwnd, "Could not create edit box.", "Error", MB_OK | MB_ICONERROR);
    
                hfDefault = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
                SendMessage(hEdit, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0));
            }
            break;
            case WM_SIZE:
            {
                HWND hEdit;
                RECT rcClient;
    
                GetClientRect(hwnd, &rcClient);
    
                hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT);
                SetWindowPos(hEdit, NULL, 0, 0, rcClient.right, rcClient.bottom, SWP_NOZORDER);
            }
            break;
           	case WM_COMMAND:
    		switch(LOWORD(wParam))
    		{
                HWND hCntrl;
                WORD wID, wNotify;
      
                hCntrl=(HWND)lParam;
                wID=LOWORD(wParam);
                wNotify=HIWORD(wParam);
      
                if (hCntrl)
                {
                    /*notification is from a control*/
                    if (wNotify==BN_CLICKED)
                    {
                        /*the notification is a result of a button click*/
                        if (wID==ID_FILE_OPEN)
                        {
                            
                        }
                    }
                }
                case ID_FILE_EXIT:
                    PostMessage(hwnd, WM_CLOSE, 0, 0);
                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;
    }

  8. #8
    Registered User Ktulu's Avatar
    Join Date
    Oct 2006
    Posts
    107
    beene, you should read this first: http://www.cprogramming.com/tutorial/lesson1.html
    This parameter is reserved

  9. #9
    Sanity is for the weak! beene's Avatar
    Join Date
    Jul 2006
    Posts
    321
    i don't get it, this has nothing to do with my program

  10. #10
    Sanity is for the weak! beene's Avatar
    Join Date
    Jul 2006
    Posts
    321
    so, is anybody going to tell me where i'm going wrong?

  11. #11
    Reverse Engineer maxorator's Avatar
    Join Date
    Aug 2005
    Location
    Estonia
    Posts
    2,318
    i don't get it, this has nothing to do with my program
    Oh yeah it does, you don't understand functions and scopes.
    "The Internet treats censorship as damage and routes around it." - John Gilmore

  12. #12
    Sanity is for the weak! beene's Avatar
    Join Date
    Jul 2006
    Posts
    321
    can somebody just not tell me how to make the dialog box appear?

  13. #13
    Sanity is for the weak! beene's Avatar
    Join Date
    Jul 2006
    Posts
    321
    i have went over the tut several times, and i don't get what i have to learn to make this program learn

  14. #14
    Reverse Engineer maxorator's Avatar
    Join Date
    Aug 2005
    Location
    Estonia
    Posts
    2,318
    DO not define functions inside other functions.

    BTW, there's no call to ShowOpenFileDlg.
    "The Internet treats censorship as damage and routes around it." - John Gilmore

  15. #15
    {Jaxom,Imriel,Liam}'s Dad Kennedy's Avatar
    Join Date
    Aug 2006
    Location
    Alabama
    Posts
    1,065
    Code:
        BOOL ShowOpenFileDlg(HWND hwnd, PSTR *pstrFileName, PSTR *pstrTitleName);
    Aside from this being declared inside another function, as you have already been told several times, you also have a ; at the end of it. . . which makes you do NOTHING other than tell WinMAin that there is a function call ed ShowOpenFileDlg() that is NEVER defined. Try compiling with -Wall (if your compiler supports this) to show you some of the other errors you have.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. BN_CLICKED, change button style
    By bennyandthejets in forum Windows Programming
    Replies: 13
    Last Post: 07-05-2010, 11:42 PM
  2. Way to get the current open programs displayed?
    By CPPguy1111 in forum C++ Programming
    Replies: 6
    Last Post: 06-22-2005, 12:24 AM
  3. Dialog Box Problems
    By Morgul in forum Windows Programming
    Replies: 21
    Last Post: 05-31-2005, 05:48 PM
  4. How to program a "back" button with MFC
    By 99atlantic in forum Windows Programming
    Replies: 3
    Last Post: 04-26-2005, 08:34 PM
  5. Color Dlg Box
    By The15th in forum Windows Programming
    Replies: 1
    Last Post: 12-20-2001, 08:13 PM